Det här är mitt allra första elektronikprojekt, och jag kanske bör tillägga att jag när jag började inte kunde någonting om elektronik, och definitivt ingenting om mikrokontrollers, men det är "learning by doing" som gäller.

Projektet gick ut på att helt från grunden skapa en klocka som binärt visar tiden med hjälp av lysdioder, och idag står projektet (nästan) klart. Jag använder mig av en PIC16F870 för att kontrollera hur mina LEDs ska lysa, och två knappar för att ställa in tiden (en för timmar och en för minuter/sekunder). Anledningen till att jag skriver nästan klart är att den inte verkar gå helt stabilt, och många omstarter kan behövas innan den börjar gå i början. Men när den väl börjar gå så brukar den gå ganska länge. Som bäst förvrängdes tiden med någon minut eller två på en månad, så även då går den lite ojämnt.
Till bygget:
Jag kom fram till att det gick att driva lysdioderna direkt från utgångarna på min μC, vilket förenklar konstruktionen betydligt, men eftersom pinne RA4 på μCn är open drain fick jag montera lysdioden baklänges där. Jag skapade således ett kopplingsschema i Eagle som kan ses på bilden nedan. Det övre högra hörnet är tillägnat knapparna som ska styra tidsinställningen. Där har jag använt en kondensator tillsammans med ett motstånd för att "avstudsa" knapparna, och sedan anslutit till en NOT-krets för att få schmitt trigger-funktionalitet då detta inte finns i roboten. (Den mystiskt formade saken i väntsra kanten är min egenskapade symbol för batterieliminatorskontakt


För att få tiden att hållas så exakt som möjligt har jag använt mig av en 10ppm kristall på 4MHz och ett knep som jag läste här på elektronikforumet. Det handlade om att man varje gång timer 1 utlöses lägger på ett värde, med en massa decmaler, och när heltalsvärdet passerar över en gräns nollställs det. På så vis blir inte alla sekunder exakt lika långa, men man slipper tidsförvrägning och kan justera med så hög upplösning som några sekunder per år genom att ändra värden i programmet. Mer om detta kan man läsa här.
Genom att placera "bitarna"(lysdioderna) på rätt platser i PICens portar kan jag enkelt överföra det binära värdet till lysdioderna (bara att kopiera värdet från tidsvariabeln till portregistret). Det var en hel del läsande i datablad och andra sidor för att till slut kunna förstå hur assembler fungerar men till slut tror jag att jag fick kläm på det hela! Programkoden lägger jag i ett separat inlägg efter det här då den tar upp mycket plats. (ramen är skapad av MPLAB).
Jag monterade ihop det hela på ett breadboard, och efter en hel del felsökning, med bland annat obunden MCLR etc. fungerade det faktiskt! Den visade tiden. Tyvärr hade jag en del problem med att den i starten inte alltid vill starta programmet från början. Ibland startar den alla röda LED (förutom RA4) tända, ibland med enbart RA4 tänd, ibland utan några, ibland startar den och går rätt ett tag för att sedan stanna upp. När den stannat fungerar det heller inte att trycka på knapparna. Men ibland så fortsätter den som den ska. Är det någon som har någon fundering på varför det blir så? Här är lite bilder från denna fas:
Efter några månaders tester kunde jag konstatera att processorn heller inte verkar gå helt stabilt, den tappar inte lika mycket mellan två tidsperioder, så en justering av programkoden räcker inte där. Vad kan nu detta bero på?
Hur som helst tyckte jag att det var dags att sätta ihop det hela på ett kretskort där det sitter fast. Eftersom jag inte orkar sätta mig in i att etsa egna bestämde jag mig för att experimentkort. Sagt och gjort, så var det hela monterat, men fortfarande finns samma instabilitetsproblem. Jag känner själv att jag har kört in i en återvändsgränd, men hoppas att det finns någon vänlig själ som skulle kunna ge en hint om vad det kan handla om. Här är också några bilder på den färdiga klockan:
Hoppas att det har varit trevlig läsning!