Kalibrering av pot:arna
Efter att ha kört igång del för del har turen kommit till att få till kalibrering av spänningarna från Vcc och Vpp DCDC. Spänningarna styrs med en dual digitalpot som kan programmeras via I2C och denna kalibrering är tänkt att mappa potvärden mot fasta önskvärda spänningar som passar för olika Vcc/Vpp.
Swech påtalade tidigare att det kan nog vara bra med ett kortslutningsskydd för man vet ju inte vad det är för status på kretsarna man sätter i ZIFsockeln. Det är ju en bra ide håller jag med om. Jag tänkte att när man slår på spänningarna så mäter man att där är rimlig spänning och stänger av DCDC om så inte är fallet. Sen kan man mäta strömmen av framspänningsfallet över 1ohm och överstiger den 150mA så stänger man också av DCDC.
Men jag hade glömt en mätpunkt på Vpp efter 1ohmsmotståndet så jag fick patcha in ett till mätställe för det. Kopplingen ser ut såhär
Vilka spänningar ska vara med i Tabellen
Man kan vara lite fiffig när man gör konstanttabeller i de små PICarna. Som i detta fall när jag vill lagra 12bitars värden. Varje spänning representeras då av värden mellan 0.00V och 40.95V (=12bitar)
För att lagra dessa i en tabell i FLASHen med 14bits bredd kan man skriva kodinstruktionerna Call och Goto då dessa håller en 11bitars konstant som parameter. Som syns i tabellen nedan så använder man call för 0-2047 och goto för 2048-4095. Det här funkar utmärkt och assemblern sväljer detta utan att protestera
Själva kalibreringen
Innan man börjar koda iväg är det nog bra att ta reda på hur lång tid som det tar för DCDCna att komma upp till tänkt spänning. En digital pinne från mjukvara går hög när koden börjar fippla med att få igång spänningen (röd linje på skåpet) och när den går låg är mjukvaran red att börja mäta spänning.
Här syns att mjukvara behöver vänta iallafall 2,5ms innan man kan förvänta sig stabilt resultat på mätningen.
Gul kurva visa Vpp-DCDC och Violet kurva visar Vcc-DCDC
Skaffade ett nytt Oscilloskåp. Just detta bygge med flera spänningar och digitala signaler blev lite meckigt med mitt tidigare 2kanals skåp. Så det fick bli ett Siglent 4kanals med digitaloption 16bitar. Och med stor display så man ser bra på. Just den här mätningen kanske inte krävde allt detta men det är ju bra att träna på hur det nya skåpet funkar.
Jag gör ett kommando som heter "cal" och som först kollar att det inte är kortslutningen eller överström och sedan stegar igenom tabellen med önskade spänningar och söker reda på vilket potvärde som varje tabellrad motsvarar och lagra dessa potvärden i RAM tillsvidare. Allt skrivet i assembler. Precis sånt jag gillar!
Mjukvara frågar först om man är ok med att släppa ut spänning på ZIF.28. Man gör ju klokt i att inte har en krets där som inte tål 7V men det är ju lätt att glömma så en Yes/No fråga är på sin plats.
När allt är kalibrerat går mjukvara igenom tabeller och använder de nya potvärden för att skapa spänningarna och då kan man se hur bra/dåligt jobb "cal" kommando.
Även här får man en Y/N fråga om man vill spara denna kalibrering i FLASHet.
På skåpet kan man se förloppen. Här när Vpp påbörjar sin sökning. varje "klocka" på den röda linjen motsvarar en potvärdeökning och man ser då att Vpp sakta stiger
Om man fångar hela förloppet ser det ut så här. Först Vpp sökning, sen Vcc sökning och när "klockan" slutat syns hur testet av alla potvärden påverkar Vpp och Vcc
På terminalen ser det ut såhär
Och på bordet ser det ut såhär. Jag fixade ju till mitt hobbyrum för några år sen. Ett ställe som det efter renoveringen samlades en massa skräp på gjorde jag om genom att sätta dit en liten extra bordsskiva, den som skåpet står på. Det blev riktigt bra och ytan fick plötsligt ett bra syfte.
Kolla hur tabellen mår
Det kan ju hända att man blir lite nyfiken på hur kalibreringen står sig eller att PROMEL inte tappat sin kalibrering. Då kan man köra kommandot "info c" och den gör på samma sätt som slutet på "cal" kommando, alltså går igenom tabellen och visar vad de olika potvärden faktiskt skapar för en spänning.
Och man kan ju redan sen tidigare kolla systemets interna spänningar med kommandot "info u"

.