Vai al contenuto
PLC Forum


Modulo Aurel


eclissi123

Messaggi consigliati

Salve, voglio fare comunicare due microcontrollori ( un PIC16F876 e PIC16F877A) con l'utilizzo di due moduli aurel rtf-data-saw. Ho creato due circuiti (distanti non piu' di dieci metri) ed ho collegato i microcontrollori ai rispettivi moduli aurel attraverso i piedini PINC6 (TX) e PINC7 (RX).

Uso il modulo USART con 1200 baud. Inoltre utilizzo un compilatore C e le funzioni messe a disposizione getc() e putc(). Vado al probleama... invio un carattere (putc(0xAA)) ma non ricevo niente dall'altra parte, cos'è che sbaglio?

Ho provato la connessione senza moduli aurel (connetendo tramite fili RX/TX...) ed utilizzando un'unica alimentazione, in questo modo la comunicazione funziona perfettamente.

Grazie per l'aiuto

Link al commento
Condividi su altri siti


ifachsoftware

Se usi la funzione cerca troverai del mio codice in C per fare quanto ti interessa.

Comunque il tuo problema dovrebbe essere che alla prima trasmissione dovresti inviare una serie di caratteri fittizi e poi la stringa vera e propria (i primi li scarti e i successivi li decodifichi) il tutto serve a stabilizzare la trasmissione .

Ciao :)

Link al commento
Condividi su altri siti

Grazie ifachsoftware per avermi risposto.

Ho provato a mandare una serie di caratteri fittizi ma il risultato è sempre lo stesso non ricevo niente. Il trasmettitore lo accendo solo durante una trasmissione (per ogni accensione gli do una pausa di 500 ms) può essere questo il problema? Devo tenerlo sempre acceso il trasmettitore?

Ho notato che il PIN di trasmissione del PIC rimane acceso in assenza di trasmissione, è normale?

All'inzio il ricevente (anche se non si trasmettitore non invia niente) riceve una serie di 0 come se nel pin C7 (RX) non c'è collegato niente, ho controllato e ricontrollato le connessione e sono corrette.

Può essere che sbaglio qualcosa nel codice? Riporto il trasmettitore:

while(1){

if(kbhit()){

data = getchar();

printc("Dato ricevuto!!"); //Stampa su LCD

delay_ms(2000);

clr();

for(i=0;i<8;i++){

if(bit_test(data,i))

printc('1');

else

printc('0');

}

delay_ms(2000);

clr();

printc("In ricezione...\n");

}

}

Il trasmettitore:

//Invio una serie i stringhe insignificanti...

output_high(PIN_C5);

delay_ms(500);

putc(0xff);

putc(0xAA);

putc(0xff);

putc(0xAA);

putc(0xff);

........

delay_ms(500);

while(TRUE){

clr();

printc("Trasmettere?\n");

printc("Si\b->\bOK");

while(!input(PIN_B7))

delay_ms(1);

clr();

output_high(PIN_C5); //accendo il trasmettitore

delay_ms(500);

printc("Inizio...");

delay_ms(1000);

putc(0xAA);

delay_ms(100);

clr();

printc("Dato\bTrasmesso!!");

delay_ms(2000);

output_low(PIN_C5);

}

Grazie per l'aiuto

Link al commento
Condividi su altri siti

Niente, ho provato con printf ma il problema rimane lo stesso. Sarà che sbaglio la connessione dei pin nel modulo AUREL? Riporto lo schema:

PIN 1 -> GND

PIN2 -> TX (PIN_C6 del PIC)

PIN6 -> GND

PIN8 -> PIN_C5 del PIC

PIN9 -> Antenna (filo di rame lungo 17 cm)

PIN10 -> GND

PIN20 -> GND

PIN23 -> RX (PIN_C7 del PIC)

PIN25 -> +5 V

Ho seguito il datasheet.

Link al commento
Condividi su altri siti

Salvo fai come dice ifach. Non puoi inviare via radio i dati come se usassi un cavo 232

Devi usare una codifica bilanciata (es. Manchester) dei dati e un header noto per sincronizzare l'inizio messaggio. Il tuo modulo Aurel fa da solo questo o lo devi fare tu?

Non c'è problema ad accendere/spegnere il trasmettitore anzi penso la trasmisisone continua della protante sia vietata quindi devi accendere/spegnere.

Il ricevitore raccoglie tutto quello che trova in funzione della sua sensibilità. Devi aspettarti commutazioni indesiderate e ricezioni spurie sulla linea del ricevitore che filtri sw.

Link al commento
Condividi su altri siti

Infatti avevo l'intenzione di utilizzare la codifica Manchester, ma il problema è che non ricevo niente neanche un bit.

Perché all'inizio il ricevitore riceve una serie di zeri anche se il trasmettitore non invia niente?

Se scollego al ricevitore il modulo Aurel è la stessa cosa.

Link al commento
Condividi su altri siti

Io farei questa prova accendi il trasmettitore.

Sull'RX del ricevitore devi avere un segnale stabile che corrisponde allo stato di riposo della linea RX.

(Sarebbe meglio controlloare con un oscilloscopio).

Se anche così l'RX si muove il problema è nei moduli radio o nella loro cconfigurazione (se c'è)

Se invece è corretto io provere a collegare il modulo trasemttitore al PC così puoi fare tutte le prove che vuoi. Con qualsiasi programma tipo Hyperterminal mandi un carattere al ricevitore e vedi cosa succede.

Sei sicuro che nei dintorni non ci sia nessuno sulla stessa frequenza?

Modificato: da accacca
Link al commento
Condividi su altri siti

Accaca ho risolto il problema, usando la comunicazione su protocollo Rs232 il segnale di riposo è alto mentre con il modulo aurel il segnale di riposo deve rimanere basso. Quindi, ho inserito il parametro INVERTER nella direttiva #use rs232 e adesso funziona perfettamente.

Ho risolto il problema riflettendo su quello che mi hai detto:

"Non c'è problema ad accendere/spegnere il trasmettitore anzi penso la trasmisisone continua della protante sia vietata quindi devi accendere/spegnere."

Grazie per l'aiuto

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...