-
-
Problem mit SRF02
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>>;
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+;//...Schreib in die 2.Zeile W2
LCD_CursorPos(0x40+; //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?
-
Dia smilies hat der HTMLcoder gemacht, Smilie="8 )"
-
-
.. hab vergessen die Pull up widerstände zu aktivieren (siehe Forum "pull-up-widerstände aktivieren(ATmega12")
-
Bei mir will der SRF nicht so richtig; ich schreibe ihm die Adresse, das Register, den Befehl aber ich bring ihn nicht mal zum messen... Hat überhaupt schon mal jemand gepack, einen Baustein der c-control pro serie mit einem SRF (über I2C, nicht die Sensoren die über PWM funktionieren) zum messen zu bringen?
Freu mich über JEDEN Tipp
Gruß
Tenorm
-
Hallo!
Ich würd mal sagen du nach dem 0xE0 noch ein 0x00 schickst bevor du das 0x51 sendest. Also sende mal:
0xE0
0x00
0x51
Dann kommt auch was an!
LG
Flo
-
Alles schon ausprobiert, aber trotzdem danke. Das Programm oben ist schon veraltet...
Sonst noch Ideen
Tenorm
-
Hallo!
Kannst mal den neuen Code posten!
Wenn du ein Scope hast, kannst mal nachschauen ob die beiden Signale SDaA und SCL so kommen wie sie kommen sollen?
Bis denne
Flo
-
Danke Flo,
ich hab zwar kein SCOPE,
aber hier ist mein CODE:
void main(void)
{
I2C_Init(I2C_100kHz); // I2C-Schnittstelle mit 100kHz initialisieren
Port_Write(24,1); // Pullup an Port D0 ein
Port_Write(25,1); // Pullup an Port D1 ein
while(true)
{
I2C_Start();
I2C_Write(0xE0); // Adresse
I2C_Write(0x00); // Register
I2C_Write(0x51); // Befehl
}
}
TENORM
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen