Motivering
Det hela började med att min bil (en BMW 316 -87) har haft en tendens att gå lite varm och jag ville ha bättre koll på exakt hur varm den går. De vanliga kylvattenmätarna har en skala som man kan tyda med ca. 5°C upplösning, och man har inte någon bra koll på noggrannheten. Därför valde jag att använda byta ut originalmätaren mot en DS1820, med upplösning på 1/8°C och noggrannhet på 0,5°C. Samtidigt tänkte jag att det kunde vara intressant att se motorvarvtalet, och då det inte finns någon varvtalsmätare som standard, så lade jag samtidigt till denna funktionalitet till "datorn".
Hårdvara
Det hela är uppbyggt runt en Atmel ATmega48. Denna sköter alltså om att läsa in värdena från temperaturgivarna och varvtalet, samt att visa värdena på skärmen. Temperaturgivarna är kopplade till varsin normal ingång, och varvtalssignalen är kopplad till ICP1, som triggar på externa händelser.
Spänningsdelen är grundad på Skyddad 5V matning, men med en del utelämnade komponenter. Ifall utelämnandet av några av komponenterna var riktigt smart kan man fråga sig. Ibland (men relativt sällan) blir skärmen svart, och endast "omstart" hjälper. Denna defekt skulle kunna bero på dålig matning.
Varvtalssignalen tas direkt från tändspolen och begränsar till ca. -0,6V - +5,6V med hjälp av två dioder. Därefter går den in i ett lågpassfilter (RC) som filtrerar bort störningar och "ringning". Efter detta går signalen via en Schmitt-trigger in till mikrokontrollern. Jag gjorde en miss när jag designade denna del, och signalen var inte tillräckligt stark för att driva Schmitt-triggern (en 74HS14). När jag väl hade lokaliserat problemet, var det dock relativt lättlöst. Jag hittade en CMOS Schmitt-trigger med samma "pinout", så det var bara att byta till den, så fungerade allt fint.
Displayen är av "inverterad" typ, vilket innebär att det är själva tecknen som lyser istället för bakgrunden. Ljusstyrkan kan regleras från en PWM-utgång på mikrokontrollern.
Mjukvara
Programmet är skrivet i C och kompileras med WinAVR. Bortsett från några funktioner från standardbilblioteket har jag skrivit allting själv. Koden för displayen och 1-wire kommunikationen är återanvänd från tidigare projekt. Tyvärr stötte jag på problem med programminnesstorleken på ATmega48:an, så jag har gjort vissa kompromisser för att få allt att rymmas. Jag har t.o.m. 4 bytes kvar att använda för framtida funktionalitet

Bilder
Det är väl för bilderna ni öppnade tråden, så lite sådana måste jag väl också visa
