Hallo, ich versuche schon seit einer Weile mit dem µController MSP430F2122 per I2C ein Digtalpotentiometer (MAX5477EUD) anzusprechen, jedoch bekomme ich kein Signal an den Ausgängen. Um das Potentiometer anzusprechen muss ich zuerst ein Command-Byte senden, wohin ich schreiben möchte, und dannach ein Daten-Byte, welches mir den Widerstand einstellt. Jedoch genau hier scheitere ich, da ich nicht weiß ob ich die nacheinander etc. senden muss. Zum kompilieren verwende ich die MSP430-GCC tools. Im Anhang mein C-File. Vielleicht hat ja jemand eine Ahnung... Danke im Voraus mfg
Hat wirklich noch niemand etwas mit dem MSP430F2122 und I2C gemacht? Ich wäre für jeden Tipp dankbar... mfg
Hm... Da fehlt irgendwie noch was... Ich kann dir gleich mal meinen Soft I2C Code schicken, welcher bei mir zum auslesen eines Gyros gut funktioniert. Vielleicht kannst du damit mal testen.
Michael S. schrieb: > Jedoch genau hier scheitere ich, da ich > nicht weiß ob ich die nacheinander etc. senden muss. Alles direkt hintereinander in einem Aufruf.
Jörg S. schrieb:
> Alles direkt hintereinander in einem Aufruf.
also quasi so?:
UCB0TXBUF = TXData1;
UCB0TXBUF = TXData2;
Und die Adresse vom Slave wird immer automatisch gesendet oder?
Also ich glaube jetzt durch Messungen mit dem Oszilloskop darauf gekommen zu sein, dass mein Programm nur die Slave-Adresse sendet und den Rest ignoriert....
1 | char data = 0xff; //data step 170 |
2 | char command = 0xff; //nvreg of both wiper |
3 | |
4 | while(1) |
5 | {
|
6 | |
7 | while(UCB0STAT & UCBBUSY); //wait for bus to be free |
8 | |
9 | UCB0I2CSA = 0x28; //slave address MAX5477EUD = 0101000 |
10 | UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation |
11 | |
12 | UCB0CTL1 |= UCTR + UCTXSTT; //I2C TX, Send Start |
13 | |
14 | UCB0TXBUF = data; //wird nicht gesendet ? |
15 | UCB0TXBUF = command; |
16 | |
17 | UCB0CTL1 |= UCTXSTP; // I2C stop condition |
18 | IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag |
19 | }
|
Aber warum ist die Frage^^?
>UCB0TXBUF = data; //wird nicht gesendet ? >UCB0TXBUF = command; Kann so nicht klappen. Du must immer warten ber der MSP wieder bereit ist neue Daten anzunehmen.
> Kann so nicht klappen. Du must immer warten ber der MSP wieder bereit > ist neue Daten anzunehmen Würde dieser Befehl davor und dazwischen schon ausreichen oder gibt es noch Register die ich nicht beachte? >while(UCB0STAT & UCBBUSY); PS: Danke für deine Hilfe :D
So jetz hab ich es mit Interrupts gelöst und es funktioniert so wie es soll. Falls jemand Mal das selbe Problem hat häng ich den Code an. Danke an alle für die hilfreichen Posts.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.