Wel, het leek me uiteindelijk beter een 'dedicated' topic te maken voor mijn meer-jaren project, in plaats van updates en opmerkingen verspreid in andere topics te plaatsen. Mooi alles op 1 plek, a-la "The Ector Amp" :)

"Digiblast" is de 'merknaam' waaronder ik mijn audio brouwsels maak. Dus vandaar. "Genesis" zou afgezaagd kunnen klinken, maar de reden dat ik dat als naam voor de versterker heb gekozen is omdat het het eerste serieuze "realworld use" audio project is. Ik ben van plan in de zelfde lijn (ook 19" bakkies) uitbreidingen te maken, zoals multichannel voorversterker e.d.

Goed. Een korte uitleg over wat het project precies is: De Genesis is een versterker ontwerp gebaseerd op de Electuur Kilowatter uit 1986. Een 2x 500W / 4Ohm versterker. In mijn ontwerp is de voeding gereviseerd en digitaal ge-automatiseerd, de eindtrappen krijgen moderne torren en idem voeding. De DC beveiliging blijft zoals 'ie was in het Electuur schema. Naast deze upgrades komt er ook een bak nieuwe electronica bij. Zo wordt het volume digitaal geregeld, krijgt 'ie een simpel digitaal bedieningspaneel met grafisch LCD, een digitale peak/VU meter en alle beveiligingen kunnen worden uitgelezen door het systeem, automatisch afsluiten e.d.

De voedingscontroller en het bedieningspaneel had ik reeds eerder af en ook over gepost. Nu ben ik bezig met het moederbordje. Dit zit nu goed in elkaar en werkt 100%, ben begonnen met software schrijven en wat ontwerpjes te doen :) Nu begint het hele spel tot leven te komen ;)

Dan nu de slide-show ;)

http://img509.imageshack.us/img509/6466/overviewsj4.th.jpg
Een volledig overzicht van hoe alles aan elkaar zit. Het moederbordje in het midden, bedieningspaneel via flatcable er voor en de power control unit die er achter staat. Die moet overigens nog met een flatcable aan het moederbordje worden gekoppeld. De "programmer bridge" staat zoals je kunt zien nu op '3'. Dit houdt in dat nu de ATmega64 is geselecteerd om te proggen. Kabeltje wat er aan zit gaat naar de STK500 :) De bruin/geel/zwarte kabel is de +15V/0V/-15V analoge voeding. De groen/rood/zwarte kabel is de +5V/+3.3V/0V digitale voeding.

De power control unit of te wel PCU zorgt voor:
- Inschakel vertraging
- Schakelen eindtrap voeding, eindtrap driver voeding en voorversterker voeding
- DC beveiliging, aansturing speaker relais (witte relais)
- CPLD voor het digitaal beheren van de relais, aansturen power LED en het mogelijk maken dat de ATmega64 op het moederbord de amp kan inschakelen of afschakelen.

http://img509.imageshack.us/img509/8282/programbridgeel0.th.jpg
Een close-up van de programmer brug. Twee knopjes, 1 om 'm aan of uit te zetten. Indien uit, kan er geen enkele chip worden geprogrammeerd. Indien aan, kan je met het andere knopje door de chips scrollen:
1: JTAG voor grote CPLD op moederbord en CPLD op de PCU
2: JTAG uitbreiding, wordt nu niet gebruikt
3: AVR ATmega64 (hoofd MCU)
4: AVR ATmega8 (Peak/VU meter MCU)
5: AVR uitbreiding, wordt niet gebruikt

Dus alle chips in de amp kunnen worden geprogrammeerd, en dat alles via die 15-polige VGA connector die achter op de versterker komt. Die hoeft dus niet open om prog kabels op diverse headers te prikken :)

http://img141.imageshack.us/img141/7504/bedieningzt6.th.jpg
Het bedieningspaneel met een debug-programma. Wat er getoond wordt zijn de 4 gemaakte I/O registers in de grote CPLD. Via die registers kan de Mega64 de volume controller (WM8816) schrijven en lezen. Het ding heeft namelijk een custom seriele interface en is niet compatibel met SPI of I2C o.i.d. Dus het bitbangen doet de CPLD :) Verder status registers, zoals een interrupt register, een vlaggetje voor elke knop en voor up/down van de rotary encoder. Het decoden gebeurt ook door de CPLD. De mega64 hoeft slechts te reageren op de up/down interrupts gegenereerd door de CPLD.

