PIC16 I2C Start Problem

Gast #4931004
Hallo,
ich versuche jetzt seit ein paar Tagen verzweifelt mit einem PIC16F18344 
einen I2C Bus als Master anzusteuern.

www.microchip.com/wwwproducts/en/PIC16F18344

Jedoch gibt es ein Problem, dass ich beim besten Willen nicht lösen 
kann.
Ich verwende die MPLAB IDE in Kombination mit MPASM.

Und zwar möchte ich erstmal einfach nur das Start Signal schicken.
Jedoch wird die SSP1IF, nachdem ich die SEN Flag gesetzt nie gesetzt und 
somit habe ich eine Endlosschleife.
Auch, wenn ich stattdessen darauf warte, dass die SEN Flag wieder 
gelöscht wird passiert das nie.
Ich habe das ganze an echter Hardware sowie im Simulator getestet und 
habe in beiden dasselbe Problem.

Hier mein vereinfachter Quellcode:
1
#include "p16F18344.inc"
2

3
  
4
; CONFIG1
5
 __CONFIG _CONFIG1, _FEXTOSC_OFF & _RSTOSC_LFINT & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_OFF
6
 
7
; CONFIG2
8
 __CONFIG _CONFIG2, _MCLRE_OFF & _PWRTE_OFF & _WDTE_OFF & _LPBOREN_OFF & _BOREN_OFF & _BORV_HIGH & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
9
 
10
; CONFIG3
11
 __CONFIG _CONFIG3, _WRT_OFF & _LVP_OFF
12
 
13
; CONFIG4
14
 __CONFIG _CONFIG4, _CP_OFF & _CPD_OFF
15
 
16
 
17
CODE 0x0
18

19
 
20
lReset:
21
  
22
  ; ========================================================================
23
  ; Analoge I/O deaktivieren.
24
  ; ========================================================================
25
  BANKSEL ANSELA
26
  CLRF  ANSELA
27
  
28
  BANKSEL  ANSELB
29
  CLRF  ANSELB
30
  
31
  BANKSEL  ANSELC
32
  CLRF  ANSELC
33
  ; ========================================================================
34
  
35
  
36
  
37
  ; ========================================================================
38
  ; MSSP initialisieren Mehtode A.
39
  ; ========================================================================
40
  ; BANKSEL  SSP1CON1
41
  ; MOVLW    B'00101000'
42
  ; MOVWF    SSP1CON1
43
  
44
  ; BANKSEL  SSP1ADD
45
  ; MOVLW    H'9'
46
  ; MOVWF    SSP1ADD
47
  
48
  ; BANKSEL  PIR1
49
  ; BCF    PIR1, SSP1IF
50
  ; ========================================================================
51
  
52
  
53
  
54
  ; ========================================================================
55
  ; MSSP initialisieren Mehtode B.
56
  ; ========================================================================
57
  BANKSEL  SSP1CON1
58
  MOVLW  B'00101000'
59
  MOVWF  SSP1CON1
60
  
61
  BANKSEL  SSP1CON2
62
  MOVLW  B'00000000'
63
  MOVWF  SSP1CON2
64
  
65
  BANKSEL  SSP1CON3
66
  MOVLW  B'00000000'
67
  MOVWF  SSP1CON3
68
  
69
  BANKSEL  SSP1ADD
70
  MOVLW  H'9'
71
  MOVWF  SSP1ADD
72
  
73
  BANKSEL  PIR1
74
  BCF    PIR1, SSP1IF
75
  ; ========================================================================
76
  
77
  
78
  
79
  ; ========================================================================
80
  ; Start generieren.
81
  ; ========================================================================
82
  BANKSEL  SSP1CON2
83
  BSF    SSP1CON2, SEN
84
  ; ========================================================================
85
  
86
  
87
  lWait:
88
  
89
  ; ========================================================================
90
  ; Methode A
91
  ; Funktioniert nicht, weil SSP1IF niemals gesetzt wird.
92
  ; ========================================================================
93
  ; BANKSEL  PIR1
94
  ; BTFSS    PIR1, SSP1IF
95
  ; GOTO    vWait
96
  ; ========================================================================
97
  
98
  ; ========================================================================
99
  ; Methode B
100
  ; Funktioniert nicht, weil SEN niemals gelöscht wird.
101
  ; ========================================================================
102
  BANKSEL  SSP1CON2
103
  BTFSC  SSP1CON2, SEN
104
  GOTO  lWait
105
  ; ========================================================================
106
  
107
  lLoop:
108

109
  GOTO  lLoop
110

111
END

Die PPS (Peripheral Pin Select) Einstellungen habe ich hier mal 
weggelassen, da diese ja nur beim testen auf echter Hardware relevant 
sind.
Gast
Das habe ich schon. Ich habe auch schon einmal den I2C Bus benutzt aber 
mit einem anderen PIC.
Der jetztige PIC muss irgendeine andere Einstellung haben die die ältere 
Generation noch nicht hatte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.