PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Problem auf PIC Entwicklerboard



icebobo
20.03.2014, 16:33
Moin Leute...

hier meine Hardware:
PIC: 16F877 oder 16F877A oder 16F887(diesen würde ich bevorzugen)

Entwicklerboard:http://www.digitale-elektronik.de/shopsystem/product_info.php?products_id=128
(dort unten auf der Seite gibt es auch die beispielprogramme und die ganzen downloads)

Umgebung:arbeite im Moment mit Mplab(ist das ok? oder gibt es da andere gute umgebungen)

programmiere im moment in Assembler

Programmer: PickKit 2 (habe mir dann eine adapter Platine gebaut für den http://www.digitale-elektronik.de/shopsystem/product_info.php?products_id=403&osCsid=b8f28283e97e3e300ae3300000dff4c6)

(hoffe habe nichts vergessen ;) )


habe folgendes Problem:
versuche seit ein paar tagen mit einem PIC-Entwicklerboard mich in die PIC-programmierung reinzuarbeiten... auf dem Board gibt es alle möglichen Komponenten und auch Beispielprogramme unter anderem auch eins welches die aktuelle Raumtemperatur über einen LED-Treiber-Baustein(SAA1064) auf vier 7-Segmentanzeigen darstellen soll. Aber dieses Beispielprogramm funktioniert nicht bzw. der I2C-Bus. Habe am Temperaturfühler gemessen der gibt eine analoge Spannung an den AN0 Pin des PIC habe auch die Adresse am Treiberbaustein eingestellt laut Datenblatt. Auf den beiden I2C-Leitungen liegt dauerhaft ein High-Signal. Wie kann ich eigentlich die I2C Frequenz einstellen? Muss ich sonst noch was beim PIC beachten bzgl. I2C? Habe zuvor noch nie was mit I2C gemacht und finde auch das Beispielprogramm sehr unübersichtlich und habe alles mögliche nachgemessen so dass ich der Meinung bin, dass das Problem nur Softwaretechnisch sein könnte oder nicht? wäre cool wenn mir da jemand weiterhelfen könnte oder evtl ein Programmvorschlag machen könnte um ein eigenes programm zu schreiben welches mit diesem Baustein(SAA1064) arbeitet.
(reiche auch gern auf wunsch noch meinen Programmcode nach)


Danke schonmal im Voraus :)
LG icebobb

RoboHolIC
20.03.2014, 22:14
Hallo icebobo.



Wie kann ich eigentlich die I2C Frequenz einstellen?

Das sagt mir, dass du anscheinend noch keinen Blick in die I2C-Dokumentation des Controllers getan hast :naughty:.

Zitat aus dem Datasheet:
"SSPADD register holds the slave device address
when the SSP is configured in I2C Slave mode. When
the SSP is configured in Master mode, the lower
seven bits of SSPADD act as the baud rate generator
reload value."

Siehe auch Table 9-3, I2C Clock Rate w/ BRG
Meine relevante Zeile dort für den nachfolgenden Codeausschnitt wäre: F_CY = 1MHz, f_SCL = 100kHz, Reloadwert = 0x0A, ich weiche davon mit d'9' um zehn Prozent nach oben ab, weiss aber nicht mehr, warum; es funktioniert aber gut und ist ohnehin ziemlich unkriitisch.

Bei mir sieht die Initialisierung mit 4MHz-Resonator für 100kHz I2C-Takt so aus:


I2C_INIT100
bsf STATUS, RP0 ; Bank 1
movlw d'9' ;
movwf SSPADD ; Reload-Wert für Clock-Takt
bcf STATUS, RP0 ; Bank 0
;
movlw b'00001000' ; I2C Master Mode mit SSPADD
movwf SSPCON ;
bsf SSPCON,SSPEN ; und aktivieren
;
return ;



Gruß
RoboHolIC