attiny läuft zu schnell - fuses?

Gast #2033296
Lesenswert?

hallo

hab folgendes problem:

led soll einmal pro sekunde aufblitzen. erst lief das ganze bei halber 
geschwindigkeit bis ich CKDIV8 ausgeschaltet habe. jetzt 4 mal zu 
schnell (mit stoppuhr gemessen, muss also kein exakter wert sein).

die fuses sind so dass der interne rc oszi mit 9.6 MHz benutzt wird.

(fuses high: 0xff, low: 0x7a)

in avr studio hab ich unter project options 9600000 Hz eingestellt.

woran kanns noch liegen?
bin langsam am verzweifeln weil ich schon 2 stunden für den humbug 
verschwendet habe, brauche aber die richtige geschwindigkeit.

1
while(1) {
2

3
    PORTB = 0b00010000;    // port bit 4 für led blinken benutzen (pin 3 an attiny13)
4
    _delay_ms(100);
5

6
    PORTB = 0b00000000;
7
    _delay_ms(900);
8

9
}
Gast #2033303
Lesenswert?

meine Gedanken:
- #define F_CPU mit reinbasteln
- und die delay funktion kann nurbegrenzt lang sein!
 schau mal in der delay.h nach
( The maximal possible delay is 262.14 ms / F_CPU in MHz. )
also 262.14ms/9,6

schnelle, dirty lösung wäre
z.B. 9x
_delay_ms(100);

grüße
Gast #2033310
Lesenswert?

#define F_CPU
hat nichts gebracht - ich habe auch schon vorher in einer compiler 
message gesehen dass es richtig gesetzt ist.

in der delay funktion heisst es zwar dass die auflösung reduziert ist 
wenn man zu grosse werte benutzt (nicht mehr taktgenau), aber 
funktionieren muss sie trotzdem.
Gast #2033327
Lesenswert?

hab jetzt trotzdem mal explizit das probiert:
1
    PORTB ^= 0b00010000;
2
    for (i=0; i<=4; i++) _delay_ms(25);
3

4
    PORTB ^= 0b00010000;
5
    for (i=0; i<=36; i++) _delay_ms(25);

läuft gleich schnell.

funktioniert die delayfunktion nicht mehr richtig - wird irgendwas 
wegoptimiert?
kann ja kaum sein dass der tiny mit 38.4 MHz läuft, also muss der code 
den prozessor zu wenig lange beschäftigen...

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