Firmware aanpassen van de Atmel ATmega8-16 voor de Modulo D (Elektor Maart 2010)
Ik ben zo'n oude knar die gewoon is om met analoge elektronica te spelen. Maar het Modulo D project leek me wel leuk. Toen ik op het probleem ben gebotst van de volumeregeling, heb ik wat tijd geïnvesteerd om dit in orde te krijgen. Daarna heb ik even dit tekstje geschreven, omdat misschien iemand anders zich ook niet zo sterk voelt in het programeren van een µP. Al bij al is het echt niet moeilijk, maar het is wel handig als je geholpen wordt met een kleine leidraad.
Vooreerst moet je de firmware hebben die je wilt aanpassen. Deze kan je gewoon downloaden van www.elektor.nl/090563. Het gaat hier over verschillende files, maar enkel de files met extensie .c en .h en Makefile hebben belang.
common.h; iic.c; iic.h; lcd.c, lcd.h; main.c; main.h; Makefile; max9744.c; max9744.h; rc5.c; rc5.h; tda7449.c en tda7449.h. Al deze files moeten in dezelfde directory op je PC staan.
Je kan nu deze files gemakkelijk aanpassen in Programmers Notepad, die mee wordt geïnstalleerd wanneer je WinAVR-GCC (ook deze is gewoon gratis te downloaden van het internet).
In mijn geval had ik problemen met de RC5-codes van de volumeregeling. Ik vond geen enkele stand op mijn Universal Remote Control (Vivanco UR12 EDP-nr 21634), zodat ik moest overgaan naar een aangepaste firmware voor de Modulo D. Ook wou ik de Gain, die bij default op 0 staat ingesteld (geen extra versterking van de input), optrekken naar een hoger niveau. Deze waarde wordt namelijk niet in een geheugen gestoken, zodat de gain telkens weer op 0 staat nadat de spanning werd onderbroken (lees versterker uit gezet).
Deze aanpassingen zijn niet zo moeilijk te realiseren. De gain heb ik opgelost in de file main.c. Daar zie je ergens in het midden van de file dat het volume wordt ingesteld op 22 (35%) met het commando “max9744setVol(22);”. Ik heb onder die regel een regel bij gezet die de gain vast instelt op het maximum met: “TDA7449setGain(30);”.
Wat betreft de afstandsbediening was het iets moeilijker, want ik wist niet wat de code was die mijn universele afstandsbediening uitzond wanneer ik het volume probeerde aan te passen. Alle andere toetsenwerkte wel indien ik mijn Vivanco UR12 instelde op code 293 (Philips CD). Het is echter niet zo’n ramp dat je de specifieke code voor de volume niet kent, want er is al iets voorzien in de originele firmware van de µP. In dezelfde file main.c staat er een stukje programma uitgecommentarieerd. Het gaat hier over het stukje dat alle RC5 commando’s die de Modulo D binnen krijgt weergeeft op zijn display.
Het begint met “//Uncomment for displaying RC5 data”. Als je op de volgende regel de “/*” weg doet, en je doet 11 regels verder de “*/” ook weg, dan wordt dit stukje programma mee gecompileerd. Dit moet uiteindelijk wel uit de definitieve versie verwijderd worden, maar als tussenstap is dit een enorm hulpmiddel. Ik kon gewoon zien dat de volume-sturing van mijn afstandsbediening niet 20,16 en 20,17 was, maar 0,16 en 0,17. Deze waarden moest ik dan ook aanpassen in de file main.h:
#define VOL_P 0,16
#define VOL_M 0,17
Indien je nog ander zaken wilt aanpassen, moet je dat maar doen. Je kan b.v. gerust de tekst, die op het display verschijnt, aanpassen naar wat jou belieft. Een beetje pimpen dus. Dit doe je ook in de file main.c. Deze teksten vind je bij:
#define TEXT_URL “www.elektor.com”
#define TEXT_TITLE "ClassD Amplifier"
Die kan je aanpassen, maar vergeet niet dat die tekst telkens maximaal 16 karakters lang mogen zijn.
Nu dat alle aanpassingen gedaan zijn, moeten we dit programma gaan compileren. Zorg er wel eerst voor dat alle aanpassingen opgeslagen zijn, want anders worden deze aanpassingen niet in rekening genomen. Het compileren gebeurt ook vanuit Programmers Notepad. Zorg ervoor dat je op de file Makefile staat en ga dan in “Tools” kiezen voor “[WinAVR] Make All”. Onderaan je scherm zie je dat de PC even bezig is met o.a. folders aan te maken. Deze folders staan onder de plaats waarin de files staan van dit project. Hier vind je dan uiteindelijk de file …\target\atmega8\ClassDV01.00.hex. Dit is uiteindelijk de firmware die je in de µP wilt steken.
Ik heb gebruik gemaakt van een Dataman 40 Pro om deze hex-file uiteindelijk in de Modulo D te krijgen. Natuurlijk kan je dit ook met andere programmers, zolang ze een ISP-poort hebben. Deze Dataman 40 Pro heeft zo’n ISP-poort, langswaar je de firmware in de werkende Modulo D kunt inladen. Je moet de µP dus niet lossolderen om de firmware erin te duwen. Hiervoor is op de Modulo D op het kleinste printje 6 gaatjes voorzien die gerangschikt zijn in twee rijen van drie. Als je het printje zó draait dat de cinch-aansluitingen naar je toe wijzen, en dat de componenten naar onderen wijzen, dan zie je deze 2 rijen van 3 aansluitingen aan de rechter bovenkant. De bovenste rij aansluitingen zijn, van links naar rechts: Vcc; MOSI; massa. De rij daaronder bestaat uit (v.l.n.r.): MISO; SCK; RESET.
Deze 6 aansluitingen moet je overbrengen naar de ISP-aansluiting van je programeertoestel. In mijn geval de Dataman 40 Pro. Deze heeft een 10-pins ISP.
6-pins ISP 10-pins ISP
2 4 6 2 4 6 8 10
1 3 5 1 3 5 7 9
1 MOSI 1 Vcc
2 Vcc 2 SCK
3 SCK 3
4 MOSI 4 MISO
5 RESET 5
6 massa 6 MOSI
7 massa
8 Reset
9
10
Ik moest dus een adapter maken tussen de 6-pins ISP van de Modulo D en de 10-pins ISP van de Dataman 40 Pro:
6pins – 10pins
1 – 4
2 – 1
3 – 2
4 – 6
5 – 8
6 – 7
In het bijgeleverde programma van de Dataman moet je de juiste device selecteren namelijk de : “Atmel ATmega8A (ISP)”. Zorg er zeker voor dat je de juiste kiest, met de vermelding ISP. Doe je dat niet, dan verwacht de Dataman dat je een los IC hebt. Wij werken hier echter met ISP (In System Programming). Dit houdt in dat je de µP gaat programmeren terwijl het in een draaiend systeem zit.
Ik heb een paar aanpassingen moeten doen aan het instellingsscherm, omdat de defaultwaarden niet onmiddellijk goed zijn. De belangrijkste zaken die je moet veranderen zijn de frekwentie (8 000 000Hz) en de selektie dat je de Flash wilt aanpassen. Voor dat laatste heb je de keuze uit Flash, EEPROM en Fuses. De rest van de parameters mogen gerust blijven wat ze waren.
Daar
Daarna moet je natuurlijk je ISP-kabel verbinden met de Modulo D en deze laatste opstarten.
Dan kan je beginnen met de huidige gegevens uit de flash te verwijderen.
Gebruik hiervoor de Erase-knop bovenaan rechts in het programma. Het programma zal daarna nog even een verwittiging sturen, en daarna vragen of je een volgende µP wilt doen, maar daar moet je niet op ingaan, tenzij je er een hele reeks Modulo D’sop de markt wilt smijten .
Nu moet je jouw hex-file (…\target\atmega8\ClassDV01.00.hex ) laden via de Load-knop bovenaan links. Hiermee steek je deze hex-file enkel in het geheugen van het programma.
Vervolgens moet je op de Program-knop, bovenaan rechts, drukken, waardoor de Modulo D geladen wordt met jouw firmware. Uiteindelijk zal het programma opnieuw vragen of je nog meerdere µP wilt programmeren.
Als dit achter de rug is, moet je eerst de Modulo D spanningsloos zetten en vervolgens de ISP-verbinding loskoppelen van de Dataman.
Als je nu de Modulo D opnieuw opstart kan je jouw programeertalent bewonderen.
Veel plezier met het pimpen van je versterkertje. Ik heb alvast al behoorlijk wat uren geluisterd naar en genoten van de Modulo D.
Mijn dochter heeft stiekem mee geluisterd en hem al opgeëist om haar iPOD in haar kamertje te kunnen beluisteren. Laps, ik ben mijn Modulo D al kwijt

.
Als extraatje heb ik het word-document erbij gevoegd omdat ik vermoed dat sommige layouts en tekeningen niet perfect gaan overkomen in gewone tekst. Ook mijn eigen firmware met de aanpassingen zoals vermeld in de tekst heb ik aangehecht.