K procesoru 30F3013 je připojen DA převodník MCP 4822 pomocí SPI interface. Pro ovládání CS převodníku je použit pin RD8 - pin 15. Uvedený program vysílá dokolečka různá napětí na výstup převodníku hodnoty jsou počínaje návěštím doDAprev: , samozřejmě /1000 Každé napětí vydrží asi 2 sec - dáno čítačem tmr1 pokud by tato doba byla příliš krátká, prodlužte si ji (změna konstanty pro TMR1) V adresáři Obrazky je to celé vyfoceno, podívejte se na konstrukční uspořádání Při programování pomocí PICKITu je nutno připojit PGC a PGD na stejné pacičky, na kterých je připojeno SCK a SDO. NEvadí to, obvod MCP 4822 může být připojen současně s PICKITem. Drátky ale nesmí být příliš dlouhé. Trochu to vzdoruje - doporučuji následující postup: 1. vymazat dsPIC - erase 2. file - import hex 3. write pokud se neudělá erase, není to schopno většinou dsPICa naprogramovat Vycházíme z projektu blikame1 dále inicializujeme modul SPI, který posílá data do DA převodníku ************************************************************************** tohle patří k obvodu 4921, který potřebuje napěťovou referenci na výstupu napěťové reference MUSÍ být kondík 1 mikro - 10 mikro přesně podle katalogového listu , JINAK NEFUNGUJE ***************************************************************************** u převodníku MCP 4921 nebo 4822 Vdd - 5V - to je + napájení _ pin 1 Vss - GND - pin 7 LDAC - pin 5 - může být trvale na 0, potom se data přenesou na vzestupnou hranu CS na výstup SCK je v klidu v 0 , a jde do 1 nejdříve 40 ns po aktivaci CS -taKže to v pohodě spraví několik NOPů SCK má mód 0,0 - nevím moc, co to je data valid jsou na vzestupnou hranu SCK CS musí být na 0 při přenosu minimální délha pulsu SCK (HI, i LO) je 15 ns,, frekvence hodin max. 20MHz ( ??? to ale dá periodu 50ns !!! ) unbuffered mode - buffer na referenční napětí vypnut do převodníku se musí vyslat číslo 0011 DDDD DDDD DDDD DDD...DDD je číslo od 0 do 4095 - velikost napětí takže AND nout s 0x0fff a OR nout s 0x3000 a je to U procesroru 30F3013 přenos se odstartuje zápisem do SPI1BUF předtím dát CS do 0 - to bude na piníku 15 - RD8 SPI1STAT , SPIEN do 1 - enable module ze zbytku bitů se jenom cosi čte SPI1CON u0xu 0101 001s sspp sss secondary perscaller 111 dělí 1 110 dělí 2 000 dělí 8 pp primary perscaller 11 dělí 1 10 4 01 16 00 64 takže pro 000 00 by to dalo 1000 bitů / sec, tedy znak asi za 0,15 sec. ale to by bylo už docela vidět ! když jsme použili tuto hodnotu, bylo možno skutečně na SCL a SDI vidět blikání diody, samozřejmě hodně ryclé - 0.1 sec pro FRC oscilátor interní (tedy clock instrukcí 2MHz) lze dát obě děličky :1, a s DA převodníkem to funguje - tedy rychlost na SDI, SCL je asi 1Mbit / sec, zapojeno drátky do 5 cm na pultíku z obrázku přenosu CKP 0 CKE 1 postup inicializace: vynulovat SPI1STAT zapsat číslo do SPI1CON clearnout bit SPIROV registru SPI1STAT nastavit bitík SPIEN registru SPI1STAT, tím se všechno zapne !!!!!! Důležité !!!!!!!!!!!!!!!! Vono to zároveň VŽDYCKY čte data, takže se MUSÍ přečíst registr SPI1BUF (to je ten, do kterého se zapisuje, a tím se odstartuje vysílání) a také je rozumné vynulovat bitík SPIROV, protože při zahlcení modulu daty to negeneruje další přerušení po odvysílání znaku vynulovat bit SP1IF přerušení: SPI1IF SPI1IE povolit a v přerušovací rutině nezapomenout na nulování SPI1IF a čtení SPI1BUF