Home › FORUM › Audio › Modulo D - Volumeprobleem opgelost

FORUM

Log in om antwoord te posten of de notificatie-service te gebruiken.

1   2     volgende

Onderwerp: Modulo D - Volumeprobleem opgelost

Author Post

fminne

9 berichten

Op bezoek
Op bezoek

Read post 13-05-2010 19:41

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.

AttachmentFirmware aanpassen van de Atmel ATmega8.docx

AttachmentClassDV01.00.hex


Bericht bewerkt door fminne op 14-05-2010 06:23

Bericht bewerkt door fminne op 14-05-2010 07:36

Anneo

1273 berichten

Expert¹
Expert¹

Read post 13-05-2010 22:34

Amai,nogal bezig geweest!
Mooi dat het zo werkt.Toch raar dat de afstandsbediening voor volume een ander toestelnr.geeft dan voor de andere toetsen
(0 ipv 20).Zou betekenen dat verschillend toestellen niet afzonderlijk geregeld kunnen(mod d zachter,tv zachter)
Als dat zo is moet ik mijn prog.(mod d met)aanpassen,gaat van 1 zapper-adres voor alle toetsen uit.
Moet je nu de gevoeligheid van de ingang(en) aanpassen met weerstanden of een pot.m.? Trouwens hoe kies je ingang 1/2?
Doet het display het zo als het hoort?De init ervan deugt,lijkt mij,niet. Ook lcd.h aangepast? daar staat nl.
#define LCD_VOLTAGE 3 daar waar die bij de module op 5V zit.

Anne

Bericht bewerkt door Anneo op 13-05-2010 23:16

Schueler

1330 berichten

Expert¹
Expert¹

Read post 13-05-2010 23:30

fminneAls 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.


Jammer dat het in word formaat is... en dan nog wel word 2007
Zou je het ook kunnen posten als pdf? Dan kan iedereen het lezen


Ben

fminne

9 berichten

Op bezoek
Op bezoek

Read post 14-05-2010 06:47

Ben,
Je hebt volkomen gelijk. ziehier het document in pdf-formaat.

Frank

AttachmentFirmware-aanpassen-van-de-Atmel-ATmega8.pdf

fminne

9 berichten

Op bezoek
Op bezoek

Read post 14-05-2010 06:53

Anne,
Het is inderdaad raar dat die afstandsdieng, hoewel hij staat ingesteld om CD-informatie door te sturen (code 20), toch beslist om enkel het volume met code 0.
De gevoeligheid van de Modulo D moet je niet aanpassen met weerstanden te veranderen, maar gewoon door de gain bi te sturen via de afstandsbediening (toesen: Rew en FF).
Het dispaly doet alles zoals ik het verwacht. Ik zie nergens problemen.
Ik heb niet gezocht om input 1/2 te realiseren, omdat het uiteindelijk toch zou gaan dienen om enkel een iPOD aan te hangen. Een 2de input heb ik niet onmiddellijk nodig.

Frank.

Bericht bewerkt door fminne op 14-05-2010 07:36

Arjen H.

1077 berichten

Expert¹
Expert¹

Read post 14-05-2010 15:29

fminneToen 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.

Mijn complimenten!

Anneo

1273 berichten

Expert¹
Expert¹

Read post 14-05-2010 22:06

Oef,weer wat bijgeleerd,zappernr.><zappernr.!
Dus weer werk aan de winkel,dacht dat het klaar was,maarja soft
is nooit echt AF.
Alleen het nut van het veranderen van de gain ontgaat me,
eerst moest die steeds bij inschakelen van nul naar de juiste waarde en nu van max. erheen.Blijft elke keer opnieuw instellen,
terwijl er een hele EEprom zit nix te doen.
Anne

fminne

9 berichten

Op bezoek
Op bezoek

Read post 15-05-2010 07:25

