Problem mit I2C display und I2C RTC

hallo liebe leute :slight_smile:

ich hab seit 3 tagen:

  • Arduino mega 2560 Rev3

  • I2C LCD 2004 (16x4)

  • ds18b20

  • Real Time Clock Module DS1307 <-- ebenfalls I2C

  • DFRduino Ethernet Schield

  • und noch GAAANNZ viel andres zeug^^ (eher unwichtig :D)
    ======================================================

und leider n paar problemchen:

  1. Problem: (GELÖST!! auf ca. 10ms delay gebracht :slight_smile:)
    ======================================================

ich habe 4 buttons die derzeit zum testen 4 leds beim drücken an und wenn ich los lass wieder ausschalten!

dabei habe ich noch gleichzeitig den display am laufen der die aktuelle temp anzeigt!

wenn ich jetzt ein button drücke passiert es jedesmal wenn er im loop-bereich vom temp auslesen ist für ca. 1-2 sekunden stehn bleibt und dann erst weiter macht!

was ich gern hätte ist das die temp im hintergrund ausgelesen wird und nicht andere sachen hintert!

derzeit hab ichs so eingestelt das er nur alle 5 sekunden die temp ausliest und in den 5 sekunden kann ich halt alles machen was ich will... sobalt halt die 5 sekunden um sind hängts wieder für 1-2 sekunden und geht wieder weiter...

weiß einer einen weg das so zu lösen wie ich will?? also das temp im hintergrund ausgelesen wird und NICHT das script praktisch "stoppt"?

2.problem :-/

da ich ja das display an sda und scl angeschlossen habe für das I2C (protokoll??) und noch einen RTC habe der auch mit sda und scl angeschlossen werden soll (wegen I2C) frage ich mich wie das geht wenn es nur 1 mal sda und 1 mal scl gibt :-/

WIE GESAGT DAVOR NOCHNIE WAS MIT ARDUINO AM HUT GEHABT :smiley:

Vielleicht kann mir da einer weiter helfen :slight_smile:

Achja das was ich da "bastel"^^ wird hoffentlich bald eine aquarien-steuerung

Falls jemand bilder braucht oder den derzeitigen code einfach bescheid sagen :slight_smile:

DANKE an alle die sich die mühe machen

lieben gruß aus Bayern AndiIsl

EDIT:

also hab ein wenig im internet geguckt und weiß jetzt warum das temp auslesen wie ein delay ist!

der ds18b20 braucht 750ms um einen wert auszulesen und das steht in der dallastemperatures.ccp drinn:

case 9:
delay(94);
break;
case 10:
delay(188);
break;
case 11:
delay(375);
break;
case 12:
default:
delay(750);
break;

wie kann ich diese 750ms umgehen??

im dallastemperatures.ccp die 750ms durch blinkwithoutdelay ersetzten? geht das??

oder kann ich in meinem script irgendwas schreiben das er nicht darauf wartet bis der wert verfügbar ist?

EDIT2:

habs geschafft!! hab die DallasTemperature.cpp und die DallasTemperature.h geändert und jetzt gibts kein delay mehr :)))))) jede sekunde frag ich die temp ab und das dauert nicht mehr als ~ 10ms (natürlich kann ich das nicht genau messen aber der buzzer macht nur GAANNZ kurz pause! damit halt ichs aus :smiley:

falls einer doch noch weiß wie ich die 10ms auch noch wegbekomm wär ich ihm sehr dankbar! vill brauch ich ja sowas ähnliches bei einer anderen funktion! und ich will ja schließlich auch was dabei lernen^^

I2C ist ein BUS. Da schaltest Du einfach alle Teile paralell an. Achtung: je länger der BUS wird und je mehr Geräte an BUS hängen desto kleiner müssen die Pullupwiderstände sein.
Grüße Uwe

I2C ist, wie Uwe bereits sagte, ein Bussystem. Es handelt sich hierbei um ein Master-Slave-Konzept. Es gibt (meist)1 einen Master (hier der Arduino bzw. dessen Mikrocontroller) und einen oder mehrere Slave(s). In deinem Fall sind es 2 Slaves, die jeweils an SDA und SCL angeschlossen werden. Die Kommunikation basiert auf der Adressierbarkeit der einzelnen Slaves, da diese Adressierung 7bit lang ist, sind theoretische 128 Slaves möglich. In der Realität sind es sogar noch weniger, weil einige Adressen bereits vorbelegt sind.

1Ein Multimaster-Mode ist ebenfalls möglich, kommt aber im Hobbybereich ausgesprochen selten vor.

Um genau zu sein sind maximal 127 Slaves möglich, da die Adresse 0 für den Master reserviert ist.
Grüße Uwe

WOW dankeschön :slight_smile: also besser kann mans nicht erklärn! komisch nur das ich nichts in google gefunden habe.. :stuck_out_tongue:

weiß jetzt noch einer wie man diese 10ms warten wegbekommt? :smiley:

danke nochmals ohne uwe und sth77 würd ich immernoch dumm gucken :smiley:

Ich glaube diese 10mS bekommst Du nicht weg. Das ist die Zeit die die Bibiothek braucht. Du mußt Dir die Bibiothek anschauen oder auf einen anderen Temperatursensor ausweichen.
Grüße Uwe

die 10 ms sind schon weg :smiley: jetzt gibts keine wartezeit mehr <3 <3 <3 :smiley:

anderes problem:

===================================================
ich habe so komische kerülische zeichen bei der uhrzeit auf dem Display:



woher kommen die und wie bekomm ich die weg?

===================================================

wenn ich diese relais alle an hab:

dann wird dieses bauteil:

EXTREM HEISS!! ich steck dann nach 10-20 sekunden gleich wieder aus weils wirklich nichtmehr anfassbar ist!

mein netzeil: 12V max 1.5A

vill weiß einer wieso das so ist und wie man das machen kann das es nichtmehr so ist!

danke schonmal!! :)) hilft ja immer total schnell hier

Dieses heiße Bauteil ist der 5V Spannungsstabilisator. Versorg den Arduino über einen externen Spannungstabilisator mit 5V.
Die komischen Zeichen kommen daher, daß Du nicht die ashii Kode sonden die Zahl des Datumms überträgst.
Grüße Uwe

hm und wie stell ich das um mit dem ascii ???

kann ich das netzteil dann an den netzteil stecker drann stecken oder soll ich da ein usbkabel drann löten??

:slight_smile: danke für deine antwort