DCC Lok Decoder mit Atmel Tiny45

Programmering Tiny45 voor de DCC locdecoder
Dit is een beschrijving voor het programmeren van de Tiny45 van de locdecoder. Voor de eerste
programmering is een „programmer“ voor Atmel AVR mikrocontrollers nodig. (AVRISP mk II,
parallel Dongel, STK200/500/600 Dongel, myAVR.de of iets dergelijks) en programmeer software.
Ik zal hier aan de hand van de ATMEL AVRStudio en een AVRISP mkII een uitleg geven. In de
plaats van de originele mk II kan ook een andere nagebouwde programmer met gelijke functies
gebruikt worden. Het programma AVRStudio kunt u bij Atmel downloaden. Voor de later benodigde
Bootloader programmering is een seriële adapter nodig, die met weinig moeite zelf in elkaar te
knutselen is.
Benodigde programmeer uitrusting:
1. AVR – programmer zie hier:
http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#ProgrammerVarianten
2. AVRStudio van Atmel zie:
http://www.mikrocontroller.net/articles/AVR-Studio
3. 1-wire Adapter zie hieronder:
4. AVRootloader.exe (is bijgevoegd)
De programmering gebeurd in 3 fasen.
Als eerste schrijven we een bootloader in onze Tiny45. Dit is een kleine software, die het ons later
mogelijk maakt het eigenlijke decoder-programma met eenvoudige hardware (een signaaldraad en
GND) in de Tiny45 te schrijven. Dit heeft als voordeel dat we later de kant en klare decoder ook op
deze eenvoudige manier (zonder programmeer adapter ,maar met slechts 2 draden) op elk moment
van een nieuwe programmaversie kunnen voorzien. Bij onze Tiny45 met zijn acht pootjes heeft dat
1
verder als voordeel dat we dan de RESET - Pin niet meer nodig hebben om te kunnen
programmeren (de AVR programmer heeft hem wel nodig). We kunnen hem dus verder gewoon als
een I/O pin gebruiken.
De tweede stap is dus de decodersoftware per AVRloader.exe in de Tiny45 te schrijven.
Als derde en als laatste moeten we nog de „Fuse-Bits“ van de Tiny45 instellen. Dat zijn de
configuratie instellingen waarmee men bepaalde eigenschappen van de Tiny45 in kan stellen
(Bijvoorbeeld welke taktbron, de reset-pin, en de minimale bedrijfsspanning…).
De AVR dient voor hij op de print gesoldeerd, eerst met een geschikte adapter geprogrammeerd te
worden.(zie ook: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment). We benutten
voor onze Tiny45 alleen de absolute minimale versie: 5V bedrijfsspannung met 100nF ontstoor
condensator, een 10 k ohm weerstand van 5V aan de resetpin (Pin1) en de verbindingen naar de
programmeer adapter.
We starten:
Als eerste starten we AVRStudio met de file T45lockdec-2.aps
2
Dit dient dan als volgt uit te zien:
Nu testen we of we de juiste motor-eindtrap uitgekozen hebben:
3
Als volgende verbinden we ons met de programmer (bij mij de mk II):
Nu kiezen we op de startpagina de Tiny45 uit:
4
Onder „Settings“ 250 kHz ISP Takt:
In uitleveringstoestand loopt de Tiny45 met 1MHz Takt en ¼ hiervan moeten we als als ISP
frequentie instellen. Nu op „Read Signature“ klikken en er moet links „Signature matches selected
device“ staan!
5
Wanneer dit allemaal functioneert hebben we onze Tiny45 op de juiste wijze via de AVR –
programmer met de PC verbonden en kunnen we verdergaan. Mocht er echter iets als „Warning
Signature … fout“ staan, nog eens een keertje de programmeer hardware controleren en alle
bovengenoemde stappen doorspitten!
Is alles in orde dan kunnen we verder gaan. We schrijven eerst een basistoestand in de „Fuse-Bits“.
Deze zijn in de T45lokdec-2.asm (Zie in afbeelding de groene tekst) gedocumenteerd. Je kunt direct
bij „EXTENDED/HIGH/LOW“ de waardes invullen (FE/D4/C2). CONTROLEREN! Daarna
slechts een keer op „Program“ klikken. De „Fuse-Bits“ worden nu geprogrammeerd en getest. In
het lichtgrijze venster dient overal OK te staan.
We hebben nu de taktfrequentie van onze Tiny45 op 8 MHz ingesteld, dat is de takt die de decoder
later gebruikt. We moeten nu echter voor de verdere programmering de ISP takt weer aanpassen,
dus nu weer op 1 of 2 MHz instellen:
6
De Tiny45 laten we draaien met de interne RC-taktgenerator. Deze kan ter verhoging van de exacte
taktfrequentie gekalibreerd worden. Atmel heeft hiervoor een referentiewaarde in de EEPROM en
in het programmageheugen opgeslagen. Deze waarde kunt u uitlezen en aan het programma ter
beschikking stellen waarna na het starten deze waarde in een correctieregister opgeslagen worden
kan. Bij mijn actuele decodersoftware is dit echter niet nodig dat de Tiny45 met exact 8 Mhz loopt.
Ik wil echter toch uitleggen hoe u deze waarde kunt uitlezen en waar hij tenslotte in de
decodersoftware opgeslagen is. Als eerste wordt de waarde uitgelezen in het tabblad
,,ADVANCED” voor 8MHz, op ,,READ” klikken en de waarde noteren op een papiertje:
7
Nu in de T45lokdec-2.asm in de laatste regel de waarde intypen ($ teken ervoor!!):
Nu op het blauw gemarkeerde symbool klikken en daarmee de file voor de Tiny45 aanmaken:
8
We openen nu de bootloader in AVRStudio (tabblad ,,PROGRAM” programmfile):
File AVRootloader.hex openen en dan op „Program“ klikken om naar de Tiny45 te schrijven:
9
Dit nu nog een keertje controleren a.u.b.!!
Hiermee is het eerste deel klaar. We hebben de FUSE-bits en de bootloader geprogrammeerd.
Nu gaan we de 1-wire verbinding met pin 3 (PB4) aansluiten en AVRootloader starten:
10
Nu de ,,Port” kiezen en bij FLASH de T45lokdec-2.hex en bij EEPROM de T45locdec-2.eep
uitkiezen. Nu op ,,Connect to device“ klikken en nu dient het volgend masker te verschijnen:
Mocht dit niet het geval zijn dan nogmaals de 1-wire verbinding en de seriële verbinding
controleren! Een USB naar serieel convertor is geen probleem. (zoals bij de com8).
Nu nogmaals op ,,Program”klikken. Het programmeren gaat nu zeer snel. Binnen een seconde is
alles gebeurd. Wie dit wenst kan nu nog op het tabblad ,,EEPROM Content”de geprogrammeerde
inhoud ophalen en zich bekijken, hier zijn de CV variabelen en de OSCCAL-waarde opgeslagen.
Je kunt hier nu ook geheugenplaats 64 (die nu op b1 staat) direct invullen.
11
Om het programma nu te verlaten op ,,Disconnect device”klikken. ATTENTIE!! U kunt nu niet
meer met de bootloader verbinden, waarom? Zie ,,decodersoftware veranderen”.
Ten slotte moeten we nog de reset-pin uitschakelen om een extra pin voor de rijrichting verlichting
te krijgen. We hadden dit ook al na het programmeren van de bootloader kunnen doen, maar dan
hadden we in geval van een fout de Tiny45 niet meer opnieuw kunnen programmeren met de ISP
programmer. Nu, tot slot weten we dat alles werkt en kunnen we met de de bootloader veilig een
nieuwe software schrijven.
We kiezen weer het ,,Fuses” tabblad en veranderen de High Fuse naar $54, dan klikken op
,,Program”. Er wordt nu nogmaals gevraagd of we dit ook werkelijk willen.
12
KLAAR!
De Tiny45 is nu geprogrammeerd en kan ingebouwd worden. Hij is nu standaard ingesteld op het
korte locadres 1.
Decodersoftware veranderen
Wanneer we later de decodersoftware veranderen willen doen we dat als volgt:
Als eerste wordt in CV55 een ,,1”geschreven. Nu is het mogelijk om met de AVRootloader.exe
opnieuw met de decoder te verbinden. Hiermee wordt ook verhindert dat door een dom toeval in
normaal bedrijf de decoder gewist wordt of overschreven wordt, bijvoorbeeld door een slecht
railcontact. Na het veranderen van de software moet CV55 weer op ,,0”gezet worden, tenzij men
ook een nieuwe EEPROM file schrijven wil, dan zou het inderdaad juist zijn!! U kunt ook onder het
tabblad ,,EEPROM Content” de CV waardes veranderen. In adres 0x000000 staat CV1 en dan
oplopend verder, tot dat bij 0x0036 CV55 staat. Na het veranderen met ,,Write to device”alles weer
terugschrijven!
13
Vertaling verzorgd door P Limpens http://members.home.nl/pamali/
De juistheid van de tekst komt uitsluitend voor rekening van Toralf Wilhelm www.toralfwilhelm.de
14