Total genomgång av mjukvaran och full funktion från alla delsystem

Arbetet med skördardatorn 2.0 fortskrider med god fart. Nu har jag full funktion från både LCD-skärmen och de tre räknar-kretsarna.

På skördaraggregatet sitter det tre stycken fyrkantsvågsenkodrar. Det sitter en på längdmätningshjulet och en i vardera kvistkniv som också mäter diametern på stocken. Varje enkoder ger i från sig två pulståg när enkodern roterar. Genom att räkna pulserna i tåget vet man hur långt enkodern har roterat och på grund av att pulserna är fasförskjutna kan man se åt vilket håll den roterar. För dubbel upplösning kan man även välja att räkna både stigande och fallande flanker på pulserna.

Denna typ av enkoder kan man ganska enkelt koppla mot en mikrokontroller. Man sätter då att det ena pulståget genererar ett avbrott eller “interrupt” i koden och då kan man kolla värdet på den andra signalen. Dock kan det bli mer problematiskt om man som i detta fall har tre enkodrar med relativt hög frekvens som man vill hålla koll på samtidigt som man har en LCD-skärm som man vill ha hyffsad refresh-rate på.

Lösningen på detta problem är att använda separata räknarkretsar som kan hålla järnkoll på enkodrarna helt på egen hand. Mikrokontrollern kan sedan på ett eget bevåg fråga räknarna om deras värde helt utan att störa räkningen (man har ett räknar-register och ett läs-register), inte heller belastas mikrokontrollern onödigt mycket.

Räknar-kretsarna jag använder är av typen LS7366R och tillverkas av företaget LSI. Det är en väldigt praktisk krets som kommunicerar med mikrokontrollern via en enkel SPI-bus och med separata “Slave Select”-signaler kan man ha i princip hur många räknare som helst inkopplade på samma bus.

Den ursprungliga mjukvaran till skördardatorn skrev jag runt år 2008 och de var egentligen mitt första stora embedded-projekt. Eftersom jag har lärt mig en hel del om mjukvaru-utveckling sedan dess så fanns det en stor potential till förbättring. Denna potential har jag utnyttjat de senaste dagarna och jag har gått igenom precis hela mjukvaran till datorn och uppdaterat och finslipat koden.

Mjukvaran är skriven i språket C och jag använder kompilatorn XC8 från Microchip. All källkod har jag lagt upp på github så gå gärna in och ta en titt där. Det ska väl erkännas att koden i dagsläget inte är så bra kommenterad, men jag försöker skriva själv-dokumenterande kod så långt det är möjligt och det är på min TODO-lista att kommentera lite till framöver.

I övrigt har jag gjort en ny startskärm och uppdaterat layouten på skärmen som visar mätdata. Jag har maximerat storleken på längd- och diametersiffrorna eftersom det är huvudinformationen på skärmen. Sedan har jag lagt till en kolumn längst till vänster på skärmen som visar upp till tio ytterligare variabler. Här kommer jag t.ex ha räknare som räknar hur många “kap” man gjort med aggregatet eller summerar totala längden timmer. Variablerna sparar jag i EEPROM-minnet på mikrokontrollern så lagras informationen även när datorn är avstängd.

Nedan är en bild på den nya startskärmen.

Harvester Computer startskärm

Ungefär så här kommer skärmen med mätdata se ut. Notera hur siffrorna utnyttjar i stort sett hela skärmhöjden. Enheten på båda värdena kommer vara centimeter.

Harvester Computer mätskärm