PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Anfängerprobleme C mit RTC



Zun
29.02.2012, 23:38
Guten Abend,
ich fange am besten ganz am Anfang an :)

Folgende Hardware benutze ich:
Atmel Atmega32 (auf 8mhz)
2x DS18B20
Ein KS0066 Display
Eine DS1307 RTC mit 12,5pf Quarz

Nun komme ich zu meinem Problem:
Die Uhrzeit wird richtig angezeigt, jedoch springt meine LCD Anzeige bei der Sekundenanzeige einfach 1 Sekunde weiter.
Also 12:35: 04 / 05 / 06 / 08 / 09 / 10 . (Jedoch stimmt die Uhrzeit mit meiner normalen Uhr überein)
Ich habe mal die DS18B20 Routine auskommentiert, dann funktioniert alles einwandfrei.
Ich denke mir jetzt einfach mal, dass mein Fehler in der DS18B20 Routine zu finden ist, weil die Konvertierung zulange dauert, und da ich die Routine zweimal benutze wegen der zwei Sensoren. (Bin leider was Mikroprozessortechnik angeht und deren Programmierung auf dem Anfang-Anfangsstadium *g*).

Im Voraus bitte ich meine "Programmierung" zu entschuldigen *g*, vieles habe ich mit Tutorials programmiert oder an meine Bedürfnisse angepasst.

Mein Programm habe ich als Anhang hinzugefügt.

Vielen Dank für Eure Hilfe im Vorraus und für Verbesserungsvorschläge bin ich gerne offen.

crissa
01.03.2012, 07:28
[...]Ich habe mal die DS18B20 Routine auskommentiert, dann funktioniert alles einwandfrei.
Ich denke mir jetzt einfach mal, dass mein Fehler in der DS18B20 Routine zu finden ist, weil die Konvertierung zulange dauert, und da ich die Routine zweimal benutze wegen der zwei Sensoren. (Bin leider was Mikroprozessortechnik angeht und deren Programmierung auf dem Anfang-Anfangsstadium *g*).[...]

Hoi,
ich habe mir Deinen Code zwar nicht angeguckt, aber ich vermute mal das Du mit einer Schleife arbeitest in der die Uhrzeit angezeigt und die Temperatur Sensoren ausgelesen werden. Wie Du schon richtig heraus gefunden hast ist die Anzeige korrekt wenn Du die Sensoren nicht aus liest. In der Auslese Routine liegt nämlich das Problem, die Temperatur Sensoren brauchen ca. 750 ms um die Temperatur bereit zu stellen! Und da Du zwei hast kommen so 1.5 Sekunden zusammen in der Dein Programm nicht wieder in die Hauptschleife zurück kehren kann und damit wird eine Sekunde übersprungen.

(Leider finde ich auf die Schnelle keine Link der meine Aussage bestätigt. Aber ich habe diese Temperatur Sensoren schon mit Perl unter Linux als auch mit einem Ardunio ausgelesen und diese 750 ms tauchen immer wieder auf!)

HTH!
Tschö, Tore

Kampi
01.03.2012, 07:44
Hallo :)
Crissa hat, denk ich mal, nicht unrecht!
Die Erklärung ist recht eindeutig und auf Grundlage der Erklärung habe ich bischen "recherchiert" (oder das Datenblatt angeschaut ^.^).
Bei diesem Datenblatt:

http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf

steht direkt auf der ersten Seite ganz unten folgendes:

Converts Temperature to 12-Bit Digital Word in 750ms (Max)

Ich denke das sollte dein Problem erklären und Crissa hat eine Quelle um die Aussage zu belegen :)

crissa
01.03.2012, 08:06
[...]
Converts Temperature to 12-Bit Digital Word in 750ms (Max)

Ich denke das sollte dein Problem erklären und Crissa hat eine Quelle um die Aussage zu belegen :)

Hoi,
Danke für den Link.

Noch eine Idee um das Problem zu lösen (und ohne Interrupts zu verwenden):

- Sekundenwechsel abwarten
- alle geraden Sekunden Temperatur Sensor Nummer 1 auslesen
- alle ungeraden Sekunden Nummer 2 auslesen

oder

- Sekundenwechsel abwarten
- alle gerade Sekunden Sensor Nummer 1 auslesen und bei Nummer 2 das Bereitstellen anstossen
- alle ungeraden Sekunden Sensor Nummer 2 auslesen und bei Nummer 1 das Bereitstellen anstossen

Keine Ahnung welche Methode hier angewendet werden kann, dazu müsste ich mir doch mal den Code ansehen. :-)
Tschö, Tore