Forum: Mikrocontroller und Digitale Elektronik PIC16 I2C Start Problem


von Michael (Gast)


Lesenswert?

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.

von Toxic (Gast)


Lesenswert?

Vielleicht kann dir Sprut helfen:

http://sprut.de/electronic/pic/grund/i2c.htm

I2C-Bus schreiben/lesen und Beipiel.....

von Michael (Gast)


Lesenswert?

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.

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.