Forum: Mikrocontroller und Digitale Elektronik AT89C2051 / 4051 macht Reset


von Klaus-Dieter K. (klausdieter_k)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

Klaus-Dieter K. schrieb:
> Hat jemand eine Idee?

Nö, zu wenig Input.

von Helmut -. (dc3yc)


Lesenswert?

In Zeile 42 im Code ist der Fehler! BTW: wo finde ich den Code?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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?

von H. H. (Gast)


Lesenswert?

Klaus-Dieter K. schrieb:
> Steckt der Prozessor auf der Platine, erfolgt nach
> dem ersten Sprungbefehl ein Reset.

Polarität des Reset-Eingangs beachtet?

von Klaus-Dieter K. (klausdieter_k)


Angehängte Dateien:

Lesenswert?

Diagramm P1000103a ist aufgezeichnet, wenn das Programm mit dem Emu 
läuft,
Diagramm P1000104a wenn das Programm in der CPU läuft.

von Klaus-Dieter K. (klausdieter_k)


Angehängte Dateien:

Lesenswert?

Bild P1000103a

von Dyson (Gast)


Lesenswert?

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.

von klaus-dieter_k (Gast)


Lesenswert?

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.

von Dyson (Gast)


Lesenswert?

Liegt die Formatierung an meinem Browser oder willst du uns jetzt völlig 
verarschen?

von Mario M. (thelonging)


Lesenswert?

Letzteres, aber von Anfang an.

Beitrag #7107703 wurde von einem Moderator gelöscht.
von klaus-dieter_k (Gast)


Lesenswert?

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!!

von Stefan F. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Jens G. (jensig)


Lesenswert?

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 ...

von klaus-dieter_k (Gast)


Lesenswert?

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!!

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.