Hallo zusammen, ich habe gerade ein komisches Phänomen: Ich gebe in meinem Programm (auf ATMega328P) als Antwort einen RS232-Befehl eine Tabelle über das UART aus. Ist der ISP (Atmel One) angesteckt funktioniert das problemlos. Ziehe ich den ISP ab und Tippe den gleichen Befehl wieder ein, kommt der Anfang der Tabelle und dann endlos komische Sonderzeichen (Programm stürzt ab). Vorher habe ich mit Debug-Wire experimentiert, dieses habe ich aber deaktiviert. Kann es sein dass noch irgendwelche "Debug-Reste" im Programm vorhanden sind welche den Absturz verursachen? Gibt es irgendwelche Build-Schalter die ich übersehen habe? Habt ihr eine Idee, woran das liegen könnte? Danke schon mal, für eure Hinweise.
:
Bearbeitet durch User
Ich weiß überhaupt nicht wo ich schauen könnte. Debuggen kann ich ja nicht, da mit ISP der Fehler nicht auftritt. Vor Abziehen des ISP:
1 | GET_SENSOR_HISTORY
|
2 | |
3 | Name | Sensor 0| Sensor 1| Sensor 2| Sensor 3| Sensor 4| Sensor 5| Sensor 6| Sensor 7| |
4 | MinValue | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
5 | InOnTime | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
6 | ActOnTime| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
7 | ---------+----------+---------+---------+---------+---------+---------+---------+---------+
|
8 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
9 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
10 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
11 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
12 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
13 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
14 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
18 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
19 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
23 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
25 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
26 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
27 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
28 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
29 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
30 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
31 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
Nachdem der ISP abgezogen wurde:
1 | GET_SENSOR_HISTORY
|
2 | |
3 | Name | Sensor 0| Sensor 1| Sensor 2| Sensor 3| Sensor 4| Sensor 5| Sensor 6| Sensor 7| |
4 | MinValue | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
5 | InOnTime | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
6 | ActOnTime| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
7 | ---------+----------+---------+---------+---------+---------+---------+---------+---------+
|
8 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
9 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
10 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
11 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
12 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
13 | 00:00:00 | 0 | 0 | 0 | 0 | 0 | 0 | ` 0 | `°‚â |
14 | 00:˜ø'‚æðƒ‡† ü `ì‡ àð ‡ÈðÿìðÿüþîðÿîøüüðÿþðþþþÿþÿøàŽðÿøðø ü€à€ ÀÀà €€ üÀÀÀàÀ€À€€ à €þàÀ € øÀ àÀ àþðþ À € ð ðÀ€ ðà À†øÿ€àÀøàøðü€€ðÀ À€ À €€ € À €à €ààÀÀÀ À àðÀ €ÀÀ€à àÀ€€ À øàÀÀ € À€à € €€ € €üðü ð€ÀÀ€ü€Àààà€ðÿ€üÿ €À€ð € àÀ €à € €ŽÀ àÀÀà €à €À à €À àÀ à€À €ðà ÀÀ€þð Àà€þ €àÀà ü ð øà € øðø Àøàà € À À àð €øÿ€øü€ àÀ à €€ @ à À À € ðàà€€€ À €€€€ ø€ À €€ ÀÀ € à ÿà ð €€à€ € € € þ€ à à€üÀ € €þ À€ðð €€ð€€€€ à€€€ðÀ Àx€àÀ€€ðà€ € ÀààÀà€À À€ à Ààà ð€€ àÀ € ÀàÀ€ à€ ÀÀ€ÀðÀðÀÀ ð€ € ððþàø ðøàÀøàø € À þ À€ÿÿü þ à€€ €€ à €€ € € €À ààðà à€ €àÀÀ€€ €€à€à€€À€ðÀ à àÀ €À€ðÀ ààÀøà € À ÀàÀ à øÀ ÀÀøÀàðþþþ€ À à €ðÀ€ ø€ € € ÀÀ€ à ÀÀ €€ ðÀ € à€Àð`ÀÀ üä ààÀ€ÿ€ àÀà€ðÀ€À ð ÀÀÀ€ðÀ € € ü þø ð€Àÿü€àƒ À€øÀà€øÀü ààà€€ðÀÀðþÀü À€€€€ÀþÀ€ € €À €ààÀ € à€€ð à ÀÀ€ €€À ð € àÀÿ € ð€€ à€ððà À>Àà€€ € ð €8 €À €ø à€þ€ ÀðÀ€ àÀ € À Îàà € €À € ÀÀ €€ à€àÀ À ÀÀ €ðà ÀÀ€€ à€ÿÀ€€À À€àààÀàÿ €ðà€€€øàÀ ðààÀ€Àð €ø€ Àà€ðà ü€àÀÀ øà ÀÀÀ À à ðààÀ € à ðà €Àü €ÀÀ à€Àð€€À€ À€ à àÀÀ € €à€à ð€ðÀ€€€àü Ààøþ ðà €€ÿ þ à€€àÀþþà€€ üü øÀ € àøÀ € € À €€ü À À ð € €Àð€À À ÀÀð€ À€ à€ €€ € þ€ ÀÀø€ðøþ€€ ø€À € € ü€ ààÀ àÀ €ðþÀ€À€ø ðàÀ À€ð € €à€€ à € àÀ Àà€ ø ÀÀ €€€àð ÎÀð€ÀÀ € à à à €ð€þàà€ààüþÀ ð € €àà€ € |
:
Bearbeitet durch User
Das könnte Dreck auf der Reset-Leitung sein. Hast du da schonmal einen Pull-Up dran gemacht?
Ist der "Müll" reproduzierbar, d.h. Beginnt immer an derselben Stelle und die vermüllte zeichenfolge ist gleich?
Hast du eine saubere Masse-Verbindung? Hatte das gleiche Problem, bis ich gemerkt hab, ich hab vom UART->USB Kabel die Masse am JTag angesteckt.
Spiffman G. schrieb: > Habt ihr eine Idee, woran das liegen könnte? Jede Wette: Ungenügende Stromversorgung der µC-Schaltung und/oder fehlende Bypass-Kondensatoren. Beim Programmer wird fälschlicherweise die Fremdeinspeisung in's Target aktiviert sein (bei eigenversorgten Targets gehört diese eigentlich abgeschaltet) und dann die Mängel des Aufbaus kaschieren, solange der Programmer an's Target angeschlossen ist, möglicherweise auch nur dann, wenn der Programmer seinerseits mit Strom versorgt ist.
Danke schon mal für eure Antworten. Rainer B. schrieb: > Ist der "Müll" reproduzierbar, d.h. Beginnt immer an derselben > Stelle > und die vermüllte zeichenfolge ist gleich? Leider nein. Er beginnt immer in der sechsten Zeile, jedoch an unterschiedlicher Stelle. Ich habe gerade einen 10k-Pullup auf den ISP-Pin gesteckt. Trotzdem existiert das Problem noch. qUARTz schrieb: > Hast du eine saubere Masse-Verbindung? > Hatte das gleiche Problem, bis ich gemerkt hab, ich hab vom UART->USB > Kabel die Masse am JTag angesteckt. Masseverbindung sollte eigentlich sauber sein. Ich habe zwei Eagle-Screenshots angehängt. Über C1 (2,2uF) kommt meine Versorgungsspannung, GND ist der Rest. C7 hat auch 2,2uF. Den Rest deiner Antwort habe ich leider nicht verstanden? Was hast du am JTag angesteckt? c-hater schrieb: > Beim Programmer wird fälschlicherweise die Fremdeinspeisung in's Target > aktiviert sein (bei eigenversorgten Targets gehört diese eigentlich > abgeschaltet) und dann die Mängel des Aufbaus kaschieren, solange der > Programmer an's Target angeschlossen ist, möglicherweise auch nur dann, > wenn der Programmer seinerseits mit Strom versorgt ist. Wie kann ich diese Einspeisung deaktivieren?
:
Bearbeitet durch User
Sorry, aber ich finde Dein Layout grausam. Spannungs-Versorgung, Kondensatoren, Quarz, Masse-Führung, Polygone mit Orphans, Bauteil-Bezeichner doppelt.
Ich erinnere mich noch an einen ähnlichen Fall mit einem AtMega64. Das Programm funktionierte entweder mit einem angeschlossenen ISP oder ich hab in der main eine Delay Schleife geschrieben und dann erst eine Funktion aufgerufen. Die Einschwingzeit usw war am höchsten eingestellt. Den Fehler hab ich nie gefunden, mit dem Workround ging es aber.
Bricht die Betriebsspannung vom Sensor oder vom Prozessor ein? Oszi dran und genau aufpassen.
Die Tatsache, dass das Prog immer in der Ausgabe der 6. Zeile abstürzt, spricht für mich für ein Software-Problem. Warum das aber mit dem Draufstecken des ISP-Steckers geheilt werden kann: Keine Ahnung. Ich glaube, es ist an der Zeit, den Code zu posten. Wie hoch ist dein RAM-Verbrauch in etwa? Statisch und dynamisch?
Ich möchte vorschlagen, auch den Schaltplan zu posten. Weiter schlage ich vor, zu dem Code auch die Einstellungen, insbesondere der Fuses für die Taktquelle zu posten. Das Verhalten deutet (wenn auch nicht definitiv) auf eine Veränderung des Taktes hin. Auffällig finde ich, dass die Kondensatoren "relativ" weit vom AVR entfernt sind. Jedenfalls könnten sie näher an ihm dran sein. Ausserdem würde ich empfehlen, jeden VCC Pin mit 100nF zu versehen. Das könnte man beides mal probeweise ändern (C's näher an die Pins und zwei zusätzliche Cs). Abblockkondensatoren (und andere Aspekte der Stromversorgung) sind in der überwältigenden Anzahl der Fälle die Ursache unerklärlichen Verhaltens. Gib uns bitte auch noch Informationen, (Schaltplan, Foto, Typbezeichnungen, geplanter und gemessener Stromverbrauch) alles was Du hast) zur Stromversorgung.
Um die Abweichung des Taktes etwas näher zu untersuchen, könnte man mal im Betrieb, sobald der Fehler auftritt, etwas Kältespray auf den AVR sprühen. Nicht allzu viel! Wenn dann zeitweise die Ausgaben wieder stimmen, oder auch nicht, ist das auch schon eine wertvolle Information. Oszilloskop mit Zeitmessung zwischen Flanken wäre auch recht nützlich.
Rainer B. schrieb: > Die Tatsache, dass das Prog immer in der Ausgabe der 6. Zeile abstürzt, > spricht für mich für ein Software-Problem. Aber er hat geschrieben daß es an unterschiedlichen Stellen in dieser Zeile abstürzt. Das impliziert für mich einen nicht-deterministischen externen Einfluss.
Rudolph schrieb: > Sorry, aber ich finde Dein Layout grausam. > Spannungs-Versorgung, Kondensatoren, Quarz, Masse-Führung, Polygone mit > Orphans, Bauteil-Bezeichner doppelt. Hallo Rudolph, wie hätte ich mein Layout denn besser gestalten können? Es sind identische Bauteile, darum sind sie auf dem Bestückungsdruck gleich benannt. So habe ich es beim Bestücken einfacher. Was meinst du mit "Polygone mit Orphans"? Martin Schwaikert schrieb: > Bricht die Betriebsspannung vom Sensor oder vom Prozessor ein? > Oszi dran > und genau aufpassen. Hallo Martin, habe gerade gemessen - sieht alles gut aus. Bitflüsterer schrieb: > Auffällig finde ich, dass die Kondensatoren "relativ" weit vom AVR > entfernt sind. Jedenfalls könnten sie näher an ihm dran sein. > Ausserdem würde ich empfehlen, jeden VCC Pin mit 100nF zu versehen. > Das könnte man beides mal probeweise ändern (C's näher an die Pins und > zwei zusätzliche Cs). Hallo Bitflüsterer, du meinst ich soll den C1 noch näher an den uC schieben? Verbaut habe ich 2,2uF, also deutlich mehr als 100nF. Bitflüsterer schrieb: > (und andere Aspekte der Stromversorgung) Du hast natürlich Recht gehabt! Ich hatte bei meinem TTL-RS232-Adapter vergessen den GND-Pin an meine Platine anzuschliessen (ARGH!). Durch die große Tabelle die ausgegeben wird sind die Spannungen vermutlich irgendwie davon gelaufen. Mit eingestecktem ISP hat er sich über diesen das gemeinsame Bezugspotenzial geholt. Nachdem ich den GND-Pin verbunden habe funktioniert auch die Textausgabe. --> Das Problem ist also behoben. Danke für eure Hilfe! :) Im Anhang habe ich trotzdem meinen Schaltplan und mein Layout. Was hätte ich noch besser machen können?
qUARTz schrieb: > Hast du eine saubere Masse-Verbindung? > Hatte das gleiche Problem, bis ich gemerkt hab, ich hab vom UART->USB > Kabel die Masse am JTag angesteckt. Das meinte ich: ich hab den Converter am JTag mit Masse (da kann ich bequem anstecken) verbunden und als ich den JTag abgesteckt habe, war natürlich die Masse nicht mehr mit dem Board verbunden. Habs aber leider falsch ausgedrückt. Das Fehlerbild sah bei mir wie gesagt, identisch aus.
Spiffman G. schrieb: > wie hätte ich mein Layout denn besser gestalten können? Das sind einige Punkte. Aber mal im Schaltplan angefangen, ARef gehört nicht auf Vcc sondern per Kondensator an GND angebunden. Nach Schaltplan haben die ganzen VCC Anschlüsse vom Controller auch keinen Kondensator. Optimal wäre für jeden Anschluss einen Kondensator und zwar so, dass VCC erst auf den Kondensator trifft, dann auf den entsprechenden Anschluss. C1 an Deinem Spannungsregler ist scheinbar nicht angeschlossen - da fehlen aber durch den ganzen Schaltplan hindurch noch einige Knotenpunkte mehr die normalerweise automatisch gesetzt werden. Da sind noch einige Schludrigkeiten mehr im Schaltplan wie direkt auf Knotenpunkte abgesetze Verbindungsstellen. Die ganzen 100µF nach Schaltplan sollen wohl eher 100nF sein? Die Masse-Führung um den Quarz herum ist zumindest nicht toll, eigentlich sollte GND um den Quarz eine eigene Insel bilden an der auch die Kondensatoren angeschlossen sind. Diese Insel wird an den GND Anschluss vom Controller angebunden der neben den XTAL Anschlüssen liegt - und sonst nirgends. Die 22pF für den Quarz sind wahrscheinlich auch falsch was mit Glück aber nur dazu führt, dass die Frequenz leicht daneben liegt. Orphans sind im EAGLE Jargon einzelne isolierte Kupfer-Flächen. Sowas macht man generell nicht weil man sich damit potentiell Kondensatoren baut die in den meisten Fällen nicht stören dürften aber wahrscheinlich doch irgendwann. Aber ich habe mich vertan, was ich dafür hielt ist nur eine "komisch" angeschlossene "Nase". :-) Aber die ganzen langen Finger überall könnten auch Antennen sein. :-) Die Transistoren die da irgendwas schalten sind schön dick angebunden, das reicht für mehrere Ampere. Nur die Masse-Führung von den Dingern weg schaut wenig durchdacht aus. Der Strom vom dritten Transistor Links fliesst schön direkt am Quarz vorbei.
Rudolph schrieb: > Diese Insel wird an den GND Anschluss vom Controller angebunden der > neben den XTAL Anschlüssen liegt - und sonst nirgends. Moin! Ich habe eine Mausefläche auf der Platine, wie mache ist jetzt am einfachsten diese Insel in Eagle rein? Wieviel pF sollten es sein, ich sehe fast immer nur 22pF, meine Frequenz liegt damit aber 70ppm daneben, vielleicht liegt es daran?
:
Bearbeitet durch User
Ein Tipp zu Eagle: Lass immer mal wieder "ERC" über den Schaltplan laufen und nimm die Fehler und Warnungen ernst. Die einzigen Warnungen, die mal getrost ignorieren kann (jedenfalls meistens) sind "VCC und VDD verbunden" oder "GND und VSS verbunden" und ähnliche Meckereien beim Thema Stromversorgung. Beim Layout gibt es entsprechend "DRC". Wenn du die Platinen fertigen lässt, bekommst du auf Anfrage vom Hersteller "seine" DRC Regeln.
Spiffman G. schrieb: > Bitflüsterer schrieb: >> Auffällig finde ich, dass die Kondensatoren "relativ" weit vom AVR >> entfernt sind. Jedenfalls könnten sie näher an ihm dran sein. >> Ausserdem würde ich empfehlen, jeden VCC Pin mit 100nF zu versehen. >> Das könnte man beides mal probeweise ändern (C's näher an die Pins und >> zwei zusätzliche Cs). > Hallo Bitflüsterer, > du meinst ich soll den C1 noch näher an den uC schieben? > Verbaut habe ich 2,2uF, also deutlich mehr als 100nF. Verzeihe mir die launige Bemerkung, aber das Wort "die" ist ein Artikel der mehrere Gegenstände bezeichnet. :-) Ich kann mich also nicht nur auf einen Kondensator bezogen haben. Deswegen habe ich das Wort ja gerade verwendet. Abgesehen davon, ist der weit verbreitete Irrtum, "viel hilft viel" eben ein Irrtum. Du wirst in vielen Schaltungen an VCC sogar zwei oder drei Kondensatoren mit verschiedenen Kapazitäten parallel geschaltet aber nahe an den VCC-Pins finden. Das hat einen Grund. Je höher die Kapazität ist, desto mehr Ladung kann nachgeliefert werden (was sich ja erstmal nützlich anhört) aber desto langsamer kann es diese liefern. Mit der Kapazität steigt nämlich auch die die Induktivität und auch sonst ist das ganze ohnehin ein hübscher Tiefpass! Du willst aber schnell die Ladung nachliefern! Also lieber weniger und dafür näher als umgekehrt. Aber lass die 2,2uF ruhig drin und löte noch jeweils einen 100nF an die Pins. So nahe wie möglich! > Bitflüsterer schrieb: >> (und andere Aspekte der Stromversorgung) > Du hast natürlich Recht gehabt! > Ich hatte bei meinem TTL-RS232-Adapter vergessen den GND-Pin an meine > Platine anzuschliessen (ARGH!). Durch die große Tabelle die ausgegeben > wird sind die Spannungen vermutlich irgendwie davon gelaufen. > Mit eingestecktem ISP hat er sich über diesen das gemeinsame > Bezugspotenzial geholt. > Nachdem ich den GND-Pin verbunden habe funktioniert auch die > Textausgabe. > --> Das Problem ist also behoben. Danke für eure Hilfe! :) Na super. Ein Erfolgserlebnis. Schön. > > Im Anhang habe ich trotzdem meinen Schaltplan und mein Layout. > Was hätte ich noch besser machen können? Räusper. Naja. Fragen wir mal was Du nicht hättest besser machen können. Wie Andere hier schon schrieben: Es fehlen Bauteile und Knotenpunkte. Ausserdem überschneiden sich Leiterbahnen mit Text oder es überlagern sich sogar Texte. Hübsch hässlich, wie Pfarrer Braun sagen würde. :D
Fritz Ganter schrieb: > Ich habe eine Mausefläche auf der Platine, wie mache ist jetzt am > einfachsten diese Insel in Eagle rein? Durch Linien in den Restrict Layern. > Wieviel pF sollten es sein, ich sehe fast immer nur 22pF, meine Frequenz > liegt damit aber 70ppm daneben, vielleicht liegt es daran? 70ppm sind quasi nix. Um welchen Quarz handelt es sich genau?
@Rudolph: Den hier: http://de.rs-online.com/web/p/quarzmodule/8149730/ Der selbe auf der Lochrasterplatine lief viel genauer. Edit: Habe jetzt die restrict eingefügt, passt das so?
:
Bearbeitet durch User
Fritz Ganter schrieb: > Edit: Habe jetzt die restrict eingefügt, passt das so? jetzt hängen aber die Massen der Kondensatoren in der Luft...
guest schrieb: > Fritz Ganter schrieb: >> Edit: Habe jetzt die restrict eingefügt, passt das so? > > jetzt hängen aber die Massen der Kondensatoren in der Luft... uups, sorry, Kommando zurück. geh mich Schämen...
Fritz Ganter schrieb: > Den hier: http://de.rs-online.com/web/p/quarzmodule/8149730/ Für den passen die 22pF. Nur, im ersten Layout ist doch ein bedrahteter drin, HC-49U oder so.
Ne, hab keinen besseren Footprint gefunden. Vielleicht mach ich einen eigenen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.