Forum: Mikrocontroller und Digitale Elektronik attiny läuft zu schnell - fuses?


von Tüll (Gast)


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
}

von Steffen (Gast)


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

von Steffen (Gast)


Lesenswert?

ach, da hab ich flasch gerechnet, aber das sollte das Problem sein!

von Tüll (Gast)


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.

von Tüll (Gast)


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...

von Tüll (Gast)


Lesenswert?

OMG ARGHHH

"Die _delay_ms() und die _delay_us aus avr-libc 1.7.0 sind fehlerhaft. 
_delay_ms () läuft 4x schneller als erwartet. Abhilfe ist eine 
korrigierte Includedatei:
Beitrag "Re: _delay_ms() läuft 4 Mal schneller als erwartet";


so viel zeit verschwendet, dabei brauch ich die blöde delay funktion 
garnicht, wollte nur das setup erstma testen bevor ich loslege... :(

von sven (Gast)


Lesenswert?

>>>bis ich CKDIV8 ausgeschaltet
Ist doch klar nun ist es 8 mal schneller, weil es ein Teiler durch acht 
ist...
Vorher 0.5/sec. nun 4/sec. = Faktor 8...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.