Deel III : De microcontroller
Ik heb ooit wel met MicroChip controllers gewerkt maar sinds een paar jaar werk ik uitsluitend met Atmel AVR’s. Deze schakeling heeft dan ook zo een AVR, een ATtiny85 om precies te zijn.
De ATtiny85 is een 8 pin IC. Hij kan tot 6 polivalent bruikbare IO lijnen leveren (AD converter, comparator, PWM uitgang, interrupt ingang, clock aansluiting, …).
Ik blijf het ongelofelijk vinden, een 8 bit 20MHz RISC CPU (1 instructie per clock cycle voor bijna alle instructies) en dus bijna 20 MIPS en dan nog een zak aan periferie inclusief een eigen ingebouwde clock en dat allemaal In System Programmable in een dikke seconde en bijna onbeperkt heerprogrammeerbaar. Toen ik in de elektronica stapte in 1980… kon je daarmee een ganse eurocard vullen en was je allicht ook meer dan 70 euro armer.
Wij gebruiken hier 4 io-lijnen van de AVR.
1) De eerste is een ingang die we gaan gebruiken om de lengte van de binnenkomende RC puls te lezen.
2) De tweede is een ingang aangesloten op S1 die we gaan gebruiken om de controller aan te passen aan de zender/ontvanger-combinatie. In essentie komt het erop neer dat we de neutrale stand, vol vooruit en vol achteruit in de EPROM van de AVR programmeren.
Dat gaat als volgt in zijn werk. Je zet je zender aan en laat de gas-knuppel in de neutrale stand staan. Je houdt S1 ingedrukt en sluit de voedingsspanning aan op de controller. Je laat S1 los en wacht tot je de aangesloten motor één keer hoort “biep” zeggen. Je zet de gas-knuppel op de zender op maximum en drukt nog eens op S1. Je wacht tot de motor 2 maal “biep” zegt. Tenslotte zet je de gas-knuppel op maximaal achteruit en je drukt nog eens op S1. Je wacht tot de motor 3 keer “biep” zegt. Voedingspanning eraf en er weer op…klaar !
Op mijn eerste controllers was dat niet voorzien en dat heeft mij heel wat extra werk gekost… en veel frustratie voor een paar gebruikers.
2 en 3) Verder hebben we nog 2 uitgangen nodig die we beiden gebruiken voor PWM signalen OC1B en OC1A. De ene is de vooruit en de andere is de achteruit. Deze 2 pinnen heb je niet te kiezen, het moeten de PWM uitgangen zijn. De andere pinnen kan je wel vrij kiezen. Ik heb dat gedaan in functie van de opbouw van de printplaat en heb wel een geslaagde poging gedaan om pin PB5 NIET te gebruiken. PB5 is ook de reset en als je die als IO pin gebruikt dan kan je geen In-System-Programmatie meer doen.
Ik laat de AVR draaien op de interne RC oscillator (8MHz). Die is voldoende stabiel voor onze toepassing. Mocht hij van een koude winterdag naar een hete zomerdag toch een beetje te veel variatie vertonen dan zullen we de controller wel effe herprogrammeren. Dat is in 20 seconden “gepiept”.
De programmatie van de AVR zal ik in C doen. Al ben ik er nog niet helemaal uit of ik dat programma ook ga publiceren. Ik speel met het idee om het gratis te leveren (in een AVR die ik dan wel zowat aan kostprijs plus portkosten lever aan DRG leden. Maar dat ik voor “vreemden” iets aanreken om een geprogrammeerde AVR te leveren. In ieder geval gratis voor DRG leden, laat ik daar geen misverstand over ontstaan.
Wat ik in ieder geval wel zal publiceren is een omschrijving van wat de code doet. Iets als initieer alle io pinnen zet de timer klaar, meet de inkomende puls…in een vorm van speudo-BASIC.
Voila, daarmee is de ganse schakeling zowat omschreven. Ik zou natuurlijk nog veel meer in detail kunnen gaan over de keuze van de FET’s, de keuze van Gate weerstanden, de beschrijving van de HIP’s interne werking… ik denk dat de kenner er zelf wel achter komt en dat het de leek geen bal kan schelen.
En dan zou ik graag afsluiten met een foto van een afgewerkte controller…om de goesting op te voeren…
Morgen een uitleg van wat je hier ziet.
Groetjes
Jan