Forum: Compiler & IDEs AD Wandlung mit AD MEGA 32


von Gizmo (Gast)


Lesenswert?

Hi

ich habe folgendes Problem und zwar möchte ich mit einem ATMEGA16 einen
Analog wert einlesen. Ich habe aber keine Ahnung, wie man den AD Wandler
benutzt. Ich habe mir schon das Beispiel im GCC Tutorial angesehen, kann
damit aber nix anfangen. Kann mir jemand von euch vielleeicht ein paar
Tipps geben.

vielen Dank für Eure Hilfe

von Chris (Gast)


Lesenswert?

Wo genau kommst du denn nicht weiter?

von Mike (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_interne_ADC_im_AVR

Also wer damit nicht klar kommt, dem ist nicht zu helfen. Dort steht es
komplett mit Code und seitenlanger Erklärung auf deutsch. Oder ist die
Sprache das Problem?

von Gizmo (Gast)


Lesenswert?

Das habe ich mir auch schon angeguckt, diese function unter "Aktivieren
des ADC" funktioniert bei mir nicht

von Mike (Gast)


Lesenswert?

Solange du nicht definierst, was "funktioniert nicht" heißt, wird dir
wohl nicht geholfen werden. Der Code ist 100% i.O., also kann der
Fehler nur bei dir liegen :-)

Compilerfehlermeldung?
unerwartetes Ergebnis?

von Danny (Gast)


Lesenswert?

ADCSRA = (1 << ADEN)|(1 << ADSC)|(1 << ADPS2)
   |(1 << ADPS1)|(1 << ADPS0);                [S.214]
while (inp(ADCSRA) & BV(ADSC));              // Warten bis ADC bereit
ADMUX = 0x00;

.
.
.
.

ADMUX = 0x00; // für PA0 oder welchen auch immer
ADCSRA |= 0x40;  //start ADC
while (!(ADCSRA & (1<<ADIF)));    // Warten bis ADC bereit
CLRBIT(ADCSRA,ADIF);   // ADC Interrupt-Flag löschen
ERGEBNIS = ADC;

Das Funktioniert einwandfrei mit meinem Mega32....
Ansonsten RTFM!

von Alex (Gast)


Lesenswert?

Großer Fehler: Wenn du schon Code postest, dann entweder komplett oder
nicht. Einem Anfänger fehlen da sofort Makros (inp, CLRBIT, ...).
Ausser Fehlermeldungen hat er also keinen Erkenntnisgewinn.

Abgesehen davon, warum pollst du das Interrupt-Flag?

Der Code im Tutorial ist doch wesentlich besser.

von Gizmo (Gast)


Lesenswert?

mir ist noch nicht ganz klar welche Register man brauch um eine AD
Wandlung durchzuführen und welche Bits warum in welchem Register
gesetzt werden müssen

von Alex (Gast)


Lesenswert?

Tja, genau das steht im Tutorial auf deutsch und im Datenblatt auf
Englisch. Beides ist sehr ausführlich.

von Gizmo (Gast)


Lesenswert?

Wieso funktioniert folgendes nicht ?:

#include <avr/io.h>

int main(void)
{
  unsigned char i;
  R0=0xff;

  /* Endlosschleife */
  for (;;);

  return 0;
}

Compiler sagt folgendes:

test.c:12:2: warning: no newline at end of file
make.exe: *** [test.o] Error 1

> Process Exit Code: 2

ich dachte der ATMEGA 32 hätte 32 Arbeitsregister mit denen ich machen
kann was ich möchte.

was habe ich hier falsch gemacht ?

von Alex (Gast)


Lesenswert?

Na herrlich :-)

Du kennst den Unterschied zwischen Assembler und C?

Wenn du in C programmierst, hast du auf die inneren Register keinen
Zugriff, die verwaltet der Compiler. Du kannst dir beliebig Variablen
deklarieren und diese manipulieren. Lediglich die IO-Register (des SPI,
ADC, TWI, ...) stehen dir zu Verfügung.

Also: int i = 0xFF;

Wie du die Warnung mit "no newline at end of file" beseitigst weißt
du hoffentlich ;-)

von Gizmo (Gast)


Lesenswert?

Sorry aber ich stehe ganz am Anfang was C und µC programmierung
betrifft. Jeder hat mal klein angefangen

von Gizmo (Gast)


Lesenswert?

welche Register stehen mir genau zur Verfügung wenn ich mit c
programmiere ?
Kann mir das jemand erklären oder mir sagen wo ichs nachlesen kann

von Alex (Gast)


Lesenswert?

Nachlesen kannst du das im Datenblatt.

Dir stehen nur die Register, welche in der Headerdatei deines MC
definiert sind zur Verfügung. (iom32.h oder ähnlich im WinAVR
Verzeichnis)

von Dirk (Gast)


Lesenswert?

Hallo,

>>Sorry aber ich stehe ganz am Anfang was C und µC programmierung
>>betrifft. Jeder hat mal klein angefangen


Das jeder mal klein angefangen hat stimmt , aber dann sollte man erst
die Tutorial's bearbeiten und sich danaach langsam an ein Projekt
wagen.

Das Tutorial im Wiki zum GCC ist sehr zu empfehlen.

Mfg
Dirk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.