Hi Leute! Weiter gekommen mit anderen Problemchen, neues Problem:
Womöglich hat jemand eine Idee, was ich da falsch anstelle oder
vergesse.
Aufbau: PIC1527=Master PIC877= Slave
Funktion ok: Master sendet Daten an Slave und zeigt sie richtig an,
passt.
Funktion nicht ok: Slave soll Daten an Master senden // geht nur soweit,
dass Slave die richtige Adresse empfängt (lass ich anzeigen an LCD,
passt), direkt danach schiebe ich im Slave die 222 als Testwert in den
SSPBUF. Slave sendet aber nichts.
Ich dreh mich x-fach im Kreis. Datenblatt in diesem dusseligen Englisch
bringt mich nicht weiter, auch wenn ich so halbwegs durchschaue.
Ich häng mal die Codes vom Master und vom Slave an sowie das
Bitanalyserbildchen. Vielleicht kann mir ja einer helfen. Danke vielmals
Was mir beim Probieren weiter aufgefallen ist, dass der SSPBUF sich
einfach nicht beschreiben lässt, der bleibt immer leer. Was ist das für
eine Scheiße??? Alle röhren im Netz durch die Welt, schreib einfach
deinen Wert ins SSPBUF und ab geht die Post. Na super ihr Schlaumeier,
nix geht ansatzweise so einfach. Und keiner weiß was, haben
offensichtlich alle schon CORONA-Viren im Kopf.
Michael schrieb:> Na super ihr Schlaumeier,> nix geht ansatzweise so einfach.
Wer sagt, daß PIC-Assembler einfach sein soll?
Für PIC-Assembler muß man schon extrem schmerzbefreit sein.
Sind immer die richtigen Bänke umgeschaltet, gehen die Gotos nicht über
Pagegrenzen?
Schreib nächstes mal gleich hin, daß es Assembler ist und kein C, dann
muß man nicht erst den Anhang öffnen.
Peter D. schrieb:> Für PIC-Assembler muß man schon extrem schmerzbefreit sein.> Sind immer die richtigen Bänke umgeschaltet
Daher würde ich (so wie es gedacht ist) nicht die Bank-Nr. als Label
nehmen, sondern eines das in der benötigten Bank liegt.
zb:
[c]
I2C_ROUTINE
BANKSEL PIR1
BTFSS PIR1,SSPIF
GOTO EXITINT
BCF PIR1,SSPIF
BSF PORTE,0 ; LED an, wenn Interrupt für I2C gesetzt ist
BANKSEL SSPSTAT
BTFSS SSPSTAT,2 ; SSPSTAT,R/W gesetzt?
GOTO INT_I2CREAD ; Wenn nicht, dann soll ich Slave nur empfangen
GOTO INT_I2CWRITE ; Wenn ja, dann soll ich Slave schreiben
Hallo,
ORG 4
MOVWF SYS_WSAV ; save register
SWAPF STATUS,W
CLRF STATUS
MOVWF SYS_SSAV
MOVFW PCLATH
MOVWF SYS_PSAV
CLRF PCLATH
Hier würde ich sicherheitshalber
BANKSEL BANK0
BCF SSPCON,CKP
einsetzen, das teilt dem Master mit, dass er warten soll, bis der Slave
CKP wieder setzt. (jedes mal auch, nachdem dem Senden von einem Byte,
wenn das SSPIF gesetzt wird).
Bei "Dann Schreibvorgang starten:" hast du CKP auch richtigerweise
gesetzt.
Vielleicht hilft das.
Das DB für den Slave ist übrigens:
ww1.microchip.com/downloads/en/appnotes/00734a.pdf
Gruss J.P.
Hallo,
Deine PICs heissen übrigens PIC16F....
Ich habe auch mal einen I2C-Slave mit einem PIC16F876, habe Tage
verbraten aber nicht hingekriegt. Die Hardware ist ja dieselbe,
vielleicht hilft es Dir:
Beitrag "I2C Master und Slave mit PIC16F876"
Gruss Chregu
Nun doch noch etwas:
; Dann Schreibvorgang starten:
BANKSEL BANK1 ;+
BCF PIE1,SSPIE ;+
BCF SSPSTAT,BF ;+
BANKSEL BANK0
BSF SSPCON,CKP------------------------->
BCF SSPCON,SSPOV ;+
MOVLW D'222'
MOVWF SSPBUF
<-----------------------------------------------
CALL INT_WAITMSSP
CKP setzen laut DB erst nachdem SSPBUF beschrieben wurde.
J.P.