www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eine Sekunde sind plötzlich 10 lang


Autor: Günther Frings (taraquedo)
Datum:

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

Autor: JojoS (Gast)
Datum:

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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da läuft der interne takt.umstellen der fuses hilft.

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nochmal nachgesehen, das max. delay bei 10Mhz sollten 26ms sein, wäre in 
dem Code also ok. Bleibt aber noch die falsche Fuse.

Autor: Günther Frings (taraquedo)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Meine Hardware hat an XTal1 und XTal2 einen 10MHz Quarz dicht
> gesetzt (2polig, hohe Bauform).

Also External Crystal

> ... und CKSEL auf 0b0000 (externe Quelle).

Warum machst du denn sowas? Das ist falsch.

> Aber jetzt habe ich mich AUSGESPERRT!

Klar.

http://www.mikrocontroller.net/articles/AVR_Fuses#...

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

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

Autor: Günther Frings (taraquedo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
heul Habe ich gerade beim aufrichtigerem Lesen des DB auch gesehen. So 
ein Mist. Gott sei dank habe ich hier noch einen zweiten rumliegen. Zum 
Reaktivieren steht ja was bei dem Link. Dann habe ich jetzt wohl extra 
Arbeit. *grummel, grummel*

Vielen Dank!

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.