ciao a tutti!
ho il seguente codice che viene usato per leggere i dati inviati dal pc. (valori rgb.)
sono pacchetti da 4 byte. il primo byte é una @ che indica l inizio di un pacchetto, poi seguono RGB.
il mio problema é che se invio tanti dati uno dopo l altro il pic si blocca. e devo togliere e rimettere l alimentazione per farlo riprisitnare. succede solo inviando tanti dati di fretta. non succede se li invio a distanza di qualche secodno. per veloce intendo 1 pacchetto ogni 10 ms. (che in teoria dovrebbe essere lentissimo come tempo.. ) questo probelma me lo fa solo da poco.
cosa puo essere? vedete un errore di fondo nel mio programma? dato che non fa nient altro non ho usato interrupt...
il pic é un 18f4431. vi posto soltanto il loop principale perche il resto funziona tutto correttamente.
Codice:
while (1) {
while(!DataRdyUSART());
data = ReadUSART();
if (data == 0x40)
{
PORTCbits.RC1 = 0;
while(!DataRdyUSART());
datar = ReadUSART();
while(!DataRdyUSART());
datag = ReadUSART();
while(!DataRdyUSART());
datab = ReadUSART();
duty_cycle2 = datar;
duty_cycle = duty_cycle2;
outH = duty_cycle >> 8; ////questa riga serve a fare lo shifting se modifico i valori pwm.
outL = duty_cycle & 0b11111111;
PDC0H = outH;
PDC0L = outL;
duty_cycle2 = datag;
duty_cycle = duty_cycle2;
outH = duty_cycle >> 8;
outL = duty_cycle & 0b11111111;
PDC1H = outH;
PDC1L = outL;
duty_cycle2 = datab;
duty_cycle = duty_cycle2;
outH = duty_cycle >> 8;
outL = duty_cycle & 0b11111111;
PDC3H = outH;
PDC3L = outL;
PORTCbits.RC1 = 1;
}
if (RCSTAbits.OERR == 1)
{
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1;
}
}