Attiny läuft langsam

#1007785
Lesenswert?

Hi Leute hab mal ne kleine Frage.

Und zwar habe ich hier einen Attiny 13 der mit 9.6 Mhz läuft.
Nun wollte ich testweise mal eine LED blinken lassen und nutze dafür die 
funktion:

void long_delay(uint16_t ms)
{
    for(; ms>0; ms--) _delay_ms(1);
}

damit die LED nach 10 Sekunden aus geht nutze ich den aufruf 
long_delay(10000).

das problem ist nun das sie aber erst nach 1minute20 ausgeht.

Stelle ich den CPU Tackt auf 4.8 geht sie erst nach 40 Sekunden aus.Habe 
die Frequenz auch korrekt in AVR Studio eingegeben.

Weiss einer woran es liegen kann?

Gruss Flo
Gast #1007851
Lesenswert?

Die Taktfrequenz eines Controllers kann man sehr schnell mit einem 
kleinen Testprogramm herausbekommen. Man schaltet in einer 
Endlosschleife einen Portpin abwechselnd auf H und L, und dazwischen 
ruft man eine Delay-Routine auf, die eine bekannte Anzahl Taktzyklen 
verbrät, z. B. diese:
1
Delay200KCyles:
2
    ldi  ZL, Low(40000)
3
    ldi  ZH, High(40000)
4

5
Delay200KCyclesLoop:
6
    nop                         ; 1 Cycle
7
    sbiw ZL, 1                  ; 2 Cycles
8
    brne Delay200KCyclesLoop    ; 2 Cycles
9

10
    ret

Damit ist der AVR für (fast) genau 200000 Taktzyklen beschäftigt. 
Folglich wird bei FOSC = 8 MHz der Pin mit der Frequenz 8000000/200000/2 
= 20 Hz togglen.  Das kann man leicht erfassen (Datenlogger, 
Frequenzmessgerät, Oszi, oder über einen Frequenzteiler weiter teilen 
und eine Stoppuhr benutzen).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren