oderlachs
10.03.2013, 15:50
Hallo Freunde !
ich brauche für ein AVR Alarm-Projekt eine Zeitschleife von 3 min, welche ich mir so gedacht habe:
// 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
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.
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
ich brauche für ein AVR Alarm-Projekt eine Zeitschleife von 3 min, welche ich mir so gedacht habe:
// 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
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.
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