http://img509.imageshack.us/img509/8960/conceptbs6.th.jpg
En dit is een concept ontwerp van wat er op het LCD komt als de amp aan staat :) Diverse status ikonen (temp, fan aan/uit, speakers aan/uit/mute) en nog uitlezingen zoals het peak level wat de peak-meter (mega8) rapporteert, en de ingestelde gain per kanaal. Verder nog natuurlijk een Volume en Balance schaal :)

Als de MUTE en MODE knop tegelijk worden ingedrukt (CPLD detecteert dit ook en als de knoppen met niet meer dan 40miliseconden verschil worden ingedrukt genereert 'ie een 'menu pressed' interrupt i.p.v. 'mode pressed' of 'mute pressed'), kom je in het instellingen menu waar de tijd/datum kan worden ingesteld, opstart volume, maximaal volume, backlight aan/uit, alarm tijd (op die tijd schakelt de amp in), afsluit tijd (na bepaalde tijd geen signaal) en wat ik nog meer aan leuks kan bedenken :)

Al met al is het een mega groot project waar ik al jaren mee bezig ben, en het is tevens een droom die aan het uitkomen is. Naast dat de amp zelf zeer goede audio prestaties heeft, zorgt ook het hele digitale gebeuren er om heen voor veel (bouw) plezier.

De kast is reeds gemaakt. Ik moet de bodem plaat nog laten maken. Dan kan alles gemonteerd worden, behalve de eind-trappen, want die moet ik nog ontwerpen/bouwen. Als de hele handel in z'n bakkie zit, zullen er vast meer foto's komen!

Mooi, mooi, mooi. Maar als je zoiets moois maakt, waarom gebruik je geen smd? Lijkt mij een stuk mooier.

* Riktw gaat eens zoeken naar zijn kaak die nu ergens in zijn kamer licht van verbazing.

wat een mooi project en wat een programmeer werk.
het versterkingsgedeelte zal denk ik het makkelijkst worden.
* Riktw kwijlt nog even door

@Wil:

Ik was nog niet toe aan SMD (had de sprong nog niet gewaagd). Maar.. de WM8816 en ATmega64 hebben me er toe gedwongen en het bleek best makkelijk te gaan, dus toekomstige dingen zullen vast meer SMD krijgen ;)

De enige SMD die ooit had gesoldeerd was een 100 pins TQFP van een MSX2 computer die het loodje had gelegd, was ik een jaar of 16 :P

@rik: Inderdaad, het analoge audio deel is nog wel het minste werk, alhoewel de eindtrappen toch ook wel een project op zich zelf zijn :)

Op 7 december 2007 21:35:25 schreef WilToyo:
Mooi, mooi, mooi. Maar als je zoiets moois maakt, waarom gebruik je geen smd? Lijkt mij een stuk mooier.

Kan altijd nog, en het mooie er van weegt vaak niet op tegen de extra tijd.

Op 7 december 2007 21:43:45 schreef MagicBox:
@rik: Inderdaad, het analoge audio deel is nog wel het minste werk, alhoewel de eindtrappen toch ook wel een project op zich zelf zijn :)

Vooral als door een onvolkomenheid oscillatie optreedt of een gedeelte 'iets' warmer wordt dan verwacht.

Veel succes met dit mooie project.

Dank je Henry. Ik weet niet of ik het al eens eerder gezegd had, er komt ook een screen-saver in die een "Credits" lijstje soft-scrollend voorbij laat komen. C.O. zal daar zeker niet in ontbreken ;)

Wat de eindtrappen betreft, ik heb de originele printontwerpen met de 2SJ50/SK135 al 12 jaar draaien (zo lang is het geleden dat ik met dit project begon, alleen het lag vanaf mijn 18'e jaar tot 28'e jaar stil, de hele electrohobby wel te verstaan). Alleen met een aftandse bliktrafo 200W voeding die inzakt als je de amp een beetje goed open zet. Echt een provisorisch ding.

