[HowTo] Thermometer aan de parallelle poort![]() | ||
![]() Inleiding: Een paar weken geleden heb ik een oud projectje opnieuw opgepikt, ik wou namelijk op een of andere manier de temperatuur uitlezen op de computer. Omdat ik graag zelf wat onderzoek/aankloot en het natuurlijk zo goedkoop mogelijk wil, ben ik op zoek gegaan naar een goedkope en makkelijke manier om zelf een digitale thermometer aan te sluiten op de parallele poort. Na wat googlen kwam ik bij deze pagina, er word uitgelegd hoe je een DS1722 (van Maxim) aan kan sluiten en de temperatuur uit kan lezen. De sensor heeft een redelijk groot bereik en is geschikt om bijvoorbeeld de temperatuur in huis/buiten, of natuurlijk in je pc te meten. Let op: het grote nadeel van dit project is dat er zo goed als geen software is tot nu toe, maar verderop in deze howto zal ik uitleggen hoe je de DS1722 moet aansturen/uitlezen en dan zul je zien dat dat helemaal niet zo moeilijk is. Benodigdheden:
![]() Vrij vanzelfsprekend De software: Op de eerder genoemde pagina staat ook een stukje voorbeeldcode:
Dit is het eerste stukje software dat ik geschreven heb (ik zal in de loop van de week een betere versie schrijven): TempTool het programmatje laat de temperatuur zien en schrijft het weg naar log.txt (deze kun je in bijvoorbeeld excel inlezen) Let op: je hebt dlportio nodig. ik heb deze software gemaakt en getest op 2 pc's, maar dat geeft natuurlijk geen garantie dat hij het bij jouw doet, is dat niet het geval dan zou ik het graag horen Hoe werkt het nou: (datasheet van de ds1722 is hier te vinden) Ik zal proberen uit te leggen hoe het werkt, als je dit snapt is het niet erg moeilijk om zelf een stukje software te schrijven. Je moet wel even weten hoe de parallele poort en het binaire systeem werkt, als je dat niet weet doe je er goed aan om dit even te lezen. Als je weet hoe dat werkt dan moet je even opletten dat we data serieel gaan versturen over de parallele poort. Door SERMODE(pin7) te verbinden met Vcc word er gebruik gemaakt van SPI-communicatie. belangrijk is dat we data MSB-first versturen, dit betekend dat als we 1111 0000 zouden willen versturen beginnen we met de meest linkse 1. Bij het serieel versturen van data gebruiken we 1 draadje/pinnetje om alle data serieel te versturen (en een andere om te ontvangen). er zijn 2 andere pinnetjes die ons hierbij helpen: de SCLK en de CE. de CE zorgt er voor dat de chip weet dat we tegen hem aan het praten zijn, en de SCLK zorgt er voor dat we weten wanneer we een 0 en wanneer een 1 lezen/schrijven. een voorbeeld van hoe het gaat: we gaan 1 byte schrijven, namelijk 0000 0001. we doen dat als volgt: -CE hoog (pin 8 op de printerpoort gaan naar hoog, de DS1722 weet nu dat we met hem gaan praten) dan gaan we een voor een de bits versturen, MSB-first, dus eerst de eerste nul -SDI (pin 4(D2)) moet laag zijn, we gaan immers een 0 versturen -CLK (pin 3(D1)) hoog --Even wachten -CLK laag Dit herhalen we 7 keer (want we schrijven 7 nullen) en dan gaan we een 1 schrijven: -SDI (pin 4(D2)) moet hoog zijn, we gaan immers een 1 versturen -CLK (pin 3(D1)) hoog --Even wachten -CLK laag -SDI laag -CE laag (we zijn klaar voor nu) Pas Op: pin 2 op de parallele poort (D0) moet altijd hoog blijven, zodra deze laag word heeft de DS1722 geen stroom meer en word hij gereset. Ik hoop dat je nu een beetje duidelijk is hoe we 1 byte naar de DS1722 schrijven. kijk ook eens naar figuur 4 en 5 op blz 7 van de datasheet. We schrijven echter nooit alleen 1 byte naar de DS1722, zoals in de datasheet te lezen is moeten we eerst het adress schrijven (1 byte) om daarna bijvoorbeeld de temperatuur uit te lezen of settings te schrijven. om (het laatste deel, er zijn namelijk 2 delen) van de temperatuur uit te lezen moeten we eerst het adress 0000 0001 sturen, dat gaat dan dus zo: -CE hoog {7 keer een nul: -SDI laag -CLK hoog --Even wachten -CLK laag } {1 keer een één: -SDI hoog -CLK hoog --Even wachten -CLK laag -SDI laag } nu hebben we de adress-byte gestuurd en gaat de DS1722 ons 1 byte aan data terugsturen: {8 keer (1 keer voor elke bit): -CLK hoog -Pin 12 uitlezen (is het een 1(hoog) of een 0(laag) -CLK laag } we zijn klaar dus: -CE laag Ik hoop dat dit een beetje duidelijk maakt hoe het werkt (zoniet dan hoor ik het wel voor de handigheid kun je hier de sourcecode van mijn programmatje downloaden (visual basic, let niet op de langzame timings en mijn slordige inefficiente programmeerkunsten). Voorbeeld: ![]() Grappig is dat je kunt zien wanneer mijn moeder de lamp aan heeft gezet en achter de computer is gaan zitten Alternatieven: Natuurlijk zijn er nog tal van alternatieven om temperatuur uit te lezen op je computer.
Edit: paar foutjes verholpen |
[ Voor 255% gewijzigd door Anoniem: 44568 op 02-12-2004 18:28 . Reden: tweakers debugged ]