Forum: Mikrocontroller und Digitale Elektronik Können PIC lügen?


von Daniel1979 (Gast)


Lesenswert?

Moin Moin!

Ich habe ein Phänomen, was ich, mit meinem anscheinend sehr beschränkten 
Verstand, nicht begreifen kann.

Wie kann es kommen, dass man in einem SFR Register ein Bit ausließt und 
es anstatt einer 1, eine 0 erkennt?

Ich frage in der Interruptroutine das Bit 2 vom SSPSTAT Register ab und 
bekomme im ersten Durchlauf als Ergebnis eine 1 und beim zweiten 
Durchlauf eine 0.
Wenn ich im zweiten Durchlauf einen Breakpoint bei -movwf  SSPSTAT_save- 
setze, ist im Zwischenspeicher SSPSTAT_save das Bit 2 = 0 und wenn ich 
im single-step weiter gehe ist das Ergebnis der Abfrage auf SSPSTAT,2 = 
1.

Wie kann das sein?

r_w_abfr    nop
            banksel    SSPSTAT
            movf       SSPSTAT,0     ;Test: Ablaufuntersuchung
(B)         movwf      SSPSTAT_save  ;Test: Ablaufuntersuchung
            btfsc      SSPSTAT,2     ;read/write Abfrage
            goto       schreiben
            goto       lesen

Auch wenn ich das Bit, bei dem Ergebnis von 0, wieder zur Adresse 
-r_w_abfr- schicke und weitere 255 mal abfrage, ob es auch wirklich 0 
und nicht doch vielleicht 1 ist, macht es die Fehler.

Hoffe sehr, dass jemand das entscheidende Bit mehr an Verstand hat als 
ich ;) und mir weiter helfen kann!?

Gruß
Daniel1979

von Patrick (Gast)


Lesenswert?

Welcher PIC?
Welche Hardware-Revision?
Datenblatt gelesen?
Errata Sheet gelesen?

Sobald alle vier o. g. Punkte erfüllt sind, bitte nochmals mit 
detaillierter Fragestellung melden.

von B. L. (b8limer)


Lesenswert?

Meister welcher PIC denn genau? Kannst du dieses Verhalten auch beim 
Betrieb auserhalb des ICD / der Simulation beobachten. Häng mal ne LED 
an und schreib ein kleines Testprogramm dazu.

von Daniel1979 (Gast)


Lesenswert?

Patrick

1. PIC 16F877

2. Der PIC ist als Slave geschaltet, wird von einem weiteren Prozessor 
der als Master arbeitet, durch die Slave Adresse, angesprochen und 
sendet lediglich ein Byte zurück an den Master. Da der Slave in dieser 
Kommunikation lediglich senden soll, kam es zu Störungen weil er in den 
lesen-Programmteil springt.

3.Datenblatt weitestgehend gelesen- kenne es aber noch nicht auswendig!

4.Muss gestehen -Errata Sheet- sagt mir nichts, was ist das und wo finde 
ich es?

von jaff (Gast)


Lesenswert?

Das Bit 2 fragt den Zustand des I2C-Buses ab. Kann es sein, dass sich 
der Zustand unabhängig von Deinem Softwareteil ändert?

von Daniel1979 (Gast)


Lesenswert?

B. Limer (b8limer)

PIC16F877

Danke für den Tipp, werde es gerade mal ausprobieren- zweifel ein 
bisschen, ob mir das weiter hilft- aber dümmer werde ich bestimmt nicht 
;)

von Daniel1979 (Gast)


Lesenswert?

jaff schrieb:
> Kann es sein, dass sich
> der Zustand unabhängig von Deinem Softwareteil ändert?


Den Master habe ich direkt nachdem ich den Slave zum schreiben 
adressiert habe, durch einen Breakpoint still gelegt. Also bin ich mir 
ziemlich sicher, dass sich bei den I2C Bus Register nichts mehr ändern 
kann, da keine Signale mehr anliegen.

von PICfan (Gast)


Lesenswert?

Direkt aus'm Datenblatt:

>>
bit 2 -  R/W: Read/Write bit Information (I2C mode only)
This bit holds the R/W bit information following the last address match. 
This bit is only valid from the
address match to the next START bit, STOP bit or not ACK bit.
In I2 C Slave mode:
1 = Read
0 = Write
In I2 C Master mode:
1 = Transmit is in progress
0 = Transmit is not in progress
Logical OR of this bit with SEN, RSEN, PEN, RCEN, or ACKEN will indicate 
if the MSSP is in IDLE mode.
>>

hth
PICfan

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.