Anne,
Het klopt dat ik in mijn firmware de gain op maximum heb gezet. Wanneer voor jou de gain ergens op 50% zou moeten staan, dan moet je de waarde van TDA7449setGain op b.v. 15 zetten met: “TDA7449setGain(15);”.
Ik heb een beveiliging gezet op het volume van de iPOD van mijn kinderen, zodat ze hun oren niet kappot maken aan te luide muziek (en mijn kinderen zijn me daar dankbaar voor omdat ze weten dat het veilig blijft). Maar daardoor krijg ik niet genoeg input op de Modulo D, zelfs niet als het volume van de iPOD tot op de begrensde waarde wordt open gezet.
Daarom heb ik de gain op maximum moeten zetten, zodat de ingangsgevoeligheid van de Modulo D wel voldoende is om een leuk bereik van de volumeknop van de Modulo D te hebben, indien je de iPOD volledig open zet.
Persoonlijk had ik het inderdaad logischer gevonden om de waarde van de gain telkens ergens te bewaren, zodat nadat je de versterker hebt afgezet, deze waarde bewaard zou blijven. Maar opnieuw, door mijn aanpassing is het voor mij persoonlijk een perfecte oplossing: ik weet dat deze Modulo D enkel gebruikt zal worden als iPOD afspeler van één van mijn dochters, zodat ik de gain gewoon op maximum vast kan zetten in de firmware. Als er later dan toch nog eens iets anders op de Modulo D wordt aangesloten met een hoger uitgangsniveau, dan kan ik op dat moment alsnog de gain wat verlagen via de afstandsbediening.

Wat betreft de zappernummer: ook ik vond de keuze van de zapper om het volume uit te sturen met 0,16 en 0,17, terwijl de rest van de zapper staat ingesteld op CD-speler (code 20), nogal een rare keuze. Deze 0 staat feitelijk voor televisie. Als ze dan toch dachten dat een volumeregeling op een CD-speler niet kon bestaan, dan was het nog altijd logischer geweest dat ze de code 16,16 en 16,17 zouden gebruiken, want 16 staat voor audio. Mij maakt het niet veel uit wat de drijfveren zijn van de producent van mijn Universal Remote Control, ik pas de firmware van de Modulo D gewoon aan naar wat er wordt aangeboden.

Frank

fminne

9 berichten

Op bezoek
Op bezoek

Read post 16-05-2010 05:55

Hier rap nog een paar fotootjes van het eindresultaat.
Ik hou van de schoonheid van elektronica, dus vind ik dat dit mag getoond worden. Mijn dochter, op wiens kamer het uiteindelijk zal komen, vind het ook "Design". Toch moet het veilig blijven. Dit is een leuk compromis.

Zoals je ziet heb ik gebruik gemaakt van een geschakelde voeding die 12V, 4,5A kan leveren. Vermits deze installatie toch niet bedoeld is om de pannen van het dak te spelen, werkt dit zeer goed.
Ik heb er daarenboven nog een paar redelijke monitor-luidsprekertjes voor aangeschaft, dus denk ik dat deze combinatie de test met heel wat standaard iPOD-afspelers kan doorstaan.
Ik ben er wel echt tevreden van, maar vooral heb ik me leuk geamuseerd met het maken en aanpassen ervan.

Frank.

Arjen H.

1077 berichten

Expert¹
Expert¹

Read post 16-05-2010 15:20

Netjes.

Misschien is een kapje van plexiglas nog een idee?

Log in om antwoord te posten of de notificatie-service te gebruiken.

1   2     volgende

Payoff
Payoff

Volg ons ook op:

      

Direct doen

The School of Electronics

 

Elektor eVents, vakboeken, cursussen en meer. Kortom, innovatief studie- en onderwijsmateriaal met educatieve content!

Nu in prijs verlaagd

Elektor OSPV1

Tijdelijk € 210,- korting!

Dit zelfbalancerende indoor voertuig is ideaal voor bijvoorbeeld fabriekshal, magazijn of school.