www.mikrocontroller.net

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


Autor: Sven Scholz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja okay, das werde ich mir anschauen...

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Franz Mayr (franzl)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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.