Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > 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 > > >