Hallo zusammen, ich bin schon lange mit dem Atmel Chip unterwegs und hatte noch nie Probleme damit. Ich habe ein kurzes Programm geschieben, das im Emulator einwandfrei läuft. Steckt der Prozessor auf der Platine, erfolgt nach dem ersten Sprungbefehl ein Reset. Der code im Prozessor entspricht genau dem im Emulator. Alle möglichen Tricks mit C's brachten keine Abhilfe. Hat jemand eine Idee?
Klaus-Dieter K. schrieb: > Ich habe ein kurzes Programm geschieben Habe ich auch schon mal gemacht. Bei Problemen damit poste ich es aber, damit die anderen es auch sehen können.
Klaus-Dieter K. schrieb: > Steckt der Prozessor auf der Platine, erfolgt nach > dem ersten Sprungbefehl ein Reset. Wie stellst Du fest, daß ein Reset erfolgt?
Klaus-Dieter K. schrieb: > Steckt der Prozessor auf der Platine, erfolgt nach > dem ersten Sprungbefehl ein Reset. Polarität des Reset-Eingangs beachtet?
Diagramm P1000103a ist aufgezeichnet, wenn das Programm mit dem Emu läuft, Diagramm P1000104a wenn das Programm in der CPU läuft.
Klaus-Dieter K. schrieb: > Diagramm P1000103a ist aufgezeichnet, wenn das Programm mit dem > Emu läuft, > Diagramm P1000104a wenn das Programm in der CPU läuft. Ist ja nicht die Möglichkeit.
120 1 TR0 = 0; // zaehler stoppen 121 1 TF0 = 0; 122 1 TMOD = (TMOD & 0xf0) | 0x01; // TIMER ALS 16-BIT 123 1 i_ms50 = 65536 - 50000; 124 1 i_sec = 0; 125 1 126 1 timer_z0.timer0 = i_ms50; 127 1 TH0 = timer_z0.th0_tl0[0]; /* Timer 1 laden */ 128 1 TL0 = timer_z0.th0_tl0[1]; 129 1 130 1 P1b2 = 0; 131 1 for(z=100;z>0;z--);//warten(10); 132 1 P1b2 = 1; 133 1 134 1 i = 5; 135 1 136 1 while(i) 137 1 { 138 2 P1b4 = 0; //~P1b4; 139 2 for(z=500;z>0;z--);//warten(10); 140 2 P1b4 = 1; 141 2 warten(200); 142 2 P1b6 = 0; 143 2 error[i] = Write_PCF8574(i,0xcf);// 144 2 P1b6 = 1; 145 2 for(z=400;z>0;z--);//warten(10); 146 2 i--; 147 2 } 148 1 149 1 //error = Write_PCF8574(0,0xcf);//x = 200; 150 1 //error = Write_PCF8574(1,0xcf);//x = 200; 151 1 152 1 P1b7 = 0; 153 1 Read_PCF8574(0,p); 154 1 P1b7 = 1; 155 1 156 1 bis auf P1b2 haben die Portpins haben im Programm keine Funktion,sie dienen nur der Orientierung. P1b2 ist auch der Takt für I2C.
Liegt die Formatierung an meinem Browser oder willst du uns jetzt völlig verarschen?
Beitrag #7107703 wurde von einem Moderator gelöscht.
In der Schleife i = 5 werden 6 ICs Porterweiterung (PCF8574) mit I2C Bus mit 0xcf initialisiert. Das sind im Diagramm ..103a die ersten 6 Takte. Danach läuft nur noch der Timerinterrupt mit 50ms, zur Kontrolle P1b4 (gelb). Auf dem vio Kanal ist der Takt für I2C abgebildet. Diagramm 103a die funktionierende Versin mit Emulator. Diagramm ..104a zeigt nur den Wechsel von P1b4 in Zeile 138 - 140. Danach ist Schluß und alles fängt wieder von vorne an, als wenn der Aufruf von warten(200) in Zeile 141 zu einem Sprung nach 0 führt. Jetzt alles Klar? Danke!!
Die Symptome hast du gezeigt, aber nicht das fehlerhafte Programm. Der Ausschnitt dazu scheint mir unzureichend. Schaltplan und Fotos vom Aufbau wären auch hilfreich, denn sporadische Resets können auch von Fehlern im Aufbau kommen. Das ist sogar recht häufig der Fall, vor allem nachdem das Programm den Test im Emulator bestanden hat.
So postet man keinen Code, bist Du den ersten Tag im Internet? Der Schnipsel compiliert nicht, haufenweise Fehler, da unbekannte Variablen und Funktionen. Und das main fehlt auch, d.h. der Schnipsel wird nie aufgerufen. Füge das komplette compilierbare Projekt als Anhang an (*.zip). Auch das List-, Map- und Hex-File.
Klaus-Dieter K. schrieb: > einwandfrei läuft. Steckt der Prozessor auf der Platine, erfolgt nach > dem ersten Sprungbefehl ein Reset. Der code im Prozessor entspricht Und wenn er nicht auf der Platine steckt? Peter D. schrieb: > Füge das komplette compilierbare Projekt als Anhang an (*.zip). Auch das > List-, Map- und Hex-File. Es würde auch ein reines, kurzes Testprogramm reichen, welches den Effekt zeigt ...
Hallo zusammen, vielen Dank für guten Ratschläge! Ich habe den Fehler gefunden. Unklar ist nur, warum der beim Emulatorbetrieb nicht aufgetreten ist. Es war die Doppelbelegung von P1b2, im Listing Zeile 130 - 132, der auch Takt für die I2C Schnittstelle ist. Der Port in og. Zeile diente nur als Trigger für Ossi, den habe ich auf P1b5 geändert und schon funktioniert alles wie soll!!
klaus-dieter_k schrieb: > Es war > die Doppelbelegung von P1b2 Also doch kein Reset, wie leichtfertig behauptet. Ein Reset kann man leicht daran erkennen, daß IO-Register auf ihren Resetwert zurück gesetzt werden und die Adresse 0x0000 ausgeführt wird.
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.