Hallo miteinander, ich versuche gerade verzweifelt den adc am atmega8 anzusprechen, allerdings scheitert es schon daran, dass der compiler die ganzen register nicht kennt. #include <inttypes.h> #include <avr/io.h> #include <string.h> #include <stdlib.h> int main(void) { outp((1<<ADEN) & (1<<ADFR) & 5, ADCSR); ADMUX = 0; ... mehr ist es noch nicht, aber ich bekomme als fehlermeldungen: error: ADCSR undeclared error: ADFR undeclared error: ADEN undeclared error: ADMUX undeclared woran kann das liegen? in allen tutorials die ich gefunden habe wird der adc so gestartet. als programmierumgebung verwende ich das avr studio von atmel und avr-gcc. danke schonmal! mfg --steffen
ok, die frage hat sich jetzt doch erledigt, ich hatte vergessen an den anfang das #define _AVR_ATmega8_ zu schreiben. jetzt gibt es keine probleme mehr mit dem compilieren. allerdings funktioniert jetzt die ausgabe an den port d mit PORTD = 0xFF; bzw. outp(0xFF, PORTD); seltsamerweise nicht mehr. weiß da jemand rat? mfg --steffen
Deine Anweisung _AVR_ATMega8_ gehört nicht ins Source File ! Den AVR Typ muss man mit dem Compiler Flag -mmcu=ATMega8 mitgeben, siehe Beispiel \winavr\sample\Makefile. Bitte neueste WinAVR Version verwenden, nur diese unterstützt ATMega8.
wenn ich im makefile den atmega8 einstelle, dann bekomme ich die meldung "mcu 'atmega8' supported for assembler only". die neueste winavr version habe ich (20030312). wer hat ideen? danke & viele grüße --steffen
Was soll das denn bitte bedeuten?
> outp((1<<ADEN) & (1<<ADFR) & 5, ADCSR);
Ich gehe mal davon aus das (1 << ADEN) und (1 << ADFR) das 4er und 1er
Bit bilden, du diese mit 5 (also ebenso 4er und 1er Bit) verknüpfst und
hoffst da auch als Ergebnis 5 raus zu bekommen?
outp(5, ADCSR)
währe die eine Möglichkeit, das übliche ist aber eine Oder-Verknüpfung
der geshifteten 1en.
outp((1 << ADEN) | (1 << ADFR), ADCSR);
Des weiteren scheinst du dich nicht zwischen outp() und einer direkten
Zuweisung entscheiden zu können... da outp() als veraltet gilt benutz
lieber die direkte Zuweisung:
ADCSR = (1 << ADEN) | (1 << ADFR);
also erstmal danke an alle, der code wird jetzt fehlerfrei compiliert. ich habe mich jetzt auch für die direkte zuweisung entschieden und alles so geschrieben. allerdings habe ich jetzt ein neues, sehr komisches problem. siehe mein anderer thread. mfg --steffen
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.