Wat ik nu aan het maken ben is eigenlijk de MKII. Zodra 'ie af is, kan ik het 12 jaar oude scharminkel gaan ontmantelen, torren er afhalen en misschien voor een vette prijs verkopen, ze zijn erg gewild en al lang niet meer in productie.

Op 7 december 2007 22:18:12 schreef Henry S.:
[...]
Kan altijd nog, en het mooie er van weegt vaak niet op tegen de extra tijd.

Is helemaal waar, maar als je eenmaal je project af hebt ga je niet nog eens hetzelfde project nogeens ontwerpen. De extra tijd os ook niet zo heel erg veel. Eigenlijk bijna niets. Als je het SMD solderen onder de knie hebt gaat het sneller als TH solderen.

Waar heb je de WM8816 vandaan? Hij is voor zover ik weet nergens meer te krijgen en obsolete. Overigens is het wel goed spul van Wolfson Microelectronics.

http://www.profusionplc.com

Daar heb ik 'm vandaan. Er is een 'maar'.. Ook zij kunnen 'm niet meer leveren. Maar aangezien ik ooit bij hun besteld heb, heb ik onlangs mail gekregen van ze:

Dear Mr. Van Harskamp,

we have learned that Wolfson will do a redesign of WM8816 and the design work has started some weeks ago.

The redesign of WM8816 will be pin compatible, and will have an additional feature of an I²S bus. Due to a different process some small differences in the control of the device are expected.

Time schedule:

First samples in March 2008

Volume production in May 2008

Wolfson still regret that we needed to stop the deliveries of WM8816 with a short notice, but this was beyond of our control. As the foundry the new device will be designed for is one of the leading wafer foundries and we are confident that the supply is not a problem anymore.

We hope, that this information is helpful for the further use of WM8816.

Edit: Het is inderdaad een geweldig ding. Totaal geen hoorbare eigen-ruis. Zelfs niet als zijn gain op 0dB staat. De peak-meter die ik heb gebouwd is -60dB gevoelig, en die ziet absoluut geen spanning boven de +2.5/-2.5mV. 'k heb de scoop er ook op gehad, kleinste was 20mV/Div en niets kunnen bespeuren.

Verder nog was het een 'goddelijk' idee om de WM8816 een dedicated voeding te geven met een REF02 +5V precisie voeding. Super schoon.

en wat wordt het gewicht als je ff gokt of de trafo en koelshit op de weegschaal zet.
is het nog te tillen of wordt het hernia in 10 minuten.
ik weet uit ervaring dat mijn denon(16,5kg)niet leuk is om vanuit de stad naar huis te dragen(2 kilometer).

en printje helemaal zelf ontworpen of autospul?

9KG per eindtrap trafo, dat x2 dus da's al 18KG. Dan nog een kilo of 2 voor de twee kleinere trafo's er bij. 20KG. Ik denk dat de kast zelf een kilo of 1 is. Alle printjes met koelblokjes, montage matriaal, snoer e.d. ook een kilo.

Da's dan 22 kilo exlusief het eindtrappen koelblok, geen idee wat die gaat wegen. Misschien ook een kilo. Alu is niet zo zwaar. Het meeste gewicht zit in de eindtrap trafo's. Die moet je niet op je tenen laten vallen ;)

Alle printen zijn 100% eigen ontwerp. Zo ook de schema's. Hier en daar zijn nog delen van het originele Electuurschema in tact gebleven. Practisch alleen de DC detectie voor de speaker uitgangen en de eigenlijke versterker delen van de eindtrappen. De printen van de eindtrappen worden wel overnieuw ontworpen, andere torren en andere behuizingsafmetingen :)

Zo.. vanmiddag in twee uurtjes de peak-meter van zijn I2C implementatie voorzien :) Het ding meet en onthoudt de hoogste dB waarde voor elk kanaal (links of rechts) en als die dan met I2C worden uitgelezen, worden ze weer gereset naar -infinite.

Hij werkt in Slave-transmitter mode. Bij het ontvangen van zijn adres, stuurt 'ie twee bytes uit, de waarde voor links en de waarde voor rechts. Dat is alles.

