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 | ||
| ||
> > > 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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum