Forum: Compiler & IDEs Atmega168 mit LM75 bei 20Mhz


von Scary (Gast)


Lesenswert?

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

von Scary (Gast)


Lesenswert?

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!

von Timmo H. (masterfx)


Lesenswert?

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.

von Scary (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.