Hallo zusammen, habe ein Problem und zwar habe ich einen Atmega168 mit 20Mhz an einen LM75 und dem EDIP240 über I2C hängen. Habe eine 100kHz SCL (auch mittels Oszi gemessen) Das Problem ist aber wenn ich den Atmega brenne schickt er mir genau 1 mal die Temperatur an das Display und dann nicht mehr. Muss noch dazu sagen dass es mit dem internen Oszillator mit 10kHz funktioniert hat. Theortisch sollte es ja auch funktionieren wenn ich beim 20Mhz Quarz und 10kHz SCL betreibe - Tut es aber nicht... habe damals nur eine kleine Pause für den LM75 angefügt und es hat funktioniert...hatte nämlich das selbe problem vorher auch aber jetzt bekomme ich es nicht mehr weg. void init_I2C () { TWBR = 23; TWSR = 1; } Ab hier ist die Temperatur abfrage! i2c_start (); i2c_senden (0x90); i2c_senden (0x00); i2c_start (); i2c_senden (0x91); //adresse lm75, + startbedingung temperatur = i2c_empfang(); //empfang erstes byte //temperatur = i2c_readNak(); LM75_temp = temperatur<<8; temperatur2 = i2c_empfang2(); //empfang 2tes byte * //temperatur2 = i2c_readAck(); LM75_temp |=temperatur2; i2c_stop(); //stopbedingung schicken wait_ms(150); mfg Scary
so hab mittlerweile die Ursache gefunden nur verstehe ich nicht ganz warum das so ist,vielleicht kann mir jemand helfen? mit der _delay_ms(xx) funktioniert es aber wieso nicht mit der wait_ms(xx) hab im delay.h die CPU Frequenz vergessen zu ändern... void wait_ms(int miliSec) { _delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec); //4 Zyklen warteschleife } danke!
Scary schrieb: > void wait_ms(int miliSec) > { > _delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec); //4 Zyklen > warteschleife > } Wieso macht man auch sowas, wo es die Funktion doch schon fertig in der libc gibt.
weil ich noch nicht gut im prog. bin und deswegen das einfach kopiert habe...natürlich jetzt im nachhinein ist das einfach nur MIST. Natürlich ein delay ist sowieso beschi**en da es ja das prog herbremst aber es wird sowieso noch durch einen timer ersetzt. Auch deswegen habe ich mich in der hinsicht nicht darum gekümmert. aber danke nochmal
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.