Habe ein Problem: Will ein Programm schreiben was mir den AD Wandler ausliest..nun bekomme ich fogende Fehlermeldung: C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\default/../PORTAUSGABE_AVR_C.c:24: undefined reference to `sbi' bei dem u.g. Programm..wo liegt der Fehler #define TRUE 1 #define FALSE 0 #define F_CPU 800000UL #include <avr/io.h> #include <util/delay.h> int main (void) { DDRA = 0xff; DDRB = 0xff; ADCSR = 0xc5; while(1) { loop_until_bit_is_clear(ADCSR,ADSC); PORTB = ADCL; PORTA = ADCH; sbi(ADCSR,ADSC); } } C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\default/../PORTAUSGABE_AVR_C.c:24: undefined reference to `sbi'
uiiii..das sieht schon besser aus :-) Anmerkung: habe das Programm aus einem Buch abgetipp..ist da etwa dem Autor ein Fehler unterlaufen?? Will das Buch hier nicht nennen...nur auf anfrage Gruß Ingo
Ingo Laabs wrote: > Anmerkung: habe das Programm aus einem Buch abgetipp..ist da etwa dem > Autor ein Fehler unterlaufen?? Nein, früher gab es diesen "Befehl" noch, mittlerweile wurde dieser entfernt, um näher an den C Standards zu sein.
und was mache ich mit dem Befehl sei(); ?...gleich problem wie oben bevor sich einer wunder...bin noch nicht in C fit..von daher diese Anfängerfragen
Ich schreibe generell in jedes Programm folgendes: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/sleep.h> #include <avr/wdt.h> #include <avr/eeprom.h> #include <stdlib.h> #include <util/delay.h> Das dürfte fast alles was man auf dem µC häufig verwendet abdecken.
verstehe aber folgende Zeile noch nicht so recht loop_until_bit_is_clear(ADCSR,ADSC); wo wird die definiert?
ahhh..da #define bit_is_clear(sfr, bit) (!(_SFR_BYTE(sfr) & _BV(bit))) /** \def loop_until_bit_is_set \ingroup avr_sfr \code #include <avr/io.h>\endcode Wait until bit \c bit in IO register \c sfr is set. */ gibt es irgendwo eine Beschreibung der Möglichkeiten der Funktionen von avr/io?
Habe immer noch Probleme mit AD Wandlung Habe LED´s an Port A und versuche ADC9 an Pin 9 vom Tiny26 zu wandeln..aber geht nicht #define TRUE 1 #define FALSE 0 #define F_CPU 800000UL #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/sleep.h> #include <avr/wdt.h> #include <avr/eeprom.h> #include <stdlib.h> #include <util/delay.h> int main (void) { DDRA = 0xff; // Port A = Ausgang DDRB = 0x00; // Port B = Eingang ADMUX = 0x09; //ADC9 ADCSR = 0xc5; while(1) { loop_until_bit_is_clear(ADCSR,ADSC); PORTA = ADCL; ADCSR |= (1<<ADSC); //sbi(ADCSR,ADSC); } }
Es macht erstens nur wenig Sinn, nur das Low-Byte des Wandlungsergebnisses (ADCL) zu lesen, und zweitens funktionier das genau einmal. Wenn ADCL gelesen wurde, muss grundsätzlich anschließend ADCH gelesen werden. Erst nach dem Lesezugriff auf ADCH wird das Ergebnisregister wieder für ein neues Ergebnis freigegeben. Wenn nur ADCL gelesen wird, kann der ADC kein neues Ergebnis in dem Registerpaar ablegen. Wenn Du nur 8 Bit vom Ergebnis haben willst, dann setze das Steuerbit ADLAR. Das Wandlungsergebnis wird in dem Fall linksbündig in den beiden Ergebnisregistern abgelegt, und es muss nur noch ADCH ausgelesen werden.
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.