USART RX su PIC18F4550

9 Anni 9 Mesi fa #1 da Nutshell
USART RX su PIC18F4550 è stato creato da Nutshell
Salve a tutti, sto cercando di inviare un byte da un pic a un altro ma c'è qualcosa che non quadra.

In pratica sto usando la libreria usart.h che permette di inviare e ricevere paccheti di 1Byte tramite le funzioni WriteUSART(BYTE); e ReadUSART();

Entrambi i pic, collegati ad un computer inviano correttamente il byte, che viene letto perfettamente, il modulo usart è quindi correttamente impostato sul corretto baudrate.

Purtroppo in fase di ricezione il pic che chiameremo "slave" non riceve nulla. Più precisamente, viene chiamato l'interrupt, viene eseguita correttamente la routine di interrupt, ma il byte letto, in qualunque condizione, risulta essere "0". Qualcuno ha avuto esperienze simili in merito? Premetto che in passato non ho mai avuto problemi del genere, mi sorge solo il dubbio che il modulo RX sia danneggiato.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
Di più
9 Anni 9 Mesi fa #2 da alfa75
Risposta da alfa75 al topic USART RX su PIC18F4550
ciao Nutshell
puoi postare il codice ?
così escludiamo che ci siano errori

altra domanda (stupida :) ) hai collegato i pin rx e tx dei pic in modo incrociato?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 9 Mesi fa - 9 Anni 9 Mesi fa #3 da Nutshell
Risposta da Nutshell al topic USART RX su PIC18F4550
Allora... il collegamento è il seguente: Dal TX del primo PIC vado al pin RX del secondo PIC, e dal pin TX del secondo PIC vado al computer. La trasmissione funziona perfettamente con entrambi i pic collegati direttamente al computer, l'inghippo sorge quando i due sono in cascata.

Il codice dell'interrup routine è il seguente semplicissimo:


#pragma interrupt ISRH
void ISRH(void)
{
//INTERRUPT ROUTINE PER GESTIONE INPUT USART
if (RCIF)
{
BYTE_1=ReadUSART();

RCIF=0;
}

}


Fatto questo, all'interno del main, in un ciclo infinito succede questo:

while (1)
{
if (BYTE_1)
{
Write_USART(BYTE_1);
BYTE_1=0;
}
}


A questo punto, ogni volta che invio un byte dal primo pic, il secondo dovrebbe rigirarlo al computer, ma invece al computer arrivano sempre e solo ZERI.


Inoltre ora sono certo che il problema non sia hardware perchè ho sostituito il pic per essere certo. L'unico piccolo dubbio resterebbe sul fotoaccoppiatore che ho messo sull'ingresso del pin RX, ma l'ho ricontrollato più volte, e poi è un circuitino che uso sempre anche con altri pic e funziona sempre..
Ultima Modifica 9 Anni 9 Mesi fa da Nutshell.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
Di più
9 Anni 9 Mesi fa - 9 Anni 9 Mesi fa #4 da alfa75
Risposta da alfa75 al topic USART RX su PIC18F4550
non mi risulta che le periferiche uart possono essere messe in cascata
semmai puoi lasciare il collegamento uart tra un pic verso il pc, e far comunicare i pic tramite spi(con questo protocollo puoi mettere dispositivi in cascata)
Ultima Modifica 9 Anni 9 Mesi fa da alfa75.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 9 Mesi fa #5 da Nutshell
Risposta da Nutshell al topic USART RX su PIC18F4550
Grazie per la risposta, la mia idea inizisle era proprio quella di usare il modulo spi, ma mi servivano i pin destinati al modulo e non mi andava di perdere tempo a implementare una funzione spi rx senza interrupt a disposizione etc.. In ogni caso i moduli usart possono benissimo essere usati in cascata, al costo di un leggero ritardo. Attualmente il problema è che sul buffer di ricezione dell'usart mi ritrovo sempre 0

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login