PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Zeitschleife zu kurz....ATTiny2313



oderlachs
10.03.2013, 14: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

MagicWSmoke
10.03.2013, 14:58
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.

oderlachs
10.03.2013, 15:10
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