mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-Hardware Modul MSP430-Lib


Autor: mgiaco (Gast)
Datum:
Angehängte Dateien:

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

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat den noch niemand von hier das Hardware I2C Modul des msp430f1611
verwendet?

mathais

Autor: supergrobi (Gast)
Datum:

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

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Das kenne ich schon, aber ich möchte es ohne Innterrupts
realisieren. Ich hoffe ich bekomms hin.

mfg mathias

Autor: Martin Schneider (Gast)
Datum:
Angehängte Dateien:

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

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, aber ich suche eine Lösung mit dem Hardware I2C ->Module welches
die F15x und F16x Serie hat.

mfg mathias

Autor: Martin Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hatte ich überlesen.
Ich muß leider kompatibel zum F149/F169 bleiben,
daher die SW-Lösung.

Autor: mgiaco (Gast)
Datum:

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

Autor: Martin Schneider (Gast)
Datum:

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

Autor: Muhammad Farhan (Firma: Uni-duisburg) (fari01f)
Datum:

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

Autor: Muhammad Farhan (Firma: Uni-duisburg) (fari01f)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.