Du wirst F_CPU bereits woanders definiert haben, z.B. als Symbol im AVR-Studio, die Delays werden dann auf dieser Basis berechnet und laufen dann bei aktuellen 12MHz Clock zu schnell.
Hallo Freunde !
ich brauche für ein AVR Alarm-Projekt eine Zeitschleife von 3 min, welche ich mir so gedacht habe:
Wenn ich die Zeit des Blinkens(LED > +5V an PortB.1), bis zur ständigen Ausschaltung des Blinkvorganges, mit einer Stopuhr messe , komme ich nur auf 2min 15sec. es soll mir nicht auf 2..3..5 Sec. ankommen aber ca.45 Sec sind zu viel Abweichung.Code:// Zeitbegrenzung 3min #ifndef F_CPU #define F_CPU 12000000 #endif #include <util/delay.h> // vor der Einbindung von delay.h muss F_CPU definiert sein, // sonst Ausgabe von Fehlermeldung das F_CPU nicht def. ist #include <avr/io.h> // Port B1 wird 3min lang getoggelt int main(void) { DDRB |=(1<<PB1); int zeit =0; while( zeit < 180) // nach 180sec = 3min // ausschalten { PORTB |= (1<<PB1); // Ausgang HIGH _delay_ms(500); // 0,5 sec PORTB &= ~(1<<PB1); // Ausgang LOW _delay_ms(500); // 0,5 sec zeit++; // 2x 0,5 sec = 1sec } PORTB |= (1<<PB1); // Ausgang HIGH = Aus
Die Fuses sind richtig gesetzt...ext. Quarz entspr. Frequ., kein Vorteiler usw.. Vielleicht mache ich ja einen grundsätzlichen Fehler beim Code, kann mir wer bitte helfen ??
Danke und Gruss
Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Du wirst F_CPU bereits woanders definiert haben, z.B. als Symbol im AVR-Studio, die Delays werden dann auf dieser Basis berechnet und laufen dann bei aktuellen 12MHz Clock zu schnell.
Danke Magic !
Nein es ist dem nicht so, das war ein Hardwarefehler, der Qu hatte ne "Macke", da ich keinen 2ten 12MHz hatte habe ich mal auf 16MHz gesetzt und auch die F_CPU geändert, fast sekundengenau geht es jetzt. Nun ja in so eine kleines Quarz-"Blechdöschen" kann man ja nicht schauen, ob das Ding auch richtig schwingt..
Trotzdem was gelernt, alles was schwingt muss es nicht immer richtig tun..
Danke Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Lesezeichen