De där volymchipen var några luriga rackare, egentligen bara för att databladet är vagt på en avgörande punkt...
Man styr chipet med ett 11-bitars dataord som klockas in till ett internt skiftregister men sista biten skall klockas på särskilt sätt för att chipet skall latcha in hela ordet - data måste vara hög när man sänker klockan vid sista biten!
Jag använde mitt PeekyPokey-kort (USB) för att experimentera mig fram till en fungerande lösning. Mycket enklare med "trial and error"-programmering i C# på PC jämfört med en mikrokontroller.
Enkelt att snabbt koppla ihop testrigg med visuell feedback (LEDs på alla gpio ju) och matning.
image.jpeg
Nu när jag vet precis hur chipet skall styras är det en enkel sak att implementera i en mikrokontroller
// mode = b0x = 0 = set both channels
// mode = b10 = 2 = set channel 1
// mode = b11 = 3 = set channel 2
private void SendData(byte mode, byte vol)
{
// bits 0 and 1
int data = mode & 3;
// bits 7 and 8 (2 LSB of vol)
data |= (vol & 3) << 7;
// bits 2 - 6 (5 MSB of vol)
data |= (vol & 0x7c);
// set bits 9 and 10 (EOT marker)
data |= 0x600;
// clock out 11 bits
for (int i = 0; i < 11; i++, data >>= 1)
{
_bus.Value = (byte)(data & 1); // data only
_bus.Value = (byte)((data & 1) | 2); // data and clock
_bus.Value = (byte)(i == 10 ? 1 : 0); // latch on last bit
}
}
Re: Dassmusik (3-zons audioförstärkare)
Postat: 17 januari 2016, 20:21:19
av hanzibal
Gjorde mig en liten testapp som gör det lite enklare att experimentera med chipet.
testapp.JPG
Har nu stoppat dit alla nödvändiga kondensatorer men utsignalen har en viss DC-offset som dessutom varierar när man ändrar volymen. Vet inte riktigt vad det beror på, skall klura lite mer på det...
EDIT: DC-offset på ca 1V introduceras vid volymjustering. Den klingar av mot noll under loppet av några sekunder. Om jag höjer volymen får jag en postiv DC-offset och negativ när jag sänker. Samma visa på respektive kanal men det spiller inte över från ena till andra.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 17 januari 2016, 21:43:13
av hanzibal
Bytte till mindre kondingar, hjälpte lite men långt ifrån helt.
Har ju ingen last men lade på 100k vilket väl (?) kan motsvara ingångsimpedans på en förstärkare men ser ingen större skillnad. Får testa vidare...
Re: Dassmusik (3-zons audioförstärkare)
Postat: 17 januari 2016, 21:58:47
av hanzibal
Äsch, tog fel på motstånd, he, he
Nu har jag 120k last och då ser det bra ut!
Verkar dock tydligt att chipen saknar nollgenomgångsdetektor men det trodde jag inte heller.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 17 januari 2016, 22:21:07
av hanzibal
Nedan ser man ganska tydligt vad som händer vid en volymsänkning direkt från 0dB till -24dB.
Har inte lyssnat men gissar att dessa transienter (nästan 2V) gör att det knäpper till, frågan är hur mycket. Det återstår att se.... (höra alltså)
Man ser också att vänstra kanalen (gul) ändras lite drygt 50ms före den högra vilket kan vara hörbart men knappast störande.
image.jpeg
Skall bli intressant att provlyssna!
EDIT: Tidsskillnaden berodde på min styrning, chipet ändrar båda kanalerna samtidigt.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 17 januari 2016, 22:42:12
av hanzibal
Här syns förloppet vid mute från 0dB. Det tar uppåt 50ms för spiken att klinga av. Undrar hur fasen det låter
image.jpeg
Re: Dassmusik (3-zons audioförstärkare)
Postat: 18 januari 2016, 20:47:17
av hanzibal
Kom på att det nog går att fixa zero cross detection utifrån genom att låta uC läsa insignalen med interrupt på komparator.
Beror på hold time vid latch samt ev. svarstid. Det fina är ju att man kan ladda hela ordet och sen latcha vid precis rätt tillfälle. En klockcykel tar 4us vilket bör vara kort nog.
Frågan om det är lönt eller ens hjälper men jag tänkte kanske ändå ta in signalen för att göra auto power off efter längre tystnad.
EDIT: Just detta går dock inte att testa fullt ut med PeekyPokey eftersom den har 500us latency pga USB.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 19 januari 2016, 21:43:08
av hanzibal
Japp, det fungerar (såklart) att först ladda dataordet och sedan latcha vid valfritt senare tillfälle. Man kan skicka vilka 11-bitars dataord man vill (godtyckliga gånger), det är det senast inlästa som effektueras vid latchning.
Detta fortfarande med PeekyPokey-testriggen så vid övergång till riktig uC måste jag komma ihåg att sätta en timeout på kanske 1ms efter vilken senaste volym effektueras ovillkorligen oavsett om nollnivå detekterats eller ej.
Om jag alltså läser in huvudinsignalen till uC sen så kan den användas för att synkronisera volymjustering för samtliga tre volymchip medelst nolldetektering.
Jag kommer ju som sagt troligen ändå att sampla insignalen för att kunna implementera "auto power off" efter viss tid av tystnad (låt säga 5 minuter).
EDIT: Chipet buffrar såklart inte olatchade dataord för respektive målkanal. Det dataord som råkar stå i skiftregistret vid latchning är det som effektueras. Ganska självklart men ändå.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 21 januari 2016, 21:38:31
av MiaM
Jag tänkte en "munk" där både plus och matningsjord går genom samma munk, och en sån uppsättning per förstärkarkort.
Det är alltså antagligen inte störningar från nätagget som är problemet i sig, utan jordslinga mellan korten.
Men du kan testa om det blir mindre störningar ifall du lyssnar på ett förstärkarkort som får insignalen separat utan någon koppling till resten av kretsen eller omvärlden (d.v.s. telepluggen kopplad till en batteridriven musikspelare). Om det blir bra så är tumregeln att sätta en munk per förstärkarkort och på både plus och minus.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 21 januari 2016, 22:00:55
av Nav
Det vore väl underbart att sitta på toa och lyssna på "Under dubbelörnens vingar"! Samt Till havs då man spolar. Är man hård i magen så är Leadbelly gällande. Var tid har sina fröjder!
Man skulle också kunna tänka sig Bolero för den som inte gilla fåglar.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 21 januari 2016, 23:20:18
av hanzibal
Unter den Doppeladler gör sig bra i dessa ädla syften
@MiaM: Jag kallade ferritkärnan för "munk" efter ferritens form på engelska (du skrev ju "flygplatsexpress" tidigare).
Dels drog jag bara igenom positiva tråden, dels gjorde jag det endast för inkommande matning och inte på respektive kort. Den ensamma ferritkärnan fick ändock pipljudet att försvinna helt även innan jag introducerade AE-kortet så nytta gjorde det och sannolikt blir det ännu bättre om jag gör så som du föreslår, d.v.s. drar igenom båda poler samt på en munk per kort. Återstår att göra de tester du föreslår med ett kort i taget innan jag förbättrar avstörningen.
När det gäller volymkontrollen så visade det sig att jag lyckats sätta kondensatorerna fel - det var det som orsakade transienterna som sågs i skopbilderna. Dessa är nu helt borta och extern nolldetektering är alltså överflödig.
Den stora nyheten är annars att jag nu provlyssnat, det knäpper inte alls vid volymjustering och låter fint utan hörbar distorsion
Jag är nöjd bortsett från den lilla digitala överhörningen från AE-kortet som förvisso är mycket svag men nog så irriterande sedan min fru gjort mig uppmärksam på det.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 24 januari 2016, 15:12:06
av hanzibal
Har experimenterat med olika kondensatorer (både värden och typ) och kommit fram till att 2,2uF elektrolyt blir bäst på både ingång och utgång på volymchipet.
image.jpeg
Man ser ofta kondensatorer från WIMA i audiosammanhang men de jag testade med (hade bara 68nF, 470nF och 1uF) gav inget vidare resultat här.
Vad är egentligen brukligt för DC-blockering på linjenivå?
Re: Dassmusik (3-zons audioförstärkare)
Postat: 24 januari 2016, 15:20:32
av HUGGBÄVERN
Ska det vara lite seriöst, tror jag man ofta kör i häradet 1-2uF. I billigare kretsar ofta en tiopotens mindre.
Re: Dassmusik (3-zons audioförstärkare)
Postat: 24 januari 2016, 15:26:09
av hanzibal
Ok, då ligger jag ganska rätt då alltså?
När det gäller polariteten så har jag positivt mot chipet för både in- och utgång. Är det rätt?
Re: Dassmusik (3-zons audioförstärkare)
Postat: 24 januari 2016, 15:41:04
av HUGGBÄVERN
Jag skulle nog lägga minus mot ingången men tanken att en opamp, t ex, alltid liksom har minusreferens på ingången ... typ.