Digitale uitlezing voor een Draaibank

Overzicht
Een leuk AVR projektje is de bouw van een digitale uitlezing voor een draaibankje.  Er stonden twee mooie incrementele positie opnemers met een resolutie van 0.01mm ter beschikking.  De opnemers werken op 5 volt en geven het gebruikelijke A/B kwadratuur signaal af. De software is geschreven in assembler en draait op een AVR Tiny2313..  Ik gebruik AVR studio en PonyProg om de code in de AVR te 'branden'. 

Het programma is vrij simpel. 
Een van de timers wordt gebruikt om een interrupt routine te starten.  De interruptroutine kijkt naar de status van elke encoder en past indien nodig de opgeslagen posities aan.  Na initialisatie van het display, RAM datagebied, timers en interrupt belandt het hoofdprogramma in een lus, waarin o.a.de knopjes in de gaten worden gehouden. Is er een knopje ingedrukt, dan wordt de opgeslagen positie voor de bijbehorende as op nul gezet.  Verder wordt in de lus de (als binair getal) opgeslagen positie omgezet naar een rijtje cijfers die op het display worden weergegeven.  De omzetting wordt natuurlijk vaak onderbroken door de interrupts, maar dat geeft niet.  Het doorlopen van de lus gaat vrij snel (enkele milliseconden) dus de uitlezing loopt hoogstens enkele miliseconden achter op werkelijkheid.

menuEr is ook een mogelijkheid om de assen te configureren door bij het opstarten de beide 'ZERO' knopjes ingedrukt te houden.  Er verschijnt dan steeds een menuregeltje waarbij je een parameter kunt instellen.  Je kunt kiezen uit: uitlezing normaal / geinverteerd en 1x / 2x , (radius/diameter).  De configuratie waarden zijn opgeslagen in de interne EEPROM en worden bij het starten van het programma opgehaald.  




De hardware is ook niet echt ingewikkeld te noemen.  Het schema wat je hier vindt is met Eagle gemaakt.  Een afdruk ervan vind je hier.  De plaatjes herbij geven een indruk van de binnenkant van het kastje.

insideprint













Zoals je misschien kunt zien is de AVR gewoon vastgesoldeerd en zit er geen ISP (programmeeer) aansluiting op de print.  De software is ontwikkeld (en gebrand) op een  ontwikkelboardje dat ik ooit gemaakt heb.  Op dat board zitten een paaar ledjes, schakelaartjes, potmeters en een LCD aansluiting die met jumpertjes op de verschillende processor pennen kunnen worden aangsloten.  Makkelijk om e.e.a. uit te testen, en als het dan werkt gewoon de configuratie nabouwen in de definitieve versie.  In dit geval werkte die meteen de eerste keer!