PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] AVR startet Programm nicht immer?



Schokohoernl
19.10.2011, 00:56
Hallo!

Ich habe hier ein ganz seltsames Problem.
Zunächst zur Hardware: Ein Mega88 mit externem Quartz @20MHz steuert drei MOSFETs an die wiederum ca. 40cm LED-RGB Strip zum leuchten bringen. Über einen FTDI-Chipt hängt das ganze an einem USB-Port in Self-Powered Konfiguration. ISP-Programmer ist ein mySmartUSB light.
Programmiert ist das ganze mit Assembler.
Jetzt das absolut verrückte Problem: Flashe ich ein Programm und lasse sowohl USB- als auch ISP-Stecker eingesteckt, dann funktioniert alles wunderbar auch wenn ich den Stromstecker raus ziehe und wieder reinstecke. Gleiches gilt wenn entweder nur USB- oder nur ISP-Stecker noch verbunden sind und ich den Stromstecker ziehe und wieder rein stecke. Wenn aber weder USB- noch ISP-Stecker drin sind startet der AVR das Programm nicht wenn ich Saft draufgebe. Witziger weise kann ich, läuft das Programm einmal, USB- und ISP-Stecker raus ziehen und der Mega88 läuft ganz normal weiter. Sind einmal alle drei Stecker (USB, ISP und Strom) entfernt worden, passiert so lange nichts bis ich den Mega88 wieder geflasht habe. Wenn ich nachdem alle Stecker einmal entfernt wurden einfach nur auslese (was einwandfrei geht) startet der AVR sein Programm nicht. Erst nach einem erneuten Flash. Wobei ich hier witziger Weise auch genau den Programmspeicher den ich kurz zuvor ausgelesen habe flashen kann und er läuft wieder.
Hat irgendeiner eine Idee woran das liegen könnte??? Hab mit BOD schon rumgespielt, ohne Erfolg.

MfG

Schoko

021aet04
19.10.2011, 12:18
Versorgst du die Schaltung über USB und ISP? Das solltest du auf keinen Fall. Besser wäre nur z.B. über USB versorgen und beim ISP die Ausgangsspannung für den µC abschalten. Damit wird die Schaltung nur über USB versorgt. Hast du schon einmal getestet ob die Hex-Dateien gleich sind? Schreibe die Hexdatei auf den µC. Wenn er nicht startet liest du den µC aus und vergleichst die beiden Dateien.

Einen konkreten Verdacht habe ich allerdings nicht.

MfG Hannes

radbruch
19.10.2011, 12:28
Hallo


Mega88 mit externem Quartz @20MHzVielleicht schwingt der Quarz nicht. Wie groß sind die Kapazitäten, Leiterbahnlängen zum Quarz, wie ist "Start-up Times for the External Clock Selection" eingestellt?

Gruß

mic

Schokohoernl
19.10.2011, 13:27
Danke für die Antworten!

Also Versorgt wird die Schaltung über einen 12V DC-Stecker (so nen runder Stecker). Nen 78l05 regelt dann auf 5V runter. Spannung ist wunderbar stabil auf 4,949V ohne Brumm oder Schwingungen). Vcc ist bei ISP gar nicht angeschlossen, über den USB bekommt das Ding auch keinen Saft (Self-Powered konfiguration wie im Datenblatt des FTDI-Chips beschrieben).

Start-up Time ist auf 16K + 65ms eingestellt, sollte also genug Zeit sein um einzuschwingen. Leiterbahnlänge ist so kurz wie möglich (Mega88 im TQFP32 SMD Gehäuse, Quarz im HC49S [kein SMD] Gehäuse). Kapazitäten habe ich keine dran, hab ich bei den geschätzten 87 AVR-Platinen die ich davor gemacht habe auch nicht dran gehabt. Aber ich werde mal auf den internen Taktgeber umschalten um das mal zu testen.

MfG

Schoko

021aet04
20.10.2011, 08:58
Bei einem Quarz brauchst du unbedingt einen Kondensator. http://www.raltron.com/products/pdfspecs/crystal_hc-49_short.pdf
Im Datenblatt steht "Load Capacitance 10pF to 32 pF"

MfG Hannes

Schokohoernl
20.10.2011, 12:43
Ja das mit dem Kondensator weiß ich, habe ich bisher aber erfolgreich ignoriert. Es liegt aber definitiv nicht am Quarz. Habe gerade auf internen Takt umgeschaltet und da tritt das selbe Phänomen auf.

Werde mal meine Hardware durchmessen und schauen was der unterschied zwischen USB eingesteckt und nicht eingesteckt ist...

Schokohoernl
20.10.2011, 14:35
Nachtrag:

Hab mein Problem gefunden: Ich habe vergessen eine Variable im SRAM zu initialisieren. Besagte Variable hatte also einen mehr oder minder zufälligen Wert. Blöder Weise wurde diese Variable am Anfang eingelesen und war für eine Sprungadresse zuständig. Deswegen ist der Mega88 irgendwo hin gesprungen und ist dann hängen geblieben oder hat sonstigen Mist gemacht, auf jeden Fall nicht mehr das Programm ausgeführt.
Scheinbar setzt aber entweder der ISP oder der AVR selber beim flashen den SRAM auf 0 (oder war das Zufall??). Die Spannung die auf den Programmier-Pins des ISP war dann ausreichend dass der AVR seinen SRAM nicht vergessen hat. Gleiches gilt für den USB-Stecker. Hier war die Versorgungsspannung des USB-Steckers eigentlich nur dazu da den FTDI aus dem RESET zu holen. Hat aber eine minimale Spannung auf den Vcc-Pin weitergeleitet und verhinderte eben das Vergessen des SRAM.

Manmanman... so ein doofer Minifehler hat mich jetzt so lange beschäftigt.

Danke euch für eure Mithilfe!

MfG

Schoko