2014 m. lapkričio 7 d., penktadienis

Pasižaidimas su MCP4921

Vis nesugebu pabaigti pradėtų projektų, mokslai spaudžia, tai nelabai lieka laiko parašyti į blogą. Planuoju gaminti programuojamą DC apkrovą, ir vienas iš jos komponentų yra DAC'as. DAC - Digital to Analog Conveter. Lietuviškai - skaitmeninio signalo į analoginį keitiklis. Šiam projektui pasirinkau Microchip sukurtą MCP4921 DAC mikroschemą. Tai 12 bitų, SPI interfeisą turintis DAC'as su išorine atramos įtampa.

Šiandien ją gavau, tai nusprendžiau truputį pažaisti. Kadangi pirkau SO8 korpuse teko pasidaryti SO į DIP adapterį. Pajungimas gana paprastas: maitinimas +5V, atraminė įtampa (pas mane tiesiog įtampos daliklis į 2.5V), ir trys signalo laidai (Data, clock, chip select). Dar yra toks LDAC pin'as, jei naudojamas buferis. Tokiu atveju nusiuntus duomenis jie bus patalpinti buferyje iki tol, kol į LDAC bus paduotas žemo lygio impulsas. Jeigu buferis nenaudojamas, LDAC reikia tiesiog prijungti į žemę. Tokiu atveju išėjime įtampa atsiras vos gavus duomenis.

Pajungimas, rezistoriai formuoja daliklį atraminei įtampai.
Mikroschemą pajungiau prie savadarbės plokštės su atmega1284p mikrovaldikliu ir Arduino bootloaderiu.
Iš kart sakau mano - programavimo žinios labai megėjiškos, tai nerekomenduoju remtis mano kodu :).

Kodas paprastas - įtampa įrašoma į kintamąjį vol, vėliau dauginama iš 4096 (Prisiminkite - tai 12bitų keitiklis), ir dalinama iš išmatuotos atraminės įtampos, mano atveju - 2.53V. Tada paimami pirmi (ar paskutiniai?, painiojuosi :) ) vol 8 bitai ir įrašomi į pirmą baitą. Antro baito atveju sudėtingiau - čia turi būti sudėti likę 4 iš 12 bitų bei dar 4 konfigūracijos bitai. Vėliau tie du baitai paeiliui išsiunčiami. Ką koks bitas reiškia žiūrėjau mikroschemos datasheet'e.
 

Na ir ką jūs manot? Puikiausiai veikia! Net nustebau :). 

Paklaida - 0.6mV. Visai neblogai turint omenyje, kad viskas pakabinta ant ilgų laidų, be kondensatorių, ir dar maitinimas iš USB. Oscilogramos patvirtina kad viskas veikia kaip turėtų.
1 kanalas - duomenys, 2 kanalas - chip select signalas

1 kanalas - duomenys, 2 kanalas - clock signalas