Hallo ich Versuche eine I2C-Treiber für das Hardware Modul des MSP430F16x zu schreiben. Es funktioniert auch schon etwas. Das Problem ist, wenn ich zum Beispiel folgendes schreiben, das ich immer nur das HighByte von einem LM75 bekomme. i2c_start(SLAVE1); temp0 = i2c_readAck(); lcd_puts_int(temp0,0,1); temp1 = i2c_readAck(); lcd_puts_int(temp1,0,2); Als o hier zum Bsp.: 23 23 und nicht 23 128 oder so was! Das Problem liegt mit sicherheit bei der Libary, vielleich kann mir jemand mal weiterhelfen. ==> ich habe schon einige zeit gebraucht bis ich überhaupt das bekommen habe. Das Ziel ist es, eine Lib zu schreiben die wie die vom AVR(Lib von Peter Fleury) funktioniert. Dadurch kann ich dan meine alten c und h files von diversen Sensoren auch auf dem MSP verwenden. Besten Dank im Voraus mfg mathias
Hat den noch niemand von hier das Hardware I2C Modul des msp430f1611 verwendet? mathais
Bei TI gibts ein Beispiel zur Ansteuerung eines EEProms mit dem Hardware I²C und F169 vielleicht hilft das weiter ? such mal nach slaa208 gruß Thomas
Danke, Das kenne ich schon, aber ich möchte es ohne Innterrupts realisieren. Ich hoffe ich bekomms hin. mfg mathias
Ich benutze am F1611 die nachfolgenden Routinen, klappt bei mir sehr gut (IIC-Inteface für EEPROM und CMOS-Kamera) (main ist ein bißchen gekürzt)
Danke, aber ich suche eine Lösung mit dem Hardware I2C ->Module welches die F15x und F16x Serie hat. mfg mathias
Sorry, hatte ich überlesen. Ich muß leider kompatibel zum F149/F169 bleiben, daher die SW-Lösung.
Hallo, ich komme nicht weiter mit dem I2C Bus. Die Beispiele von TI
kenne ich, aber die lesen zum Beispiel bei dem DAC alle 3Bytes in einer
Funktion. Wenn ich auch msb und lsb in einer einzigen Funktion lese,
geht das auch so zum Bsp.:
void i2c_read(void) {
while (I2CBUSY & I2CDCTL); // wait for i2C ready
i2c_readInit(); // set to readMode
I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST, SP
while((I2CIFG & RXRDYIFG) != RXRDYIFG); // wait for Data Ready
msb = I2CDRB;
while((I2CIFG & RXRDYIFG) != RXRDYIFG); // wait for Data Ready
lsb = I2CDRB;
}
Aber ich möchte wenns geht Byte für Byte mit einer Funktion lesen.
Also
init
start
high = i2c_readAck();
low = i2c_readNak();
stop
Die readNak() funktioniert auch aber die readAck nicht, hat niemand
sowas schonmal gemacht?
Hier noch die restlichen Funktionen.
void i2c_init(void){
P3SEL |= 0x0A; // select module function for the used I2C pins
P3DIR &= ~0x0A; // select ports for I2C function
U0CTL |= I2C+SYNC; // (1) Select I2C mode with SWRST=1
U0CTL &= ~I2CEN; // (2) disable the I2C module
I2CTCTL = I2CSSEL_2+I2CRM; // byte mode, repeat mode
I2CPSC = 0x02; // I2C clock = clock source/I2CPSC
// für 8MHz Quarz / (3+1) ==> 2MHz
I2CSCLH = 0x08; // SCL high period = (8+2)*I2C clock
// 1/2MHz ==> 0.5µSec * 10 => 5µSec
I2CSCLL = 0x08; // SCL low period => wie I2CSLH
// SCL Low, 5µSec + SCL High, 5µSec = 10µSec
// ==> 1/10µSec = 100kHz I2C Clock
I2CIFG = 0;
}
unsigned char i2c_start(unsigned char address) {
//I2CNDAT = 0x01; // I2C Data count (one byte)
I2CSA = address; //set I2C Slave Address
U0CTL |= I2CEN; // (4) set I2CEN via software
return 0;
}
static void i2c_readInit(void){
// Initialization of the I2C Module for Read operation.
U0CTL |= MST; // define Master Mode
I2CTCTL &= ~I2CTRX; // I2CTRX=0 => Receive Mode (R/W bit = 1)
I2CIFG &= ~TXRDYIFG; // clear Receive Data ready
//I2CIE = RXRDYIE; // enable Receive ready interrupt
}
unsigned char i2c_readNak(void) {
while (I2CBUSY & I2CDCTL); // wait for i2C ready
i2c_readInit(); // set to readMode
I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST,STP
while((I2CIFG & RXRDYIFG) != RXRDYIFG); // wait for Data Ready
return I2CDRB;
}
unsigned char i2c_readAck(void) {
while (I2CBUSY & I2CDCTL); // wait for i2C ready
i2c_readInit(); // set to readMode
I2CTCTL |= I2CSTT ; // I2CRM =0; Receive, ST
while((I2CIFG & RXRDYIFG) != RXRDYIFG); // wait for Data Ready
return I2CDRB;
}
@Martin Danke nochmal, was machst du eigentlich mit einer CMOS-Kamera
am msp? Bildverarbeitung?
Besten Dank im Voraus
mfg mathias
Hmmm, vielleicht ist das read_init() zuviel? (Bei mehreren aufeinanderfolgenden Bytes...) Und: Ja, so eine Art Bildverarbeitung. Es geht um eine einfache optische Zeichenerkennung. Ahoi, Martin
hallo Mathias hier ist Fari ich schreibe auch ein API. Ich benutze MSP430F169 ich muss data seb´nden und empfangen duch Baustein DS2482( i2c to 1-Wire bridge). wenn du code hast oder irgendwelche beispiel hast kannst bitte per email schiken frsn74@hotmail.com Ich benutze IAR workbench. MFG Fari
Hello, I have a Problem i m using MSP430F169 as i2c Master and Bridge DS2482-100 as Slave and as 1-Wire master. After that I am using DS1923 temp Sensor. I am new in this embedded field thats why I just want to know If I send Read ROM Command 0x33. How I could Read ths Uniquie ID of iButton [02(MSB) 00 00 00 02 E1 93 41(LSB)]...I dont know, how will be I sure that I get this Uniquie ID. tahnks
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.