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
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?
Das habe ich mir auch schon angeguckt, diese function unter "Aktivieren des ADC" funktioniert bei mir nicht
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?
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!
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.
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
Tja, genau das steht im Tutorial auf deutsch und im Datenblatt auf Englisch. Beides ist sehr ausführlich.
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 ?
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 ;-)
Sorry aber ich stehe ganz am Anfang was C und µC programmierung betrifft. Jeder hat mal klein angefangen
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
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.