I2C implementatie met AVRs is een koud kunstje ^^

Een grafisch display is leuk, maar alle bitpatronen met AVR studio inkloppen was geen oplossing. Het concept plaatje wat je ziet op de LCD is ook alleen dat: een plaatje.

De display driver die ik in asm heb geschreven bevat een aantal 'high-level' routines, zoals LcdPrintStr, LcdPrintImg en LcdPrintRect. Je kunt aan elke routine ook nog opties meegeven: Output inverteren (white on black), right / top align, transparent output en voor rectangles nog of er een border omheen moet, of 'ie leeg of gevuld moet zijn of dat alleen het gebied geinverteerd moet worden. Dit is weer handig om een balk over het actieve menu item te krijgen waarbij de menu item text is geinverteerd. De driver kan met verschillende fonts werken, er kan 1 font actief zijn. Ik heb'm zo gemaakt dat 'ie proportionele fonts ondersteunt, met variabele spacing tussen de letters. Dus uiteindelijk is het LCD ontzettend makkelijk aan te sturen.

Maar hoe geraak ik nu aan font en image patronen? Daar heb ik iets moois voor gebakken:

http://img410.imageshack.us/img410/8908/lfmkj4.jpg

De font / image editor, waarmee ik de bitpatronen kan maken. Dan op de knop drukken en er wordt een include file gegenereerd die ik dan in het project kan opnemen. De bytestream die er uit komt (een reeks .db, .dw, .dd of .dq, in te stellen in het proggie) is afgestemd op de LCD driver :)

WoW een heel mooi project !
succes ermee en dit draadje blijf ik zeker volgen....

Thanks :)

Vandaag ga ik de eerste twee hoofdprogramma lussen schrijven. Het AVR programma gaat uit meerdere sub-programma's bestaan:

- Stand-by programma: Als de versterker in standby staat. Dan reageert de AVR alleen op de RTC interrupt en kijkt of 'ie de amp moet inschakelen op de ingelezen tijd als dat in het menu aangezet is. Verder slaapt 'ie alleen maar. In deze state is practisch het hele moederbord uitgeschakeld, alleen de AVR , RTC en de programmeer brug krijgt dan +5V. Er zit n.l. een relais op het mobo die de +5V inschakelt naar de rest wanneer de amp inschakelt.

- Active programma: Als de amp is ingeschakeld. Dit programma handelt de normale bediening af, zoals het LCD plaatje laat zien. Volume, balance, status uitlezing.

- Menu programma: Als er op de menu knop wordt gedrukt gaat het menu programma lopen.

- Debug programma: Via het menu te bereiken, registers kunnen bekijken en aanpassen.

Als het een beetje mee zit kan ik de actief/standby programma's vandaag voor een groot deel af krijgen. Dan kan het volume met de rotary worden ingesteld, en kan ik tevens wat geluidstesten doen ;)

P.S. Source is op aanvraag leverbaar voor AVR geintresseerden :)

Nou, het is eventjes stil geweest, maar dat komt omdat ik nu in de software fase zit. Lekker AVR assmbly proggen. Inmiddels schiet het met het main programma aardig op.

Het RTC clockje leest goed uit, en vanavond de peak dB uitlezing geimplementeerd. De I2C implementatie in de Peak meter werkte dus naar behoren :) Nu wordt op het display de actuele gain (in dB) getoond per kanaal, en de gemeten peak gain met een interval van een seconde. Werkt helemaal zoals ik geplan'ed had :)

Voor de I2C had ik een universele buffered interrupt driven driver gemaakt, die gebruik maakt van de de message pump welke ik in het AVR assembler topic had gepost. De werking is als volgt:

De I2C driver werkt met 'commando's'. Een commando bevat een slave address, een byte count, een message ID met data, en een data pointer, dus 6 bytes bij elkaar. Dan nog een 7'e byte als byte counter. Zo'n commando wordt dan in de buffer gezet, en als alle bytes zijn verzonden of ontvangen, post de ISR de opgegeven message die de main routine dan weer met MsgGet kan ophalen :)

Het voordeel is dat het main programma niet hoeft te zitten wachten tot alle bytes zijn verzonden of ontvangen, maar gewoon door kan gaan na het posten van het I2C commando. Als je meerdere commando's post, zorgt de driver er voor dat ze als een 'repeated-start' aan elkaar geknoopt worden. De driver is ook multi-master compatible, als een commando mislukt, haalt 'ie hem opnieuw op uit de queue en probeert 'ie het net zo lang totdat het compleet is. Met name voor de toekomst, zodat ik een externe I2C master zou kunnen aansluiten om zaakjes uit te lezen. Naast de firmware connector zitten er ook 2 I2C bussen op.

Ook de scherm layout begint definitief te worden. Deze is toch anders dan het conceptje geworden :) Als het main programma af is, zal ik proberen een filmpje er van te maken.

Respect.

En dat allemaal in asm, ik mag hopen dat je ruimschoots commentaar hebt toegevoegd. Anders kon je in de toekomst weleens een enorme puzzel hebben als je de code nog eens wilt bekijken/aanpassen.

Ik ga dit project zeker volgen. Kan ik er in toekomst nog mijn voordeel aan doen als je het niet erg vindt.

[Bericht gewijzigd door WilToyo op (21%)]

Inderdaad voldoende commentaar. Maar de grootste truuk is het goed organiseren van de diverse programma delen, niet alles als een spagghetie kluwen van elkaar afhankelijk laten zijn. Voorbeeldje:

Alle LCD routines en interne subroutines zitten in een eigen .asm file. Echt elk label begint met Lcd.... aangevuld met wat van toepassing is. Het zelfde voor de I2C (Twi......) of RTC (Rtc.....).

In de file headers (stukje text) gezet wat de afhankelijke files zijn. De RTC file heeft de System.asm en de Twi.asm nodig. De System.asm bevat alleen maar losse generieke routines, zoals ram op stack alloceren, strings of rom/ram kopieren e.d.

Zo ook krijgen de programma's eigen files. De hoofdfile Avr...... , het Actief programma is dan Act..... , het menu programma Mnu.... enzovoorts.

Juist de message pump zorgt er voor dat vooral de interrupt routines generiek kunnen blijven. Die posten alleen maar een message. Bijvoorbeeld de rotary encoder. Die geeft een interrupt af. Wat de ISR doet is alleen een MSG_KEYPRESS sturen met data parameter KEY_UP of KEY_DOWN. De ActMain haalt de message op en verhoogt of verlaagt het volume. De MnuMain haalt de message op en maakt het volgende of vorige menu item actief. Als in de ActMain een message MSG_KEYPRESS met parameter KEY_MENU komt, jumpt 'ie naar de MnuMain. En dan gaat die gewoon verder. Dat werkt echt geweldig zo :) De ISR zelf hoeft helemaal niet te weten onder welke context deze draait.

Een serieus operating system voor AVR dus.

Nou da's weer een groot woord. Maar je zou inderdaad kunnen zeggen een BIOS net als de C64 en MSX die hadden, alhoewel de message pump een M$ Windows iets is.

De peak-meter in de ATmega8 is heel anders, die code is heel direct, zo snel mogelijk. Die hoeft ook alleen maar peakmeter functionaliteit te doen, maar dat doet 'ie wel op 38KHz, 19Khz per audio kanaal, en dat met 10-bit. Door middel van hardware (sterke ADC driver en referentie) is 'ie nog steeds 10-bit nauwkeurig op een ADC clock van 500Khz. Er wordt ook geen ram gebruikt, alles past nog in de 32 registers, heb er nog 3 over :)

Voor de ATmega64 ligt het heel anders. Daar komt een hele applicatie met GUI en al in, en dat heeft gewoon een soort van OS / BIOS nodig wil dat een beetje 'high-level' te programmeren zijn.

Maar zoals ik al eerder gezegd heb, de source is op aanvraag beschikbaar. Naast het 'showen' van dit project wil ik niet gierig zijn en als anderen er wat aan hebben is dat alleen maar leuker, daar zijn we toch een gezellig groepje hobbyisten (en professionals) voor?