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.
:
Bearbeitet durch User
Jochen-paul S. schrieb: > 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, Sorry, war Fehlalarm, das CKP-Bit wird automatisch gelöscht, sobald SSPBUF voll ist. 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.
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.