mikrocontroller.net

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


Autor: Tüll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.


while(1) {

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

    PORTB = 0b00000000;
    _delay_ms(900);

}

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach, da hab ich flasch gerechnet, aber das sollte das Problem sein!

Autor: Tüll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tüll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab jetzt trotzdem mal explizit das probiert:

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

    PORTB ^= 0b00010000;
    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...

Autor: Tüll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :(

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.