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.
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
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
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:
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.
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.
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
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.