|
Sids
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ruim een jaar geleden is het schema al ontworpen (zie de datum op het schema), alsmede de print-opbouw. Echter tijdens het solderen van de print kwam ik er (toen al) al achter dat dit bij deze print één van de saaiste klussen is. 8 datalijnen, 5 adreslijnen, plus de controllijnen (R/W en Phi2 signalen) hebben elk 6 losse draadjes (4 Sids en 2 print aansluitingen) nodig. Vermenigvuldigd met 16 geeft al 80 losse draadjes, die ook nog netjes gelegd moeten worden. Er moet worden voorzien om er een tweede print bovenop te zetten. Hiervoor zijn diverse aansluitingen dubbel uitgevoerd, zoals de voedingsspanningen, de data-, adres- en control-bus. Bij de bovenste print moeten hoekjes eruit worden gezaagd, zodat de connectoren met de onderste print naar de rest van de ArSid niet in de weg komen te zitten. Vanaf het begin was het plan al om 8 Sids te kunnen aansturen, tevens is de Decoder ontworpen om 8 Sids te kunnen decoderen. Meestal wijst een eerste printontwerp in de juiste richting, maar dit gaat niet altijd meteen goed, getuige de foto's. Hier ligt een groot probleem bij het bevestigingsgat rechtsboven. In de behuizing zit op deze plaats juist een voet en een montage-schroef dwars door de voet heen geeft geen betrouwbare bevestiging. Daarom is het ontwerp gewijzigd, zijn de audio-connectoren (bovenaan) langer gemaakt. Tevens zijn er twee rode (spannings)Leds vervangen door groene Leds (omdat deze spanningen geen +5V zijn, maar +9V en +12V). In het printontwerp zijn naast de Sids diverse condensatoren te zien. Deze zijn op de print echter tussen de IC-voeten gesoldeerd en zitten ze dus onder de Sid-IC's zelf. Elke Sid heeft ook nog twee speciale "filter"-condensatoren nodig om het filter juist te laten werken, deze worden wel naast de IC-voet (en dus naast de Sid) gesoldeerd.
Oude versie Sid vs nieuwe versie Sid.Er zijn (globaal) twee versies van de Sid uitgebracht. De oude versie, de oer-Sid, is de oorspronkelijke versie en draagt nummer 6581. Men zegt dat deze iets rouwer klinkt. Ook bevat deze versie enkele onvolkomenheden, zoals dat de volume regeling een gelijkspanning (een DC) niet helemaal wegkreeg. Het signaal bevatte dus een DC-component. Deze eigenschap werd uitgebuit om 4-bits samples te laten horen. De nieuwe versie draagt nummer 8580. Hierin zijn enkele onzorgvuldigheden uit de oer-Sid verbeterd. Dit resulteerde dat het samplen niet werkt. Er is geen DC-component meer aanwezig om het sample-afspelen te kunnen realiseren. Er zijn op electronica niveau ook verschillen tussen deze twee versies, namelijk de voedingsspanning (12V of 9V) en de filter-condensatoren (2200pF of 6800pF) (pinnen 1 t/m 4). Alle aansluitpinnen zijn wel hetzelfde gebleven. In dit schema is gekozen dat de Sids in paren op de print gezet moeten worden. Bij elk paar is de beslissing of ik er twee oude of twee nieuwe versies in zet. Elk paar heeft ook zijn eigen (groene) spanningsLed. Op het moment van ontwerpen, heb ik één Cbm64 liggen en nog 1 Sid 6581 (al ongeveer 30 jaar) in een onderdelenbak. Ik heb nog 4 Sids kunnen bestellen, namelijk 2 Sids 6581 en 2 Sids 8580. Vanuit dit aantal is het ontwerp ontstaan. Voor de rest blijkt de Sid-markt enorm schaars geworden te zijn. Zoals het er uitziet begin ik met twee oude en twee nieuwe versies op één print. Links twee oer-Sids (6581 als Sid0 en Sid1) en rechts twee nieuwe Sids (8580 als Sid6 en Sid7).
Filter-condensatoren.Het zoeken naar de filter-condensatoren was al een zoektocht op zich. Deze moeten gemaakt zijn van PolyStyrene (zie het aansluitschema "Typical 6581 Sid Application" uit de Datasheet van de Sid), een materiaal dat over de tijd weinig verloopt. In de jaren 1980 kwamen deze nog veel voor. Maar anno 2016 zijn ze zeldzaam en dat is ook te merken aan de prijs ervan. Een electronica-winkel in Den Helder had ze gelukkig nog liggen. Een keramische, of een gewone ontkoppel-condensator kost nu dan enkele dubbeltjes, de polystyrene condensatoren kosten al meer dan 7,00euro per stuk. Voor dit projekt ga ik voor een zo stabiel mogelijke werking, dus vind ik dit wel de moeite waard. Ik had er dan van elke waarde 10 stuks genomen, enkelen in voorraad leek mij wel handig. Wat opvalt is dat ze ook een stuk groter zijn (zie foto's).
Solderingen testen.Na al het saaie solderen van de data-bus (groen/wit en groen/zwart), adres- (geel/zwart) en control-bus (geel/wit en groen als reset) zijn alle verbindingen hardware-matig getest op een juiste verbinding tussen alle overeenkomende pinnen en dat er geen kortsluiting is tussen de vele draadjes. Dit testen gebeurt eenvoudig met een multi-meter in de stand weerstand en moet worden gedaan voordat de kostbare Sids erop worden geprikt. Tussen de Sids en de bus-connectoren lopen nu zoveel draadjes dat dit misschien nog problemen oplevert bij het erin prikken van de Sids, of de bus-aansluitingen. Een andere zorg zijn de polystyrene condensatoren van 6800pF. Zij zijn zo hoog, dat er wellicht geen tweede print bovenop kan worden geprikt. Maar met (voorlopig) maar 4 Sids moet het voorlopig gaan voldoen.
Elektrische test.Eerst moeten er nog verbindingen van de Databus en die tussen de Decoder en de Sids worden gesoldeert. Het valt op dat er vier draden (nog) niet aangesloten zijn op de Sids. Dit zijn de Enable-draden voor de Sids 2 (rood), 3 (oranje), 4 (geel) en 5 (groen) - ik heb immers gekozen om eerst de Sids 0, 1, 6 en 7 te gebruiken. De voeding is aangesloten en aangezet. En meteen lichten de drie Leds op de Sids-print op. De rode voor de 5V en twee groene voor de 12V (Sid 0 en 1) en de 9V (Sid 6 en 7). Nameten met de multi-meter bevestigt dat de voedingsspanningen keurig aanwezig zijn op de voedingspennen van de Sid IC-voeten.
Testen van de Adresbus en Databus.De volgende teststap is om (nog zonder Sids) te kijken of alle Data en Adres signalen van de Arduino doorkomen op de Sids-print en dat ze elkaar niet (ver)storen. Eerst is er een Logic-Analyser op de adresbus aangesloten en wordt door de Arduino alle adreslijnen 1 voor 1 hoog gemaakt. Op de Logic-Analyser moet dan op de afzonderlijke adreslijnen een Hoge puls zichtbaar worden, die als een soort treintje naar een hogere adreslijn gaat. Na de adresbus is het zelfde gedaan met de Databus. Vervolgens is de combinatie van de Adresbus met de Databus getest. Alle treintjes zijn keurig in beeld gekomen, zonder dat ze elkaar storen ... op 1 dingetje na. Het blijkt dat de adres-enable (Op de Arduino is dit Pin 42, Port L, bit 7 - te zien als de hoogste adres-lijn) meer rotzooi op de Databus laat gooien, dan verwacht. Het heeft ook wat tijd gekost om dit probleem te analyseren en te beredeneren. Ook omdat de rotzooi alleen op de Datalijnen kwam en altijd op een vast tijdstip na het treintje verscheen. Blijkbaar heb ik de Adresbus en Databus moeten testen zonder de Latches-print en Decoder-print aangesloten (deze had ik dus aangesloten gelaten). Er moet vanaf de Latches valse data op de Databus gekomen zijn, doordat de R/~W niet meegenomen is in deze test. Die valse data moet afkomstig zijn van de enige Read-"Register" op de Latches, namelijk dat register dat de schakelaar-standen inleest. Bij het niet meenemen van de adres-enable (of te wel met de 'botte bijl' de betreffende Pin 42 als ingang houden), tonen de datalijnen keurig het treintje met hoge pulsen, gepauseerd door 16 lage dalen (de Arduino is dan de adreslijnen aan het toggelen). Bij de Logic-Analyser foto's is onderaan een gedecodeerd resultaat getoond, keurig in de volgorde van $01, $02, $04 tot en met $80. Een teken dat alle bitjes 1 voor 1 aankomen. Een meettijd op de bovense datalijn toont keurig dat een puls 5msec duurt, de tijd die in het programma is opgegeven. Tussen twee pulsen is de tijd 115msec, wat overeenkomt met 7*5msec (= 35msec) dat de datalijn laag is, PLUS 16*5msec (= 80msec) dat de adreslijnen wordt getoggeld. Bij een test waarbij het oscilloscoopbeeld getriggerd wordt met ~CS0 (ChipSelect van Sid 0 - deze is Low-Active), is de lijn Adres-Enable toch weer nodig. De Pin 42 van de Arduino is weer op Uitgang gezet. Echter nu wordt de R/~W (Pin 40) Laag gehouden, zodat er "continue geschreven" wordt. Nu blijkt dat het pulsentreintje op de Databus geen verstoring meer heeft. Ook de ChipSelect0 wordt keurig weergegeven op het bovenste helft van het oscilloscoop-beeld. De ChipSelect0 komt rechtstreeks vanaf IC1 op de Decoder-print.
'Poke'n en 'Peek'en.Bij de Sids is een belangrijke naamswijziging doorgevoerd in twee IO-funkties, namelijk die met de namen WRITE_DATA() en READ_DATA(). Deze zijn hernaamd naar POKE() en PEEK(). Deze namen komen rechtstreeks uit de programmeertaal BASIC, de standaard taal waarmee men de Cbm64 kon programmeren. Wilde men op de Cbm64 geluid hebben, dan waren er diverse POKE-commando's nodig om de Sid te programmeren.
In dit projekt vind ik Poke en Peek duidelijker op zijn plaats dan Write_Data en Read_Data, juist vanwege de geschiedenis vanuit de Cbm64.
Controleren van de Timing.Met de Logic Analizer is ook de Timing gecontroleerd van de adreslijnen die naar de Sid gaan. Ik ben niet de eerste die een Sid wil aansturen met een "vreemde" processor. Het blijkt dat de Sid 6581 niet zo moeilijk is om aan te sturen, dat de timing ervan niet zo'n probleem is. Het blijkt dat het andere Sid-type, de 8580 veel strenger is. Dat deze de data niet accepteerd als de timing niet correct is. Wat ook een rol speelt is dat de 1MHz oscillator (de clock die de Φ2 bepaalt) op de Decoder-print en de Clock op de Arduino op geen enkele manier gekoppeld zijn. Ook al draait de Arduino Mega op 16MHz, als hier een clock van 1MHz gehaald wordt, zal deze clock langzaam verlopen met die van de Decoder-print. Dit is ook de reden dat het Φ2 signaal (Phi2) niet alleen naar de Sids gaat voor de frequentie-basis en daarmee alle toonhoogtes bepaal, maar deze timing is ook de reden dat de Φ2 ook teruggaat naar de Arduino - een punt dat ik al vroeg in het totaal ontwerp heb zitten. Voor de timing is teruggegrepen naar het timing-diagram van de 6502 (of eigenlijk van de 6510, de processor die in de CBM64 zit - deze staat gewoon in de CBM64 Programmers Reference Guide). Belangrijk is dat de Adres en Data op tijd op de bussen staan, als de R/~W signaal eraan komt. En de R/~W moet op tijd gestabiliseerd zijn als de Φ2 omlaag gaat (zie de blauwe pijl op de foto's). De timing-diagrammen van onder andere de 6581 en andere 65xx IO-IC's bevestigen dit (ook deze timing-diagrammen staan in de CBM64 Programmers Reference Guide). Het eerste ontwerp voor de Poke-Funktie was recht-toe recht-aan geprogrammeerd, zonder te kijken naar het Φ2-signaal. Enkele regels waren dubbel uitgevoerd om voor een kleine vertraging te zorgen die de Latches blijkaar nodig had. Na het aansluiten van de adres-bus van de Sids (A0 .. A4) op een Logic Analyzer, samen met de ~CS, de R/~W en de Φ2, blijkt dat de timing best veel verloopt. Er moest nog wat gesleuteld worden aan deze funktie. In de Poke-Funktie zijn enkele WHILE-lussen toegevoegd, die kijken naar de Φ2 ["while ( (PING & phi2_mask) != / == 0) { Do_Nothing }"]. Eerst worden de Adres en Data op de bussen gezet. Na het Laag maken van de R/~W wordt er gewacht tot de Φ2 Hoog is en daarna wordt er gewacht tot de Φ2 weer laag is - het moment dat een Sid de data echt inleest. Vervolgens wordt de R/~W weer "Laag" gemaakt - dit veroorzaakt een extra korte vertraging, iets korter dan de standaard funktie DelayMicroSecons() kan realiseren. Daarna wordt de Adres ge-disable-d, gevolgd door het weer Hoog maken van de R/~W. Dit is het einde van de Poke-Funktie. Het beeld van de Logic Analyzer (zie foto's) laat nu zien dat, zodra de ~CS Laag is, er keurig gewacht wordt op de Φ2. En zodra de Φ2 weer Laag is (bij de blauwe vertikale lijnen), dan duurt het een korte tijd voordat de ~CS weer Hoog wordt, een teken dat de Sid geen data meer opneemt.
Een Sid plaatsen.Nu eerst de Polystyrene Condensatoren op de Sids-print solderen en dan komt uiteindelijk het spannendste moment aan. Namelijk het erin prikken van één Sid (6581) en met de oscilloscoop controleren of er een audio-signaal uit komt. Een testprogramma is dan snel gemaakt. Aanzetten en dan ... geen resultaat. Geen beeld op de oscilloscoop op de Audio-Uitgang. Wat op de oscilloscoop wel opvalt is een 1MHz signaal op de audio-uitgang. Ik weet van vroeger ook dat het audio-signaal uit de CBM64 ook niet brandschoon was, dus dit is geen verontrusting. En ook warmte-produktie van de Sid. Volgens de Datasheet mag de Sid een temperatuur hebben van 0°C tot 70°C, echter ik kon hem nog steeds met een vinger aanraken. Dan wordt het verder foutzoeken in de elektronica. En blijkt er gewoon niets verkeerds te zitten. De timing is nog verder ge-fine-tuned, maar nog steeds geen resultaat. Zelfs een tweede exemplaar (6581) gaf geen enkel audio-signaal. Dan is het (enigzins paniekerig denken): "Wat nu." De eerste gedachte is om de Sid uit mijn eigen Commodore64 te trekken ... ware het niet dat die er al uit is gehaald (met geen idee wanneer dat was, want het was de tweede al die ik in mijn CBM64 gedaan had). Dan wordt het tijd om toch de enige 6581 uit mijn eigen onderdelenbak gebruiken. Ik wist met grote zekerheid dat het een goede zou zijn, ondanks dat deze meer dan 30 jaar in mijn onderdelenbak heeft gelegen. Aanzetten en kijken naar het beeld van de oscilloscoop. Weer geen signaal, totdat ... na enige tijd (en na het verzetten van de trigger-time instellingen) er toch iets van driehoekjes te zien zijn op het beeld. Driehoekjes die in frequentie lijken te varieren ... lijken? Ze varieren ook echt in frequentie (zoals het eerste testprogramma (hier niet weergegeven) geprogrammeerd was). Jubel, juich, juich. Enerzijds omdat ik uiteindelijk toch geluid heb, anderzijds omdat dit een bevestiging is dat de aansturing ervoor gewoon werkt, zoals ingedachte is. Met een frequentie van 1.53kHz zijn de 4 mogelijke golfvormen (1:driehoek; 2:zaagtand; 4:pulse; 8:ruis) uitgeprobeerd en is het op oscilloscoop-beeld vastgelegd (zie foto's). In vertikale richting is echter ook een 1MHz signaal van de clock Φ2 te zien als een brede band. Iets dat er op de versterker-printen uit gefilterd moet worden. Deze frequentie van 1.53kHz komt hier toevallig uit de ge-poke-de waarde van 101 in zowel de Lage-byte als de Hoge-byte voor de frequentie-registers [0,1]. Er is een mini-printje gemaakt met maar 3 komponenten erop, 1) een ontkoppel-elko (zoals het aansluit-schema al aangeeft), 2) een (blauw) volume-knopje en 3) een extra uitgang waar de oscilloscoop op aangesloten kan worden. Een paar mini speakertjes (met ingebouwde versterker op batterijen) is erop aangesloten en het geluid is nu ook hoorbaar.
Sweep-programma.De zaagtand is weer ingesteld en de ADSR van de Sid heeft een paar leuke waardes gekregen. Dit programma is hier wel weergegeven. Deze sweep (van 001 .. 251) is opgenomen en zowel in een foto als in een MP3 geplaatst. Een blik in het LOOP-deel van het programma geeft toch weer iets vertrouwds, al die Pokes onder elkaar.
Op de CBM64 was het in Basic niets anders dan een partij Pokes om de Sid te programmeren (zie foto's - de hier gegeven foto is alleen een voorbeeld hoe een CBM64 programma er uit kan zien. Het voorbeeld heeft inhoudelijk totaal niets te maken met de Sids-print).
Nawoord Sids.
Tijdens het maken van het ArSid-programma (het programma dat de ArSid gaat besturen), heb ik één van de bestelde Sids 6581 erbij geprikt (gewoon kijken wat hij doet), blijkt deze toch te werken. Een snel doorlopen van enkele register-waardes, blijkt deze Sid goed te werken, betreffende de voices. Van het filter-deel twijfel ik nog. Dit zal ik later nog moeten uitzoeken, wanneer de Versterkers klaar zijn. Zag het er eerst wat somber uit, omdat ik sommige idee-en niet uit zou kunnen voeren, nu blijkt dat ik toch ver ga komen in mijn ideeën. Ik heb ook twee nieuwere Sids 8580 er in geprikt - ook deze werken, qua voices. Het simuleren van de 65xx-bussen door de Arduino Mega werkt uitstekend. Ik twijfel bij mijn 8580-Sids ook over het filter, ook dit is een punt voor later. Maar met dit al als eindresultaat is de Sid-print voorlopig voltooid en afgerond. Al met al ziet het er machtig uit, 4 Sids op een rijtje (zie foto). Tijdens het testen en programmeren blijken de Sids erg warm te worden. Door het monteren van een koellichaam op de Sids kan er geen tweede Sid-print bovenop de eerste geplaatst worden, hoewel er met het ontwerpen van de Sid-print wel rekening mee is gehouden. Een troost is dat ik niet meer Sid-chips heb, zodat dit laatste geen noemenwaardig probleem voor mij zal zijn ... en er dus prioriteit gegeven kan worden aan het extra koelen van de Sid-chips.
Audio voorbeelden.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
De aansluitingen van SidsDiverse tests van de Sids
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1: De broncode van Sids Adresbus Test(Sat 23 December 2017) Het testen van de Adresbus op de Sids-print.
2: De broncode van Sids Adresbus & DatabusTest(Sat 23 December 2017) Het testen van de Adresbus en de Databus op de Sids-print.
3: De broncode van Sids Adresbus, Databus en ChipSelect0 Test(Sat 23 December 2017) Het testen van de Adresbus, Databus in combinatie met de ChipSelect van Sid0 op de Sids-print.
4: De broncode van Sids Poke Timing(Wed 27 December 2017) Het testen van de Poke Timing, het gedrag van de ~CS, R/~W en Phi2. Alleen de belangrijkste funkties zijn hier weergegeven.
5: De broncode van Sids Sound Sweep(Fri 29 December 2017) Het eerste geluid uit een 6581 Sid. Alleen de belangrijkste funkties zijn hier weergegeven.
|
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes] |