Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: CC bleibt bei I2C_Start hängen Kategorie: I²C-Bus (von GEMINI1606 - 19.06.2009 11:48)
Als Antwort auf Re: CC bleibt bei I2C_Start hängen von Endress - 19.06.2009 11:23
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > > Hallo,
> > >
> > > ich habe den Code aus dem Buch übernommen und ein Temperaturmodul angehängt.
> > >
> > > Die C-Control hängt sich beim ersten I2C_Start() auf, auch wenn garkein I2C Slave im Bus hängt.
> > >
> > > Code ist bis auf die Adresse des Modul identisch :
> > >
> > > http://books.google.de/books?id=bnI1TIagSPQC&pg=PA85&dq=i2c+c-control&lr=
> > >
> > > Danke und Gruss, Endress
> > >
> > >
> > >
> > Hallo Endress,
> >
> > schick mal bitte den Code, so ist schwer zu sagen wo es hängt.
> >
> > GruÃ?
> > GEMINI1606
>
> Orginal Code:
>
> // I2C-Thermometer
> // erforderliche Library: IntFunc_Lib.cc, LCD_Lib.cc
>
> // Ã?ber ein I2C-Bus Thermometer Modul wird die aktuelle Temperatur erfasst und
> // über die Leitungen SDA und SCL an den MEGA32 bzw. MEGA128 übertragen.
> // Der ermittelte Wert wird auf dem Display angezeigt.
>
> // globale Variablendeklaration
> int MSDB, LSDB;
> char zeile1[9], zeile2[9];
>
> //-------------------------------------------------------------------------------
> // Hauptprogramm
> //
> void main(void)
> {
>     TempInit();             // I2C-Modul wird initialisiert
>     DisplayInit();          // LCD-Modul wird initialisiert
>
>     while (true)
>     {
>         I2C_Start();        // I2C starten
>         I2C_Write(0x9E);    // Temperaturmodul mit der Adresse 10011110 aufrufen
>         I2C_Write(0xAA);    // Die letzte konvertierte Temperatur wird eingelesen
>         I2C_Start();        // I2C erneut starten
>         I2C_Write(0x9F);    // Temperaturmodul mit der Adresse 10011111 aufrufen
>                             // Mit dem ersten Bit wird das Schreiben und Lesen
>                             // unterschieden 1 <=> lesen, 0 <=> schreiben.
>         MSDB=I2C_Read_ACK();    // Der MSDB-Wert wird gelesen und mit einem ACK quittiert.
>         LSDB=I2C_Read_NACK();   // Der LSDB-Wert wird gelesen und mit einem NACK quittiert.
>         I2C_Stop();         // I2C wird angehalten
>         Display();          // Der ermittelte Wert wird auf dem Display ausgegeben.
>         AbsDelay(1000);     // Nach einer Sekunde wird die nächste Messung durchgeführt.
>     }
> }
>
>
> void TempInit(void)
> {
>
>     I2C_Init(I2C_100kHz );  // I2C initialisieren
>
>     I2C_Start();            // I2C starten
>     I2C_Write(0x9E);        // Temperaturmodul mit der Adresse 10011110 aufrufen
>     I2C_Write(0xAC);        // Aufruf des 1-bate Konfigurationsregisters
>     I2C_Write(0x02);        // Die Datenübertragung des Moduls wird aktiviert
>     I2C_Stop();             // I2C wird angehalten
>
>     I2C_Start();            // I2C starten
>     I2C_Write(0x9E);        // Temperaturmodul mit der Adresse 10011110 aufrufen
>     I2C_Write(0xA1);        // TH-Register wird aufgerufen
>     I2C_Write(0x28);        // MSDB der maximalen Temperatur wird gesendet (+40°C)
>     I2C_Write(0x00);        // LSDB der maximalen Temperatur wird gesendet
>     I2C_Stop();             // I2C wird angehalten
>
>     I2C_Start();            // I2C starten
>     I2C_Write(0x9E);        // Temperaturmodul mit der Adresse 10011110 aufrufen
>     I2C_Write(0xA2);        // TL-Register wird aufgerufen
>     I2C_Write(0x00);        // MSDB der minimalen Temperatur wird gesendet (+0°C)
>     I2C_Write(0x00);        // LSDB der minimalen Temperatur wird gesendet
>     I2C_Stop();             // I2C wird angehalten
>
>     I2C_Start();            // I2C starten
>     I2C_Write(0x9E);        // Temperaturmodul mit der Adresse 10011110 aufrufen
>     I2C_Write(0x51);        // Ã?bertragung wird gestartet
>     I2C_Stop();             // I2C wird angehalten  
> }
>
>
> //-------------------------------------------------------------------------------
> // Display
> //
> void DisplayInit(void)
> {
>
>     LCD_Init();                 // Display initialisieren
>     LCD_ClearLCD();             // Display löschen
>     LCD_CursorOff();            // Display Cursur ausschalten
>     zeile1 = "I2C-Temp";        // Text der ersten Zeile wird zugewiesen
> }
>
> void Display(void)
> {
>     Str_WriteInt(MSDB, zeile2, 0);
>     LCD_CursorPos(0x00);        // LCD Cursor positionieren
>     LCD_WriteText(zeile1);      // Die erste Zeile wird ausgegeben.
>     LCD_CursorPos(0x42);        // LCD Cursor positionieren
>     LCD_WriteText(zeile2);      // Die Temperatur wird ausgegeben.
>     LCD_WriteChar(0x20);        // Ein Leerzeichen wird geschrieben.
>     LCD_WriteChar(0x43);        // Ein C wird ausgegeben.
> }
>
> wie gesagt ist es das Orginal Beispiel aus dem Buch MSR mit C-Control Pro von Rainer Schirm und
> Peter Sprenger.
>
> Gruss, Endress

Hallo,

hast du PullUP Widerstände an den Leitungen SCL und SDA ???

GruÃ?
GEMINI1606


    Antwort schreiben


Antworten:

Re: CC bleibt bei I2C_Start hängen (von Endress - 20.06.2009 19:35)
    Re: CC bleibt bei I2C_Start hängen (von ER - 23.06.2009 9:32)
    Re: CC bleibt bei I2C_Start hängen (von Endress - 22.06.2009 10:30)
        Re: CC bleibt bei I2C_Start hängen (von Daniel - 26.06.2009 17:38)