PIC I2C Master Slave

Gast #6198812
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
Angehängte Dateien:
Gast
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.