Beste mensen,
Ik wil graag met SPI het volgende doen:
De PIC16F886 staat als master:
void init(void)
{
TRISA=0b00000000; //porta as output
ADCON0=0b00000000; //adc off
TRISC=0b00010000; //sck,sdo output sdi input
SSPSTAT=0b01000000; //sampled at middle,cke
SSPCON=0b00110001; //ssp on, master 1/16 tosc
}De MCP23S08 zit op het PICkit Serial SPI Demo Board INFO en stuurt 8 ledjes aan.
Met de Serial Analyzer van Microchip kan ik zonder problemen de ledjes aanzetten door met het bijgeleverde programma de juiste registers te benaderen en daar de juiste bits te setten.
Nu moet dat dus met de PIC16F886, die als master staat ingesteld.
Er moeten een aantal hex waarden achter elkaar gestuurd worden om de registers in te stellen van de MCP23S08. In mijn code is dat nog niet netjes (alles heb ik gewoon achter elkaar gezet) maar het gaat om het idee.
void main(void)
{
PORTA=0b00000000; //enable ss (low)
SSPBUF=0x40;
while (SSPSTAT.0!=0)
{
;
}
long a=SSPBUF;
PORTA=0b00100000;
}Opmerking: ik weet niet zeker of 'long a=SSPBUF' goed is.
Dit stukje code doe ik dan een paar keer achter elkaar (afhankelijk van hoevaak het nodig is) om de registers in te stellen.
Echter....(zoals je wel kunt raden)....dit werkt niet.
Aan het eind van de code controleer ik of er een overflow van het buffer heeft plaatsgevonden, maar dat is niet het geval.
Kan deze code zo? Zoniet, wat moet er anders?
Bij het programmeren heb ik gebruik gemaakt van DEZE pdf.