Stap 10: Firmware - main-v1.0
Zoals vermeld, zal de eerste versie van de code Lees de schaal LCD-scherm en vervolgens deze gegevens naar een lokale LCD-scherm te schrijven. Dit is slechts een bewijs van concept... herschrijven de gegevens van het ene scherm naar het andere is vrij zinloos! Ik denk dat ik heb gereageerd de broncode goed genoeg voor u om te begrijpen wat er gebeurt als je helemaal vertrouwd zijn met AVR code, maar ik zal ingaan op een paar van de fijnere punten.
Een paar bestanden zijn opgenomen:
- modules/avr.h - ik neem dit in elk AVR project werk ik op
- modules/lcd/SerLCD_2x16.h - functie Prototypes en macro's voor het schrijven naar de lokale LCD-scherm
- definitions.h - al onze belangrijkste macro's en definities
- util/delay.h - eenvoudige vertraging routines
De hardware modules zijn geconfigureerd in de functie van de initialize_AVR() gevonden op lijn 486.
Analoge Comparator
De analoge comparator is geactiveerd op de stijgende rand van COM 1. Hierdoor kunnen vervolgens Timer 0 die de dalende rand van COM 1 en de andere 3 COM-lijnen simuleert.
Timer 0
Timer 0 is ingesteld om te leiden tot een ISR elke 0.2ms. Een teller binnen de ISR gebeurtenissen plaatsvinden na zo lang zal veroorzaken (namelijk ooit 4ms), en een instructie switch wordt gebruikt om verschillende acties uit te voeren voor elke actieve gesimuleerd COM lijn. De staat van de LCD-pinnen wordt geregistreerd voor elke COM-regel, en aan het eind van de cyclus, de Timer 0 is uitgeschakeld.
LCD-lezing
De Lees-cyclus is gestart door de functie readLCD() op lijn 311. Deze functie eenvoudig kunt de analoge comparator en zit in een tijdje herhalen totdat de Lees cyclus is voltooid. De functie van de decodeDigit() gevonden op lijn 321 eigenlijk verandert alle pin staat gegevens in numerieke getallen voor elk van de LCD-cijfers.
LCD schrijven
De LCD schrijven Routines gevonden basisgewicht van lijn 407 werden geschreven door mij een tijdje geleden. Ze kunnen ook worden gevonden in de map modules/lcd, maar ik gekopieerd alleen de functies die ik gebruiken om het hoofdbestand wilde, dus ik was niet het opstellen van bestanden vanaf meerdere locaties. Ik denk dat ze zijn vrij zelf verklarend.
Main
In de Main-functie, het AVR-apparaat is geïnitialiseerd, en vervolgens verschijnt een lus voor eeuwig. Binnen deze lus, het LCD-scherm wordt gelezen, en die gegevens is gedecodeerd en afgedrukt op het lokale LCD-scherm voor het testen. Cijfer 4 overgeslagen, en ik maak je geen zorgen over de modus van de klok van de schaal omdat ik ben niet de controle van de AM/PM LCD pin segmenten.
In een vorige versie van het circuit, was ik toezicht op alle van de LCD-pins, vandaar mijn vermogen om af te drukken van de klok modus gegevens; echter de gepresenteerde firmware niet. Merk ook op het "&" symbool in de cijfers als gevolg van de gebruikte af te drukken op dit LCD scherm stoppen mij uit het lezen van een bepaalde schaal LCD-pin seriële verzenden lijn.