Liste der Anhänge anzeigen (Anzahl: 1)
(Mir) unerklärliches AVR-Sterben
Moin!
Ich habe eine simple Schaltung auf Basis eines mega168 aufgebaut. Das anhängende Schaltbild (ganz unten) zeigt das Wesentliche, nicht mit dargestellt sind nur ein FT232RL (an den Signalen TXD_FT232 und RXD_FT232) und ein synchron serieller DAC (an den Signalen DOUT und PD_SCK). Die Teile funktionieren (s.u.), ich habe sie hier einfach aus Platzgründen weggelassen. Das LCD verfügt über einen KS108 kompatiblen Controller. Sorry übrigens für das etwas pfuschige Schaltbild, hab's auf die Schnelle zusammengehauen ...
Die Schaltung ist in SMD auf einer ordentlichen Platine aufgebaut.
Ich habe nun zum zweiten Mal folgendes Problem:
nach dem Aufbau funktioniert zunächst alles einwandfrei (LCD, UART, DAC), sodass ich mit der eigentlichen Firmwareentwicklung beginnen kann. Nach etwa dem 20. Flashen (sehr grob geschätzt) häufen sich Fehler beim Verifizieren nach dem Flashen, und die Firmware läuft auch folgerichtig nicht wie sie soll. Nach einigen weiteren Flash-Vorgängen treten dann jedesmal Fehler beim Verifizieren auf, ich kann den Controller also effektiv nicht mehr flashen. Ein paar Mal kann ich dann immerhin noch die Device Kennung auslesen, bis das dann auch nicht mehr geht. Ich flashe idR aus BASCOM, habe testweise auch mit AVRDUDE geflasht und dabei zwei verscheidene ISP Dongles getestet (USBASP und USBtinyISP) - mit dem gleichen Ergebnis.
in AVRDUDE
Code:
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
in BASCOM
Code:
Could not detect chip, Auto program failed
Chip ID: FFFFFF
Mit den Dongles kann ich andere AVRs problemslos flashen (Positivkontrolle). Wenn ich mir ansehe, was auf dem ISP nach dem Defekt los ist, fällt auf, dass RESET, SCK und MOSI tun was sie sollen (auf den ersten Blick, habe mir den Bitstrom nicht genauer angesehen) aber MISO permanent auf low bleibt. Ich habe mal den Eingangswiderstand von allen ISP Pins am Controller nach Masse gemessen, die sind alle um die 10k, MISO hat also zumindest keinen Schluss nach Masse. Außerdem habe ich die Pins vom ISP, die das LCD parallel nutzt, vom LCD getrennt, das hat dann auch nichts mehr geändert (zu dem Problem siehe unten).
Was mich stutzig macht ist, dass ich das exakt gleiche "Todes-Szenario" jetzt zum zweiten Mal habe. D. h. ich habe den ersten Controller wieder von der Platine runtergefönt und einen neuen draufgesetzt und von vorne angefangen - wie gesagt, mit dem gleichen Ausgang, erst geht alles, dann ist das Flashen nur noch sporadisch erfolgreich, bis der Controller dann schließlich augenscheinlich tot ist.
Wie man sieht, nutze ich die ISP Pins auch für's LCD. Ich weiß, dass Application Note AVR910 für diesen Fall empfiehlt, Peripherie am ISP durch Widerstände zu "entkoppeln". Das habe ich mir hier in der Tat gespart, weil ich noch nie Probleme dieser Art hatte. Okay, das mag ein Fehler sein, aber: Selbst wenn diese Doppelnutzung zu Schreibfehlern beim Flashen führen sollte, kann ein Controller dadurch hardwaremäßig Schaden nehmen? Kann ich ihn also "kaputtflashen"? Können dabei die Fusebits vielleicht total verdreht werden?
Sorry für die vielen Worte, hat jemand vielleicht eine Idee, wo das Problem liegen könnte? Im Moment steht nur auf meiner Liste, beim nächsten Mal Widerstände zwischen LCD und ISP-Pins einzubauen. Bin ansonsten mit meinem Latain gerade etwas am Ende ...
Ganz vielen Dank!
Malte
Anhang 29120
Liste der Anhänge anzeigen (Anzahl: 2)
Wie schaut die Betriebsspannung aus? Mach mal ein Scope mit einem Oszi....
Die Reset Schaltung gefällt mir nicht ... Schau dir dazu das Hardware Design Appnote von Atmel an ... [1] Seite 6. Ich hab es so ausgeführt.
Reset Schaltung:
Anhang 29124
Ist die Peripherie sicher auch auf TTL Pegel?
Ziehen irgendwelche Bauteile mehr als die Pins hergeben können? (max. 20 mA).
Ist die gesamt abgegebene Leitung des Atmega in grünen Bereich?
Ist das Display ein TTL Typ oder etwa eine 3.3V Variante? dann könnte zu viel Strom fliessen ...
Pin 4 und Pin 6 brauchen jeweils eigene 100nF Stützkondensatoren.
Avcc braucht auch einen eigenen Stützkondensator.
Erzeugung +5V:
Anhang 29125
[1] http://www.atmel.com/images/atmel-25...ote_avr042.pdf
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!
Danke für die Hilfe!
Die Versorgungsspannung sieht okay aus, ich wüsste auch erstmal nicht, wo es da haken könnte. Die Erzeugung der 5V ist 08/15 folgendermaßen realisiert:
Anhang 29126
Der Gleichrichter dient nur als Verpolungsschutz, deswegen fällt die Siebung nur minimal aus. Allerdings speise ich die Versorgungsspannung im Moment noch hinter dem Gleichrichter ein, damit alles auf der Masse von meinem Netzteil liegt. Hier mal schnell ein Einblick in die Versorgungsspannung, AC-gekoppelt, 20 mV/div. Vpp ist ca 57 mV, Vrms 8.44 mV. Sieht für mich erstmal okay aus (zumal auf die Schnelle gemessen mit frei fliegenden Kabeln). Die Schaltung zieht insgesamt ca. 80 mA, was natürlich im wesentlichen auf die Hintergrundbeleuchtung des LCDs zurückgeht.
Anhang 29127
Stimmt schon, AVCC ist etwas ruppig angeschlossen, ich benutze hier den gesamten Analogteil des µC nicht, aber ich werde das beim nächsten mal ordentlicher machen. Dass die Sache daran scheitert glaube ich aber erstmal auch nicht.
Auch die Beschaltung vom Reset ist etwas minimal ausgefallen, aber nach den Diskussionen die ich um dieses Thema bisher so verfolgt habe, sei das bei den neueren AVRs auch nicht mehr so ein riesen Problem, deswegen habe ich den Pull-Up weggelassen. Okay, auch das kann ich besser machen. Aber auch da bin ich erstmal ein wenig skeptisch dass dort das Problem liegt, denn der Punkt ist ja, dass ich nicht einfach nur eine "Funktionsstörung" habe sondern tatsächlich irgend ein letaler Effekt auftritt.
Das LCD habe ich als 5V Typ in China gekauft - muss also nicht zwingend stimmen, bin da aber erstmal nicht vom Gegenteil ausgegangen. Und die Gesamtstromaufnahme vom System liegt in einem realistischen Bereich (s.o.).
Gruß
Malte
- - - Aktualisiert - - -
Zitat:
Ich wundere mich nur, das du für Entwicklung einen µC in SMD nimmst, wenn es gleichen in DIL gibt. :confused:
:-) Also erstens macht mir der Umgang mit SMD Spass, also rein handwerklich. Ist halt nichts für Weicheier ;-) ... nein im Ernst, tatsächlich ist der Umgang damit garnicht so schlimm wie man als Anfänger vielleicht erstmal denkt. Zumindest mir ging es so, und ich war dann überrascht wie gut man damit zurecht kommt. Aber dann gibt es noch technische Gründe. Die Aufbauten werden deutlich kleiner, das ist zunächst ein finanzieller Vorteil, wenn man Platinen machen lässt. Wenn man seine Schaltungen in Gehäuse o.ä. einbauen will, ist es außerdem angenehm, wenn man nicht so riesige Bretter hat, sondern eine kleine flache Platine. Im übrigen gibt es viele moderne ICs eh nur noch in SMD, wenn ich also schon einige Bauteile in SMD auf der Platine habe, dann brauche ich den Rest auch nicht mehr in DIP machen, finde ich. War jetzt etwas off topic ... :-)
Gruß
Malte
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für alle weiteren Hinweise!
Zitat:
Das Fehlerbild fehlender Cs passt weder zu "geht garnicht" noch zu "stirb langsam" und auch nicht zu "geht kaputt" [...] Damit will ich nicht sagen, daß man Abblocks-Cs vernachlässigen soll, aber sie erklären nicht jedes Problem.
So in etwa meinte ich das auch. Ich geben allen völlig recht, dass ich zu nachlässig mit den Ablock-Cs war. Trotzdem ist der Aufbau weit davon entfernt, keine Abblock-Cs zu haben. Da alles in SMD aufgebaut ist, sind die 100 nF für den µC auch wesentlich näher am Die als sie es jemals bei einem THT/DIP Aufbau sein würden. Aber nochmal: auch das werde ich in Rev. 2 der Platine verbessern!
Zitat:
Für mich erscheint die gemeinsame Nutzung von Pins durch ISP und LCD verdächtig, insbesondere weil sich der Defekt des µCs beim Programmieren zeigt. Wie sehen denn die ISP-Signale aus, wenn sich der Chip nicht programmieren läßt? Geht er doch noch, wenn man das LCD abtrennt? In dieser Richtung würde ich weiter forschen.
Ja, so bin ich ja auch rangegangen. Ich hatte es oben schon mal geschrieben: beim Versuch zu flashen tut sich nichts auf MISO, die anderen Signale sehen sinnvoll aus (habe aber nicht im Detail in die Daten geguckt). Habe das LCD auf den betroffenen Signalen zwischenzeitlich auch wieder vom µC getrennt, das hat keinen Erfolg gebracht.
Im folgenden Bild ist der Verlauf der ISP Signale beim Versuch mit AVRDUDE/USBASP zu flashen zu sehen. Ich habe blöderweise die Horizontalskala im Bild abgeschnitten, der low-Puls auf MOSI ist 20 ms lang, das nur zur zeitlichen Orientierung.
Anhang 29132
EDIT: sch*** Kompression, sorry für die schlechte Qualität. Reihenfolge der Signale: MISO, CLK, MOSI, RST
Zitat:
Der Grund war, das sich die Fuses für die Takteinstellung verstellt hatten.
Nachdem ich einen extern Takt angelegt hatte, konnte ich die Fuses neu setzen und der Controller funktionierte wieder.
Daran hatte ich auch gedacht, habe gestern mal einen externen Taktgeber an PB6 (XTAL1) angeschlossen, leider ohne Erfolg. Andere Möglichkeiten fielen/fallen mir nicht ein, zumindest muss ich ja "Kontakt" zu dem µC bekommen um die Fusebits wieder glattzubügeln - falls das überhaupt das Problem ist.
Zitat:
Mein Vorschlag wäre die beiden CE Pins des Displays per Pull(up)down auf festes ( inaktives ) Potential zu legen.
Also bei aktiv high ein Pulldown bzw. umgekehrt.
Weiß jemand sicher ob die CS Signale beim KS108 active high oder active low sind? Ich habe ein Datenblatt in dem dazu nichts steht, und ein chinesisches dass ich so interpretiere dass sie active high sind. In letzterem Falle würde ich dann natürlich Pull-Downs einsetzen.
Zitat:
hat zwar nichts mit dem Flashen zu tun aber sind die internen Pullups für die Taster eingeschalten?
Die Taster sind ganz normale Schließer. Die sind auf der Platine noch garnicht bestückt, können also bisher keinen Einfluss gehabt haben.
Zitat:
Den Gesamtstrom mal gemessen? Evtl. gibts doch irgenwo einen Kurzschluss auf der Platine?
Hatte ich oben schon geschrieben, die Stromaufnahme liegt bei 80 mA wegen dem LCD Backlight. Die Schaltung funktioniert ja zunächst, insofern kann es keinen "groben" Fehler im Layout geben.
Gruß
Malte
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Zitat:
Zitat von
damfino
Hatte einmal genau das gleiche Fehlerbild, da war der 7805 defekt. Lieferte lt. Multimeter konstante 5V, am Oszi waren aber Peaks bis 10V sichtbar, die innerhalb kurzer Zeit die Atmegas zerstörten.
Ganz ausschließen kann ich auch das nicht, allerdings habe ich mir dir Versorgungsspannung relativ genau angesehen. Da ich jetzt eh das PCB überarbeite spendiere ich auch einen neuen 7805.
Zitat:
Zitat von
RoboHolIC
Die Polarität des R/W ist am Chip eindeutig und wird kaum im LCD-Modul invertiert werden. Hier fürs Erste ein PullDown, dann gibt es keinen Krieg der Ausgangspins mehr. Gleiches gilt alternativ für den Enable-Eingang. Die Polarität der CS lässt sich dann experimentell rausfinden: alle gleichartig setzen oder löschen - entweder fühlen sich beide GLCD-Controller angesprochen oder keiner; das macht keinen Schaden.
Nur noch mal zum Verständnis: Es sollte doch schon genügen R/W auf read, also low zu halten. Damit sollte auf den Datalines nichts mehr passieren. Zusätzlich gibt es ja auch noch einen avtive-low Reset Signal, das ich ebenfalls runterziehen könnte. Für meine Begriffe sind dann weitere Maßnahmen (insb. an enable und den chip selects) an dieser Stelle überflüssig, oder übersehe ich etwas?
Danke!
Gruß
Malte
- - - Aktualisiert - - -
Okay, eigentlich albern zwei Widerstände zu sparen ... also ziehe ich CS1 und CS2 auch noch runter. Das folgende Bildchen gehört lt. Verkäufer zu dem von mir verwendeten LCD, ich lese das so, dass die CSs active high sind.
Anhang 29140
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Zitat:
Es ist ein logisches UND.
Dein Modul hat zwei CS, es genügt wenn einer disabled ist, dann macht das Modul keinen Wank mehr.
Ich bezog mich mit der Frage nach dem "UND" auf die CSs und E, so hatte ich Dich, Peter, auch verstanden. Ich habe hier nochmal ein Bild aus dem Datenblatt eines anderen LCDs mit den gleichen Controllern, das verstehe ich so, wie RoboHolIC es darstellt: zwei Controller pro Panel, dementsprechend auch zwei CSs. Es ist ja vor allem kein Problem, beide auf low zu halten. Ich werde zusätzlich jetzt auch noch den Enable inaktiv halten.
Anhang 29141
Zitat:
Wenn dem nicht so wäre würde kein RAM auszulesen sein. Nur schreiben möglich.
Klingt eigentlich logisch :-). Ich muss zugeben, dass ich GLCDs bisher ausschließlich mit high-level Befehlen benutzt habe, insofern ist mir tatsächlich nicht ganz klar, was wirklich im Detail auf dem Bus passiert. Aber was mir soweit einleuchtet - und hier auch Konsens zu sein scheint - ist, dass der LCD Datenbus hochohmig ist, wenn ich die CSs und E runterziehe.
Danke sehr!
Malte