Forum: Mikrocontroller und Digitale Elektronik DS18S20 und 4 x 7Segment - Anzeige


von Sven Scholz (Gast)


Angehängte Dateien:

Lesenswert?

Grüß Gott,

also ich habe jetzt mein Projekt realisiert, also die Ansteuerung
meiner Anzeige bestehend aus vier 7-Segment-Anzeige mittels Multiplex.

Ich kann jetzt z.B. einen Counter programmieren, der von 0000 bis 9999
hochläuft. Siehe Anhang. Feine Sache.

Da ich hier noch einen Dallas DS18S20 herumliegen habe und der
komplette Port C meines ATmega8 noch frei ist, habe ich mir als nächste
Aufgabe die Messung und Ausgabe der aktuellen Temperatur gestellt.

Das Ganze soll wie gewohnt wieder in Assembler gelöst werden. Kann ich
den I/O Pin des DS18S20 einfach mit einem Pin des Port C verbinden oder
muss ich beim Anschluss noch auf irgendetwas achten?

Wie läuft die Ermittlung der Temperatur generell eigentlich ab? Wird in
ein Register der Bitcode der Temperatur abgelegt und dann dieser Wert
weiterverarbeitet, so dass ich damit meine Anzeige ansteuern kann oder
wie läuft das? (ich würde ja ganz gerne meinen QUellcode
weiterverwenden)

Danke schon mal im Voraus.

von Peter Dannegger (Gast)


Lesenswert?

Die .db Anweisung aber ganz schnell raus aus dem Code !!!

Die wird nämlich mit ausgeführt und das kann die komischsten Effekte
zeigen !
Also ab damit, entweder zwischen 2 Unterfunktionen (hinter ein RET)
oder ganz ans Ende.


Und für einen Tabellenzugriff mußt Du eine 16Bit Addition machen oder
ständig überprüfen, daß die Tabelle nicht über xx7F bzw. xxFF drüber
raus geht.

Oder ganz clever, wie in meinem Beispiel, direkt an xx80 oder xx00
plazieren (Alignment), dann brauchts überhaupt keine Addition (wenn
Tabelle <=256 Byte).


Und mache ruhig einen Schritt nach dem anderen, d.h. vor dem DS1820 ist
erstmal der Timerinterrupt viel wichtiger !

Es sei denn, Du willst ganz schnell unfroh werden, wenn Deine
Multiplexanzeige flackert oder unterschiedlich hell ist, weil die
Laufzeiten der Hauptschleife total darauf einwirken.


Es gibt Experten, die hassen Interrups und machen alles in der
Hauptschleife mit Delays.
Die sind dann allerdings dazu verdammt, etwa 99% der
Programmentwicklungszzeit nur allein damit zu verschwenden, daß sie
Zyklen zählen.


Zum DS1820 selber ist ja auch schon was in der Codesammlung (mit
ATTiny12).


Peter

von Peter Dannegger (Gast)


Lesenswert?

P.S.:

Und nach dem Timerinterrupt erst noch die Binär nach Dezimal Wandlung,
denn aus dem DS1820 kommts natürlich binär raus.


Peter

von Sven Scholz (Gast)


Lesenswert?

Ja okay, das werde ich mir anschauen...

von Hauke Radtki (Gast)


Lesenswert?

wenn du willst, kann ich dir meinen code für den DS1820 geben ist für
nen mega 16 und noch ohne timer interrupt, weils schnell gehen sollte
(das zu proggen) werde das ganze aber noch auf timer-interrupt
umschreiben, weil man das ganze dann auch viel einfacher an andere
frequenzen anpassen kann ... aber generell läuft das beim ds1820 so ab:

von Sven Scholz (Gast)


Lesenswert?

Ja, also ein Blick auf deinen Quellcode kann bestimmt nicht schaden.
Dann weiß ich ungefähr, wie ich anfangen muss/kann.

Nochmal zu der Frage, wie ich den DS18S20 an meinen ATmega8 anschließe.
Also einfach mit einen freien Pin des C-Ports verbinden und fertig oder
muss da noch irgendwie ein Widerstand etc. dran?

DANKE.

von Franz M. (franzl)


Lesenswert?

Besorg dir am Besten mal das Datenblatt:
http://pdfserv.maxim-ic.com/en/ds/DS18S20.pdf
Dort steht auf Seite 5, wie du den Sensor an deinen MC anschließen
musst.

von Hauke Radtki (Gast)


Lesenswert?

du kannst ihn einfach so anschließen ... zur sicherheit noch nen pullup
dran und fertig ... diese komische schaltung da mit 2 ports braucht man
nciht .. ich hab sogar mal irgendwo gelesen, dass jemand so nen teil ans
UART gepackt hat ... total sinnlos

von Peter D. (peda)


Lesenswert?

"ich hab sogar mal irgendwo gelesen, dass jemand so nen teil ans
UART gepackt hat ... total sinnlos"


Ganz und gar nicht !

Du hast Dirs bestimmt nicht angesehen.

Mit der UART geht das sehr gut.
Allerdings muß der TXD dazu open-drain sein, z.B. beim 8051 oder mit
ner Shottky-Diode entkoppeln.

Die Baudrate legt man so fest, daß beim 0x00 senden das Low etwa 60µs
dauert, beim 1-Bit dauert das Low dann etwa 7µs.


Peter

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.