Eine Sekunde sind plötzlich 10 lang

OP #551712
Lesenswert?
• ▲
▼
Hallo!

Seit gestern suche ich nun nach einem Fehler, warum mein HD44780-Display 
nicht initialisiert, obwohl es dieses in einer anderen Schaltung mit 
der, bis auf die Pinkonfiguration, identischen Software tut. Nun stellte 
ich soeben fest, dass was mit dem Timing nicht stimmt. Folgender Code:
1
while(1) { for (i=0; i<50; i++) _delay_ms(20); usw; }
Sollte eine LED an- und ausschalten und ich erwarte ein T_On von 1s und 
ein T_Off von 1s, da 50*20ms=1s (In usw; steckt natürlich LED an, 
gleiche Wartezeit und LED aus). Ich erhalte aber 10s.

Verbaut ist ein 10MHz Quarz an einem Mega644V und unter 
Projekteinstellungen habe ich auch 10000000 Hz angegeben. Eine 
Redefinition von F_CPU bringt nur eine Warnung, ändern tut sich nix.

Was habe ich denn verpennt? Ich denke mal, dass ich damit endlich den 
Grund gefunden habe, warum das Display nicht läuft. Das Timing der 
Init-Sequenz soll ja kritisch sein.

Grüße!
Gast #551716
Lesenswert?
• ▲
▼
vermutlich der alte 'Standard' Fehler: die _delay_ms() Funktion erlaubt 
nicht beliebig lange delays. Die maximale Verzögerungszeit hängt von der 
Taktfrequenz ab, schaue mal in den Header wo delay_ms definiert ist, da 
steht die Formel für die max. Zeit drin.
Eine andere Fehlerquelle ist eine falsche Einstellung die per 'Fuse' 
gemacht wird: wird wirklich der ext. Quarztakt benutzt? Faktor 10 kann 
auch daher kommen das ein interner 1Mhz Takt aktiv ist.
OP #551756
Lesenswert?
• ▲
▼
Ja, genau. Deshalb wählte ich 20ms, weil ich das mit den 26 komma 
irgendwas schon gelesen hatte.

Aber jetzt habe ich mich AUSGESPERRT! Statt einen Schritt nach vorn habe 
ich einen nach hinten gemacht. Ich programmierte die LFUSE auf 0xE0, das 
heißt SUT belassen bei 0b10 (65ms Wartezeit), CKDIV8 habe ich auf 1 
gesetzt also keine Frequenzteilung und CKSEL auf 0b0000 (externe 
Quelle).

Meine Hardware hat an XTal1 und XTal2 einen 10MHz Quarz dicht gesetzt 
(2polig, hohe Bauform). Jeweils von XTAL geht ein Kondensator zur Masse. 
Die könnten allerdings zu groß sein. Was nimmt man da so? Würden zu 
große C das Schwingen verhindern? Es scheint ja gerade zu, als ob er 
nicht mehr anschwingt und ich so nicht rein komme. Aber ich habe auch 
kein Oszi, um das zu messen. Was mache ich denn jetzt!?

Grüße!
Persönliche Seite #551768
Lesenswert?
• ▲
▼
>CKSEL auf 0b0000 (externe Quelle).

Typischer fehler, du darfst nicht auf externe Taktquelle fusen sondern 
auf Externen Quarz.

Im moment erwartet dein AVR einen sauberen fertigen Takt an XTAL1
Da du jedoch einen Quarz und keinen Quarzoszillator (4 Beine) dran 
hängen hast, kann das ganze so nicht laufen.

Am einfachsten programmierst du einen anderen AVR, dass er z.b. mit nem 
CTC timer dir nen Takt erzeugt. Diesen Takt kannst du dann auf XTAL1 
legen dann solltest du den µC wieder programmieren können.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.