mikrocontroller.net

Forum: Compiler & IDEs ATmega8 und delay: Ich versteh die Welt nicht mehr


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab ein großes Problem: Nachdem ich ein wenig mit Soft-PWM 
rumgespielt habe, funktionieren die einfachsten Sachen nicht mehr. Das 
primitive Blink-Programm (das so auf dem selben uC mal tat) will einfach 
nicht mehr.

Jeder Wert <= 13 funktioniert, dann leuchtet die LED halt mit halber 
Helligkeit. Bei größeren Werten kommt er aber gar nicht mehr bis zum 
Einschalten.

Der Code wird korrekt zum uC übertragen, ich kann ihn von dort wieder 
auslesen, das kann also nicht der Fehler sein.

OK, dann mal die Fakten: Ich hab hier einen ATmega8, die Fuses sind in 
der Standardeinstellung (ich hatte den Takt mal falsch gesetzt, da hat 
sogar der Timer gesponnen, aber jetzt sind sie wieder auf 0xC1 0x99). 
Compiler ist avr-gcc 4.1.3 20080612 bzw. WinAVR-20081205 (mit beiden 
getestet, gleiches Problem). Optimierung ist -Os, F_CPU ist auch richtig 
gesetzt.

Ich hab das Programm mit 13 und 14 kompiliert und dissassembliert, sieht 
alles OK aus, der einzige Unterschied ist die 
Warteschleifeninitialisierung:
_delay_ms(13):
  62:   e2 eb           ldi     r30, 0xB2       ; 178
  64:   fc e0           ldi     r31, 0x0C       ; 12

_delay_ms(14):
  62:   ec ea           ldi     r30, 0xAC       ; 172
  64:   fd e0           ldi     r31, 0x0D       ; 13

Ich hoffe, mir kann hier jemand helfen!

Ansonsten: Frohe Weihnachten!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> OK, dann mal die Fakten: Ich hab hier einen ATmega8, die Fuses sind in
> der Standardeinstellung (ich hatte den Takt mal falsch gesetzt, da hat
> sogar der Timer gesponnen, aber jetzt sind sie wieder auf 0xC1 0x99)

Schau mal nach der Fuse "Watch-dog Timer always on; [WDTON=0]" bzw. 
schalte die mal aus.

Hinweise zum Watchdog:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Insbesondere dieser Abschnitt: "Es besteht die Möglichkeit 
herauszufinden, ob ein Reset durch den Watchdog ausgelöst wurde..."

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke, ich hab die Fuse ausgeschaltet, jetzt tuts.

Aber ich würde auch ganz gern verstehen, was da eigentlich passiert. 
Irgendwas muss den Watchdog ja ausgelöst haben. Wie gesagt, delay bis 13 
ms funktioniert, mehr nicht. Auch wenn zum Beispiel 2 mal hintereinander 
10 ms warte, hängt er (möglicherweise packt das dann der Compiler 
zusammen). Komischerweise tat halt genau dieses Programm unverändert 
schon mal (mit WDTON=0) und jetzt nicht mehr.

Naja, ich brauch den Watchdog grad nicht, ich kann also wieder spielen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte das Problem auch mal 
(http://www.mikrocontroller.net/articles/Pollin_Fun...). 
Damals hatte ich vermutet, dass die im Netz angegebenen 
Default-Einstellungen einen aktivierten Watchdog beschreiben, das aber 
in den Werkseinstellungen nicht der Fall ist. Nachdem man das erste Mal 
die vermeintlichen Werkeinstellungen reaktiviert hat, sitzt man im 
Resetwunderland. Bisher hatte ich noch keinen "frischen" AVR zum 
nachkontrollieren dieser These.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die These könnte stimmen. Das Datenblatt des ATmega8 gibt Dir Recht:
Fuse High Byte | Bit No. | Description   | Default Value
---------------+---------+---------------+---------------------------------------
WDTON          | 6       | WDT always on | 1 (unprogrammed, WDT enabled by WDTCR)

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.