Forum: Mikrocontroller und Digitale Elektronik PIC16 I2C Start Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Vielleicht kann dir Sprut helfen:

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

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

von Michael (Gast)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.