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 ER - 23.06.2009 9:32)
Als Antwort auf Re: CC bleibt bei I2C_Start hängen von Endress - 20.06.2009 19:35
Ich nutze:
C-Control Pro Mega32
> > > > > 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
>
> Hallo Gemini,
>
> es handelt sich um das I2C Temperaturmodul von Conrad, da bin ich davon ausgegangen, dass die Pullups
> auf dem Modul schon vorhanden sind.
> Ich habe testweise 2 Pullupwiderstaende angesteckt, bringt auch nichts.
>
> Gruss, Endress


Hallo Endress,

ich jetzt 5 Tage mit der CC Pro beschäftigt. Also  neu hier.
Wenn der IIc Bus nicht läuft, wäre das fatal. Damit wären meine Projekte mit der Pro
eingestellt. Ich bin aber noch nicht so weit. Der IIC Bus kommt in 2 Wochen dran.
Dann schlieÃ?e ich da einen LA und ein Scope an umd schaue mir das ganze mal an.

Ich hab mir das Programm angesehen. MuÃ? der Baustein nciht am Anfang einen Reset haben?
Welcher ist das von Conrad. Der DS 1631?
Dein Programm ist herunterkopiert. Ich stecke es in die IDE und probiere selber.

GruÃ?
Ellen





    Antwort schreiben


Antworten: