Hallo zusammen!
Ich möchte meinen MSP430G2553 mit anderen Geräten per I2C verbinden. Um
erstmal grundsätzlich zu sehen wie das (seitens MSP430) funktioniert,
habe ich mir einen Beispielcode von MSP430ware besorgt
(msp430g2xx3_uscib0_i2c_06). Er soll laut Beschreibung als Master
versuchen ein Byte zum Slave zu schicken.
@Rufus: Wenn ich die internen Pullups aktiviere dann tut sich leider
auch nichts, außer dass beide dann auf 3,3V liegen.
@MSP ist gut: Meinst du TXByteCtr?
- Passen die Pins zu den Ports (im Datenblatt geprüft)?
- Ist SMCLK vorhanden?
- Wie weit kommt dein Programm (mit dem Debugger prüfen)? Hängt es schon
bei while (UCB0CTL1 & UCTXSTP);, oder kommt nur der Sendeinterrupt
nicht?
Max
-TXByteCtr auf >1 setzen macht keinen Unterschied.
-Pins müssten zu Ports passen, da es ein MSP430ware Beispielcode für
g2x53 ist. Der Port heißt im Datenblatt bei der Pinbeschriftung "UCB0",
was eine Abkürzung für das in der Codebeschreibung "USCI_B0" genannte
sein müsste.
-Was meinst du mit SMCLK vorhanden? Die ist doch immer vorhanden oder?
-Der Interrupt wird aufgerufen und die if-Schleife darin wird ausgeführt
(TXByteCtr != 0). Das Programm führt auch die von dir genannte While
Schleife aus.
GinTonic schrieb:> @Rufus: Wenn ich die internen Pullups aktiviere dann tut sich leider> auch nichts, außer dass beide dann auf 3,3V liegen.
Er meint die externen die zu I2C dazugehören.
-Externe Pullups habe ich nicht dran, hatte das mal vor na weile
ausprobiert und es änderte nichts. Deshalb habe ich auch die Adresse
nicht angepasst.
-Momentan habe ich kein weiteres I2C Gerät angeschlossen, ich prüfe
direkt mit dem Oszilloskop die beiden Ports.
Ja, nutze das Launchpad, aber ich habe leider den G2452 nicht
greifbar... Der Beispielcode seitens TI dazu sieht aber komplett anders
aus! Ich habe übrigens mal SMCLK an P1.4 gelegt und gemessen - kein
Signal! Wie kann das sein, wo doch SMCLK ab Start auf ~1Mhz lieg? ACLK
funktioniert auf P1.0. Code dafür:
Ich habe gerade festgestellt dass ACLK doch nicht funktioniert, da
kommen nur Peaks und eigentlich müsstes es ja ein Rechtecksignal sein...
Ich glaube mein Launchpad ist kaputt
@Martin: Ich habe es mit 2 verschiedenen G2553 getestet, bei beiden das
selbe Verhalten.
@DirkZ: die Jumper waren beide gesetzt, aber auch nach dem entfernen
sehe ich nur einen Puls an P1.0 und nichts an P1.4 (wo SMCLK sein
müsste). Evtl könnte das auch daran liegen, dass meine Analogbandbreite
vom Oszi nicht groß genug ist, SMCLK müsste ja auf ca 1Mhz liegen und
das ist glaube ich zu viel. Aber warum dann kein SCL? Das soll ja nur
100kHz haben...
Nach dem Schaubild
https://github.com/energia/Energia/wiki/Hardware
geht I2C nur an P1.6 u.1.7 und msp430g2553.pdf, Seite 7.
Und auf die Angabe ca. 1.2 MHz verlass' ich mich nicht. Genau (auf 25°C
kalibriert) 1 MHz:
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
// UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR0 = 10; // fSCL = SMCLK/10 = ~100kHz
Ja, geht nur an P1.6 und P1.7. Da sollte dann ja auch eigentlich was zu
sehen sein, dem Code nach, den ich oben gepostet habe. Leider kommt aber
mit den zwei Zeilen auch kein Signal.
vergiß die internen Pull-Ups und verwende externe Widerstände.
Die internen PullUps sind OK wenn du den Pin als normalen IO verwendest
und dahinter irgendeine digitale Logic hängen hast.
Für I2C reichen die Pull-Ups nicht aus - das Problem hatte ich mal mit
einem MSP430F2272...
Du siehst wohl am Oszi ganz kleine Spannungs-spikes, richtig?
Christoph, ich habe deinen Rat befolgt (2 Pullups mit jeweils 1kOhm),
die Situation ist die selbe (konstante 3.3V). Ich sehe auch keine
kleinen Spannungspeaks (weder an sda noch an scl). Wenn ich die Pullups
abziehe liegen beide Pegel auf 0V.