Tenorm
08.02.2008, 11:42
Hi,
mein Programm in cc für den Atmega128 hängt sich bei "I2C_Start();" auf, eigendlich sollte es den Wert vom SRF02 im EEProm speichern und am LCD ausgeben. Der Kompiler findet keine Fehler.
int WERT1, WERT2;
char zeile1[12], zeile2[12];
void main(void)
{
word address;
byte data,EEPROM_data;
address=0x20;
data=0x42;
I2C_Init(I2C_100kHz); //I2C-Schnittstelle wird initialisiert
LCD_Init();
LCD_ClearLCD(); //Displayinhalt löschen
LCD_CursorOff(); //Display Cursur ausschalten
zeile1 = "Zentim."; //zeile1 bedeutet Zentim.
LCD_CursorPos(0); //Position von Zeile1
LCD_WriteText(zeile1); //Jez ausgeben
while (true) //Unendlichschleife
{
I2C_Start(); //I2C starten...
I2C_Write(0xE0); //...und zwar im Schreibmodus EO(224=11100000)
I2C_Write(0x51); //Ausgabe in cm
AbsDelay(100); //Verschnaufpause (er braucht 67ms, ich geb ///ihm 100)
I2C_Stop(); //I2C stoppen
AbsDelay(5); //Pause für EEprom
I2C_Start(); // I2C starten...
I2C_Write(0xE0);
I2C_Write(address>>8);
I2C_Write(address);
I2C_Start(); // I2C neustarten...
I2C_Write(0xE1); // ...jetzt aber im Lesemodus E1(225=11100001)
//Der Wert1 wirdgelesen...
WERT1=I2C_Read_ACK(); //...und mit einem ACK gespickt.
EEPROM_data=I2C_Read_ACK(); //...und abgespeichert
//Der Wert2 wirdgelesen...
WERT2=I2C_Read_NACK(); //...und mit einem NACK gespickt.
I2C_Stop(); //I2C wird angehalten
Msg_WriteHex(EEPROM_data); //Den Wert im EEprom als /
//Hexadezimale Zahl abspeichern
Str_WriteInt(WERT1, zeile2, 0x40); //...Schreib in die 2.Zeile W1
LCD_CursorPos(0x40); //In Zeile2
Str_WriteInt(WERT2, zeile2, 0x40+8);//...Schreib in die 2.Zeile W2
LCD_CursorPos(0x40+8); //In Zeile2 in die mitte
AbsDelay(1000); //Nach einer Sekunde springt das Programm
// zur Zur Zeile "while (true)" zurück
}
}
Hat jemand ne Ahnung was ich machen kann, da das Programm bereits beim I2C_Bus starten aufgibt, handelt es sich eher um einen Hardwearfehler, das Board un der Sensor sind fehlerfrei. Wie aktiviert man eigendlich die Pullupwiderstände des Chips?
mein Programm in cc für den Atmega128 hängt sich bei "I2C_Start();" auf, eigendlich sollte es den Wert vom SRF02 im EEProm speichern und am LCD ausgeben. Der Kompiler findet keine Fehler.
int WERT1, WERT2;
char zeile1[12], zeile2[12];
void main(void)
{
word address;
byte data,EEPROM_data;
address=0x20;
data=0x42;
I2C_Init(I2C_100kHz); //I2C-Schnittstelle wird initialisiert
LCD_Init();
LCD_ClearLCD(); //Displayinhalt löschen
LCD_CursorOff(); //Display Cursur ausschalten
zeile1 = "Zentim."; //zeile1 bedeutet Zentim.
LCD_CursorPos(0); //Position von Zeile1
LCD_WriteText(zeile1); //Jez ausgeben
while (true) //Unendlichschleife
{
I2C_Start(); //I2C starten...
I2C_Write(0xE0); //...und zwar im Schreibmodus EO(224=11100000)
I2C_Write(0x51); //Ausgabe in cm
AbsDelay(100); //Verschnaufpause (er braucht 67ms, ich geb ///ihm 100)
I2C_Stop(); //I2C stoppen
AbsDelay(5); //Pause für EEprom
I2C_Start(); // I2C starten...
I2C_Write(0xE0);
I2C_Write(address>>8);
I2C_Write(address);
I2C_Start(); // I2C neustarten...
I2C_Write(0xE1); // ...jetzt aber im Lesemodus E1(225=11100001)
//Der Wert1 wirdgelesen...
WERT1=I2C_Read_ACK(); //...und mit einem ACK gespickt.
EEPROM_data=I2C_Read_ACK(); //...und abgespeichert
//Der Wert2 wirdgelesen...
WERT2=I2C_Read_NACK(); //...und mit einem NACK gespickt.
I2C_Stop(); //I2C wird angehalten
Msg_WriteHex(EEPROM_data); //Den Wert im EEprom als /
//Hexadezimale Zahl abspeichern
Str_WriteInt(WERT1, zeile2, 0x40); //...Schreib in die 2.Zeile W1
LCD_CursorPos(0x40); //In Zeile2
Str_WriteInt(WERT2, zeile2, 0x40+8);//...Schreib in die 2.Zeile W2
LCD_CursorPos(0x40+8); //In Zeile2 in die mitte
AbsDelay(1000); //Nach einer Sekunde springt das Programm
// zur Zur Zeile "while (true)" zurück
}
}
Hat jemand ne Ahnung was ich machen kann, da das Programm bereits beim I2C_Bus starten aufgibt, handelt es sich eher um einen Hardwearfehler, das Board un der Sensor sind fehlerfrei. Wie aktiviert man eigendlich die Pullupwiderstände des Chips?