Hallo, ich nutze einen Atmega88 um ein Rechteck zu generieren. Da ich noch Änderungen am Programm vornehme steckt auch noch der AVRISP mkII am Board. Die Spannungsversorgung kommt von einem DC/DC-Wandler 2405 und ist stabil auf 5.3V (der ist ganz ohne andere Bauteile etwas unterfordert, mit einer Betriebsanzeige-LED sink die Spannung dann auf 5V). Als Taktquelle nutze ich einen Quarzoszi 10MHz auf XTAL1. Vor einiger Zeit habe ich immer wieder Probleme gahabt, dass ca. 2ms dann auch die Rechtecke kommen, dann 16ms nicht, dann wieder Rechtecke... Zufällig ist meine Start-Up-Zeit auch auf 16 ms eingestellt. Änderte ich diese, war auch die zeitliche Lücke zwischen den Rechtecken solange wie die Start-Up-Zeit, also ist der Mega nach einigen Durchläufen wieder in den Reset gegangen. Nach einem Tausch des Reset-Pull-Ups von 10k auf 3k lief der Mega dann problemlos (im Zuge einer allgemeinen Bauteilüberprüfung zur Fehlersuche). Jetzt, nach einigen Tagen Pause läuft der Mega nicht mehr an und gibt nur einen Hi-Pegel aus. Ziehe ich mehrmals die Stromversorgung (oder drücke ich im AVR-Studio den Button 'Read Signature') läuft der Mega auch wieder an und liefert Rechteck(e). Beim nächsten Reset wird wieder neu gewürfelt. Auf ca. 10 fehlgeschlagene Startversuche kommt ein erfolgreicher Anlauf. Überbrücke ich Reset mit einer Drahtbrücke auf V+ stellt sich keine Veränderung mehr ein. Der Quarzoszi läuft jedesmal, die Versorgungsspannung sieht im Oszi auch 'glatt' aus. Bisher habe ich solche Probleme noch nie gehabt und 10k Ohm Pull-Up hatte bisher auch immer funktioniert. Was kann die Ursache sein? Gruß, Olaf
Meiermann schrieb: > Da ich noch Änderungen am Programm vornehme [...] Wenn sich an der Hardware nichts geändert hat, würde ich die Fehlerquelle wohl bei der geänderten Software vermuten. Versuch es doch mal mit einem absoluten Minimalprogramm, dass lediglich einen Pin endlos toggelt. Wenn der Mega88 dann immer noch das gleiche Verhalten zeigt, versuche einen anderen und schaue was der macht.
Derzeit habe ich nur die Minimalversion laufen: Ein 16-Bit-Timer, Interrupt
1 | ISR(TIMER1_COMPA_vect) |
2 | { |
3 | PORTC &= ~(1<<Rect_Puls); // Port-Pin-C (Puls) ausschalten |
4 | } |
und
1 | ISR(TIMER1_COMPB_vect) |
2 | { |
3 | TCCR1B = 0; |
4 | OCR1A = DatenBank[ BankNum ].CompA; |
5 | OCR1B = DatenBank[ BankNum ].CompB; |
6 | TCNT1 = DatenBank[ BankNum ].TimerWert; |
7 | TCCR1B = DatenBank[ BankNum ].TimerMode; |
8 | PORTC |= (1<<Rect_Puls); // Port-Pin-C (Puls) einschalten |
9 | } |
Im Hauptprogramm initialisiere ich nur die Struct-Werte (Datenbank), lege die Werte für den ersten Timer-Durchlauf fest und gehe dann in eine Endlosschleife. Ein ganz altes Programm ohne Interrupts nur mit Assembler Bit-Setzen/Löschen und NOPs dazwischen verhält sich auch nicht anders (was das Anlaufverhalten angeht). Zwischenzeitlich habe ich mal alle Lötpunkte abgesaugt und neu verlötet... Ich könnte zwar eine ganz neue Platine beginnen, mit neuen Bausteinen, aber auf Dauer wäre es doch besser den Fehler zu finden...
Meiermann schrieb: > Ein ganz altes Programm ohne Interrupts nur mit Assembler > Bit-Setzen/Löschen und NOPs dazwischen verhält sich auch nicht anders > (was das Anlaufverhalten angeht). Hm, ok. Das spricht doch dann eher für ein Hardwareproblem. Dann lade doch bitte mal dein Schaltbild hoch und ggf. Bilder vom Aufbau.
Einen Watchdog nutze ich nicht. Aufbau ist derzeit immernoch Lochraster, ganz unspektakulär mit Quarzoszi an XTAL1 und einem DCDC-Wandler. Ich habe in der Zwischenzeit mal einen anderen Maga auf Steckbrett aufgebaut, der hat diesen Defekt nicht, und dann alles nochmal auf einer zweiten Platine, auch komplett mit Peripheriebauteilen und allem, dieser Aufbau funktioniert fehlerfrei. Scheint also wirklich ein Hardwaredefekt zu sein. Wäre wirklich interessant die genaue Ursache zu kennen, allerdings sehe ich auch nicht, wie ich da dran kommen könnte. Gruß, Olaf PS:Sorry für die späte Antwort.
Meiermann schrieb: > Zufällig ist meine Start-Up-Zeit auch auf 16 ms eingestellt. Ist für Quarzbetrieb etwas knapp. Nimm besser die längste (64ms + ). Meiermann schrieb: > Nach einem Tausch des Reset-Pull-Ups von 10k auf 3k lief der Mega dann > problemlos Ein Widerstand allein läßt den Reset immer noch ne gute Antenne sein. Entweder direkt an VCC (wenn kein ISP nötig) oder den Klassiker: 10k an VCC, 100nF an GND. Peter
10MHz erscheinen mir etwas viel, ist das für deine AVR-Version noch zulässig? (Es gibt welche, namentlich die L-Versionen, die nur 8MHz vertragen...) Ansonsten kann es bei 10MHz auch einfach eine zu lange Leitung zwischen Quarz, Kondensatoren und µC sein. Mir klingt dein Problem jedenfalls danach, daß sich der µC evtl. manchmal "verhaspelt".
Meiermann schrieb: > Aufbau ist derzeit immernoch Lochraster, ganz unspektakulär mit > Quarzoszi an XTAL1 und einem DCDC-Wandler. Mehr nicht? Keine 100nF-Kondensatoren über die Versorgungsspannungen? Gruß, Frank
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.