Hallo Leute! Ich möchte mit einem "Atmel Atmega 8535" den Temperatursensor "DS 1820" (1-Wire) auslesen. Dafür muss ich den Pin sowohl als Aus- und Eingang verwenden. Da das ganze ziemlich zeitkritisch ist, würde es mich interessieren, wie lange (wie viele Takte) der folgende C-Befehl benötigt: DDRC |= 0x10; // PC4 als Ausgang Und wie viele Takte benötigt das setzen eines Pins (bzw. Abfragen)? PINC &= ~0x10; // pull DQ low to start timeslot Danke im voraus! MfG, Gerald Heilmann
Erzeugten Assembler Code anschauen und Datenblatt lesen...
Schau dir daas .lst-File an, da siehst Du, wie der Compiler das übersetzt. WinAVR macht daraus ein set bzw clr, so dass im nächsten Takt der Ausgang geändert ist. Der Prozessor ändert das Signal am Ende eines Zyklus und fragt Eingänge am Anfang ab. Folgt also das Zurücklesen direkt auf das Schreiben, sollte mindestens ein Taktzykus dazwischen sein. Der C-Compiler wirds aber kaum anders machen, in Assembler sollte man das evtl. aufpassen. Uwe
"set" setzt T-Bit im SREG "clr" setzt ein Register auf Null Mit SBI und CBI wird das eher was. ...
Vielen Dank für eure Antworten! Eine schnelle, kompetente Hilfe bekommt man hier :) - macht weiter so ;)
Bei 1-Wire must du die Pins als open-drain verwenden, d.h. der PORTx-Pin wird einmalig auf 0 gesetzt und nie wieder angerührt. Zum Senden einer 0 wird dann das DDRx-Bit auf 1 gesetzt. Eine aktive 1 darfst Du nie senden. Peter
Hallo willst du es komplett selbst programmieren oder darf es schon etwas gutes fertiges sein?? http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html Gruss Jens
@Peter: mir scheint für parasitären Betrieb des Sensors eine 1 zeitweilig notwendig zu sein. Der Pullup ist sonst während der Messung etwas dünn.
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.