
Har fått hem en DAC som *har* SPI (till skillnad från den andra jag provade..) Så nu ska det fungera bättre. Men efter några försök i MikroBasic så har jag insett att behöver lite hjälp.
Men först lite info:
I detta test tänkte jag skicka $FFF (alla 12 bitar satta) och $0 till DAC'en med en halv sekunds intervall. Detta för att enkelt se så att jag får ut rätt värde på A-utgången på DAC'en. (Mäter utgången med mätinstrument.)
PIC-kretsen kan max skicka ut 8 bitar och DAC'en kan ta emot 12 bitar. Med andra ord behöver jag skicka 8 bitar, kolla så de är skickade och sedan skicka resterande 3 bitar. Eller har jag missförstått något? I PIC'en finns "BF" (SSPSTAT-registret) men det används bara när man skickar data *till* PIC-kretsen. Jag hittar inte var jag läser av när alla 8 bitar är skickade....
Nu till mitt huvudsakliga problem:
I databladet för DAC'en står det att man skickar data till DAC'en så här:
1. CS (väljer A/B-utgång) ska vara låg *före* den första SCLK-signalen blir låg.
2. Det ska vara 16st låga SCLK innan CS blir hög. Under den tiden sänds datan.
Hur gör man detta på ett bra sätt? Jag har inte lyckats. Det går ju att göra med tok-extrem bitbanging som i detta exemplet:
PORTA.1 = 1 ' CS hög
PORTA.0 = 1 ' SCLK hög
PORTA.1 = 0 ' CS låg
KORT DELAY
PORTA.0 = 0 ' SCLK låg
PORTA.2... SKICKA FÖRSTA DATABITEN
PORTA.0 = 1 ' SCLK hög
KORT DELAY
PORTA.0 = 0 ' SCLK låg
PORTA.2... SKICKA ANDRA DATABITEN
PORTA.0 = 1 ' SCLK hög
osv tills allt är skickat. Men det skulle bli rena chock-koden.

Så: Hur löser jag det på ett snyggt sätt i MikroBasic? Jag ska senare använda båda kanalerna till ett projekt.
(Hoppas jag skrivit det ni behöver veta.)
edit: DAC'en har 12 databitar, inte 11 som jag skrev förrut..