AD Wandlung mit AD MEGA 32

Gast #182023
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
Gast
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?
Gast
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!
Gast
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.
Gast
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
Gast
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 ?
Gast
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 ;-)
Gast
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)
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.