AT89C2051 / 4051 macht Reset

OP #7107093
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?
Gast #7107291
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.
Beitrag #7107703 wurde von einem Moderator gelöscht.
Gast #7107752
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!!
Gast #7107759
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.
#7107925
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.
#7108734
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 ...
Gast #7109814
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!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren