Jump to content
PLC Forum


Sign in to follow this  
Simons

Interrupt Rs232 E Dspic33

Recommended Posts

Simons

salve a tutti.. vorrei sapere secondo voi qual è il metodo migliore per gestire una comunicazione seriale tra pc e pic (nel mio caso dsPIC33FJ128GP202 a 3,3V)

mi spiego

il pic è usato per pilotare 3 servomotori in pwm.

è possibile fare in modo che quando voglio inviare dati sulla seriale rs232 del pic (ad esempio per cambiare qualche parametro) la cosa possa essere fatta al volo senza fermare il resto del programma? una specie di console a riga di comando sulla seriale che però non blocca il resto del programma.. (ho visto alcuni esempi con le funzioni kbhit() e getch() che però restano in attesa dei caratteri da seriale e "bloccano" il programma in quel punto)

utilizzo CCS C Compiler per sviluppare il programma.

posso usare l'interrupt isr_RDA?

grazie dell'aiuto smile.gif

Share this post


Link to post
Share on other sites

Livio Orsini

Se stai usando correttamente l'USART del dsPic non dovresti avere problemi. ogni volta che il buffer di ricezione riceve si scatena un interrupt, quindi l'applicazione principale si interompe per lo stretto necesario del servizio all'interupt.

Ovviamente è necessario valutare quanta percentuale di CPU assorbe il tuo programma di controllo dei motori.

Il "C" della CSC io lo uso per i pic a 8 bit ed è abbastanza ottimizzato. Con i dsPic uso HiTec ed anche quello non mi ha mai causato problemi.

Share this post


Link to post
Share on other sites
Simons

ciao Livio, grazie della risposta..

l'interrupt di cui parli, non ho capito se si scatena a ogni carattere ricevuto oppure se invio una sequenza di caratteri (esempio invio "P00=1") se viene scatenato solo alla ricezione del terminatore "a capo".

oppure

l'interrupt viene scatenato al primo carattere, e avvio un loop finchè non ricevo un carattere terminatore (magari con un timeout) ?

inoltre per convertire una stringa numerica (nel mio caso il numero "1" accanto all'uguale) posso usare la funzione atoi?

grazie dell'aiuto..

Share this post


Link to post
Share on other sites
Livio Orsini

L'interrupt Rx si attiva ad ogni carattere ricevuto. la routine di servizio, solitamente, si limita a trasferire il carattere dal buffer dell'usart al buffer di Rx. Lo svuotamento del buffer Rx dell'usart riabilita automaticamente l'interrupt. Se la routine è fatta decentemente comporta un centinaio di ns di tempo CPU (dipende dal clock) porchè son meno di 5 istruzioni totali.

Poi l'elaborazione dei caratteri ricevuti sarà fatta secondo le condizioni previste dal programma. In genere testo sempre se ricevo "CR" che è il terminatore. Se ricevo questo carattere alzo un flag che andrò a testare qaundo la CPU non ha operazioni più pressanti da eseguire. Ma qui entriamo in argomenti più legati allo scheduling.

Share this post


Link to post
Share on other sites
RESNIC

Ciao,

Io sto utilizzando DSPic33 per effettuare altri compiti, oltre che alla gestione Comunicazione:

void __attribute__ ((interrupt, no_auto_psv)) _U1RXInterrupt(void)

{

unsigned char Pippo;

if (U1STAbits.PERR==1)

{

Pippo=1;

}

if (U1STAbits.OERR==1)

{

U1STAbits.OERR=0;

}

Buffer_in[Puntatore_Buffer_in]=U1RXREG; // Salva il Valore nel Buffer recezione

Puntatore_Buffer_in++;

IFS0bits.U1RXIF = 0;

}

Poi su altra routine:

if (Puntatore_Buffer_in>=Target_puntatore)

{

if (CRC16(Buffer_in,Target_puntatore-2,1)==0)

{

Errori_Trasmissione++;

CANCELLA_BUFFER(buff);

}

else

{ ecc ecc

Diciamo che in questo caso è il DSPic 33 che fa da Master, e quindi ho scritto routine, sapendo quale dovesse essere lunghezza d'arrivo.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...