mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ds18s20 und Uhrzeit auf Lcd


Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe drei ds18s20 auszulesen, was auch funktioniert. Zusätzlich
möchte ich die Uhrzeit und natürlich die Temperaturen zusammen auf ein
Lcd ausgeben. Ich habe in Bascom ein Code für die Sensoren und einen
für die Uhrzeit. Wenn ich aus den beiden Codes einen machen will,
spinnt die Sekundenanzeige. Soll heißen das Lcd zeigt die Sekunden
nicht folgend sondern zB. 38 dann 41 und dann 42 usw. Irgendwie kostet
das Temperaturauslesen soviel Zeit, dass das Lcd mit der laufenden Uhr
nicht mehr klar kommt. Gibt es dafür schon irgendwo eine Lösung die ich
noch nicht gefunden habe?

Gruß Mirko

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann dir in Bascom nicht helfen, aber wenn du die Interrupts nicht
sauber programmiert hast, kann das schon passieren. Wenn dir hier
jemand helfen soll, wäre es gut wenn du deinen Code ebenfalls
hereinstellst.

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Auslesen eines Sensors DS1820 dauert 0,7s. 3 * 0,7 = 2,1s
Da du alles wahrscheinlich nacheinander ablaufen läßt, kommt er
natürlich auch nur ca alle 3 Sekunden dazu die Sekundenanzeige zu
aktualisieren....
Lese halt nur einen Temperaturwert aus aktualisiere die Zeit und dann
den nächsten Temperaturwert usw...?

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment, 7 Sekunden dauert doch die TemperaturMESSUNG. Das auslesen müßte
schneller gehen. Wenn alle drei Sensoren gleichzeitig messen, müßte man
eigentlich hinkommen mit der Zeit.

Gruß

Autor: marc989 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
versuche das ganze doch erstmal zu debuggen. Also einen Pin vor und
nach dem Auslesen der sensoren zu toggeln. Dann das ganze mit einem
Oszilloskop mal messen, dann kann man den Fehler wunderbar
einschränken. Normalerweise dürftest du kein jitter im Signal haben,
wenn doch, dann werden deine Daten ungleichmäßig schnell verarbeitet,
bzw ausgewertet. Vielleicht hast du da ein problem mit dem interrupt?
Aber auch das lässt sich wunderbar oszilloskopieren. Ich mach das
jedenfalls bei solchen Timing problemen immer so.

gruß Marc989

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt einfach nur das Auslesen und das Starten der Messung getrennt
machen.

Ich mache das immer so, daß ich alle 5s die Meßwerte aulese und dann
die nächste Messung starte.


Peter

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die Antworten. Ich habe gedacht ich kann mir das
einfach machen und die beiden Codes einfach zusammenschmeissen. Da das
nicht funktioniert habe ich nun angefangen alles neu aufzubauen. Das
mit den 5 sec habe ich noch nicht wirklich verstanden. Normalerweise
sieht das so aus:
Do
1wreset
1wwrite &H55
1wwrite Id1(1) , 8
1wwrite &H44

Waitms 300
1wreset
1wwrite &H55
1wwrite Id1(1) , 8
1wwrite &HBE
Ar1(1) = 1wread(9)
1wreset

Ich weiß jetzt nicht, was Du genau mit auslesen und Messung starten
meinst ?

Gruß Mirko

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kriegs einfach nicht hin. Die Uhr läuft über einen Uhrenquarz mit
Timer2. Aber die Messung und Auswertung der Temperatursensoren läuft in
der Schleife. Die Ausgabe ans Lcd ebenfalls. Ich glaube das ist das
Problem. Die Daten werden ans Lcd gesendet, danach werden die
Temperatursensoren ausgelesen und ausgewertet und dann Loop. Macht bei
2 Sensoren scheinbar 1,5 bis 2 Sekunden bis wieder Daten ans Lcd
geschickt werden können. Gibt es da vielleicht doch noch eine Lösung?
Oder gibt es andere Temperatursensoren die nicht so zeitintensiv
auslesen???

Gruß Mirko

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Oder gibt es andere Temperatursensoren die nicht so zeitintensiv
auslesen???"


Du bist es doch, der die Wartetzeiten einbaut und sich dann wundert,
warum dann auch wirklich gewartet wird:

"Waitms 300"

bedeutet genau das, halte alles an und drehe Däumchen für 300ms.

Der Sensor kann nix dafür, daß Du schlecht programmierst.


Also nochmal:

Du hast die Uhrzeit und jedesmal, wenn die Sekunde wechselt, zählst du
eine Variable hoch. Und wenn die 5s erreicht, dann liest Du die
Sensoren aus und startest die nächste Messung. Und schon sind die
Wartezeiten verschwunden.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.