16aea48c10ea285a5ce9fa27fa8e9b89f13dff3d
RS485 & RS232 - Invio singolo byte.mediawiki
... | ... | @@ -0,0 +1,52 @@ |
1 | +In questo esempio si inizializzano e si usano le seriali in ambiente linux in protocol mode 0 che si distingue dal mode 1 (detto anche protocol mode syel) per l'invio di singoli byte o pacchetti senza preambolo ne checksum e senza le funzioni di librieria syel. |
|
2 | + |
|
3 | +Nello start.c vengono eseguiti due task |
|
4 | +* rs485_task |
|
5 | +* rs232_task |
|
6 | +Le due funzioni che si vanno ad eseguire lanciando in questi task sono presenti nel file common.h del progetto. Le prime linee di codice sono per l'inizializzazione e apertura della porta alle quali segue un ciclo infinito nel quale si resta in ascolto di eventuali byte in arrivo |
|
7 | + |
|
8 | +``` |
|
9 | +void rs232_task(void) |
|
10 | +{ |
|
11 | + // inizializzazione porta 232 |
|
12 | + MY_COM232 = PortaCOM232; |
|
13 | + com_close(MY_COM232); |
|
14 | + wait(500); |
|
15 | + com_open(MY_COM232, BaudRate232); |
|
16 | + com_disable(MY_COM232); |
|
17 | + protocol_mode(MY_COM232, 0); // protocollo 0 - invio singolo byte |
|
18 | + com_enable(MY_COM232); |
|
19 | + |
|
20 | + while(1) { //******* ricezione pacchetto ********** |
|
21 | + if (com_rx_empty(PortaCOM232)) { |
|
22 | + _idle(); |
|
23 | + } else { |
|
24 | + while (!com_rx_empty(PortaCOM232)) { |
|
25 | + counter_232_packets_rx++; |
|
26 | + retChar = com_rx(PortaCOM232); |
|
27 | + } |
|
28 | + } |
|
29 | + } |
|
30 | +} |
|
31 | +``` |
|
32 | +Nella ricezione del pacchetto si nota come la funzione resti in idle finchè non arriva niente, mentre scarrella byte con la com_rx() finche qualcosa è presente sul buffer incrementando cosi un contatore. Per la 485 è tutto analogo eccetto per la com che è ovviamente diversa. |
|
33 | + |
|
34 | +Per inviare il singolo byte si usa la funzione com_tx |
|
35 | +``` |
|
36 | +void invia232(void) |
|
37 | +{ |
|
38 | + counter_232_packets_tx++; |
|
39 | + com_tx(PortaCOM232, sendChar); |
|
40 | +} |
|
41 | +``` |
|
42 | + |
|
43 | +Nota: com_tx e com_rx sono funzioni dell'ambiente di sviluppo proteus spiegate nel manuale a pagina 34 sezione Porte Seriali. |
|
44 | + |
|
45 | +Per quanto riguarda l'interfaccia dell esempio è molto banale e permette di selezionare un carattere e inviarlo tramite 232 o 485 incrementando i relativi contatori così come anche anche in ricezione |
|
46 | + |
|
47 | + |
|
48 | +L'esempio è stato testato su due dispositivi syel p10 collegati tra loro in RS232 e RS485 ed liberamente scaricabile dal seguente link: |
|
49 | +https://drive.google.com/file/d/1mDu0ULT9rZRgjtvueTfuG594QQA66_V8/view?usp=sharing |
|
50 | + |
|
51 | + |
|
52 | + |