PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit SRF02



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?

Tenorm
08.02.2008, 11:44
Dia smilies hat der HTMLcoder gemacht, Smilie="8 )"

Tenorm
08.02.2008, 18:52
Hat sich schon...

Tenorm
11.02.2008, 15:54
.. hab vergessen die Pull up widerstände zu aktivieren (siehe Forum "pull-up-widerstände aktivieren(ATmega128)")

Tenorm
25.02.2008, 14:36
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 :cheesy:

Gruß

Tenorm

flo_weitweg
26.02.2008, 00:38
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

Tenorm
26.02.2008, 19:10
Alles schon ausprobiert, aber trotzdem danke. Das Programm oben ist schon veraltet...

Sonst noch Ideen

Tenorm

flo_weitweg
26.02.2008, 20:34
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

Tenorm
01.03.2008, 14:23
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