LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: pedrosal em 19 de Outubro de 2009, 22:45
-
Já consegui colocar a comunicação a funcionar mas não fiquei contente com a solução...
A história é a seguinte. Tenho dois PIC do tipo 18 ligados por SPI. O master transmite dados para o slave que contem uma ligação USB para o PC. Na minha arquitectura a ideia é existir um PIC dedicado às questões relacionadas com comunicação e outro ao processamento propriamente dito, daí a ligação.
No master tenho este código:
OpenSPI(SPI_FOSC_64, MODE_00, SMPMID);
....
TRISCbits.TRISC2 = 0;
PORTCbits.RC2 = 0;
Delay10TCYx(100);
safePutsSPI(buffer);
Delay10TCYx(100);
PORTCbits.RC2 = 1;
Delay10TCYx(100);
A variável buffer é um string com cerca de 12 chars.
void safePutcSPI(unsigned char c)
{
unsigned char echo;
unsigned char retries;
TRISCbits.TRISC2 = 0;
PORTCbits.RC2 = 0;
Delay10TCYx(1);
while(1)
{
echo=0;
WriteSPI(c);
ReadSPI();
Delay10TCYx(1);
retries = 0;
while(retries < 10)
{
if(DataRdySPI())
{
echo = ReadSPI();
}
else
{
Delay10TCYx(1);
retries++;
}
}
if(echo == c)
{
break;
}
}
PORTCbits.RC2 = 1;
Delay10TCYx(1);
}
O meu RC2 é o Slave Select e está ligado ao SS do slave (naturalmente :) ).
Do lado do Slave tenho:
Ao iniciar:
OpenSPI(SLV_SSON, MODE_00, SMPMID);
No loop:
if(DataRdySPI())
{
received = getcSPI();
if(received != '\0')
{
buffer[bufferCurrent]=received;
if(bufferCurrent == 11)
{
... send via usb
}
}
else
{
bufferCurrent++;
}
}
Gostava de saber se alguém conhece alguma solução para eu me ver livre do diabo dos delays e se existem algumas bibliotecas que me possam ajudar. Esta era supostamente a parte fácil do meu projecto :).
-
Posso ver-me livre dos delays assim:
http://www.microchipc.com/Hi-Tech_C_multitask/ (http://www.microchipc.com/Hi-Tech_C_multitask/)