Forum: Mikrocontroller und Digitale Elektronik PIC I2C Master Slave


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von picfan (Gast)


Lesenswert?

ww1.microchip.com/downloads/en/appnotes/00735a.pdf

von Teo D. (teoderix)


Lesenswert?

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

von Jochen-paul S. (picfan)


Lesenswert?

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
von Jochen-paul S. (picfan)


Lesenswert?

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.

von Christian M. (Gast)


Lesenswert?

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

von Jochen-paul S. (picfan)


Lesenswert?

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