Configurare il modulo LORA E220-900T22D_EBYTE.

Programma LORA_config in Visual Basic 2022.

 

Mi capita spesso di ritrovarmi a leggere articoli e  recensioni sul  famoso modulo Lora tanto rinomato per la sue capacità di comunicare a Lunga distanza(tecnologia di telecomunicazione a lungo raggio (long range), meglio conosciuta come LoRaWAN (Low Power Wide Area Network)).

Ogni volta che lo ritrovo nelle mie ricerche su Internet la domanda è la stessa. Sarà veramente in grado di coprire distanze così rilevanti come vanta la

Pubblicità e la documentazione circolante?

Posso trovare la risposta solo provando praticamente il modulo.

Queste pagine, riassumono quanto ho sperimentato personalmente per soddisfare la mia curiosità.

 

 

Reperimento del modulo:

Personalmente ho acquistato il modulo su Amazon come illustrato di seguito.

Naturalmente ho acquistato due moduli. Uno per la trasmissione ed uno per la ricezione.

Il prezzo mi è sembrato ragionevole.

Ma.. per la trasmissione è necessario anche una antenna.

Qui le spese cominciano ad aumentare.

Dopo una serie di recensioni/filmati che descrivevano l’effettiva efficacia dei vari modelli circolanti, mi sono ancora una volta

Rivolto ad Amazon acquistando una coppia di antenne del tipo sotto riportato.

La scelta è stata fatta

1)  prima di tutto per l’efficacia decantata da diverse ‘prove  fatte da curiosi come me.

2)  Il connettore per connettermi al modulo era OK.

3)  La confezione era già di due pezzi.(quanti ne servivano a me!)

 

Nell’attesa del materiale ho letto e riletto il Manuale( pdf) di utilizzo del modulo scaricabile dal sito della Ebyte..

Linck al pdf su questo siro.

Lettura del Manuale.

Caratteristiche generali:

----- Trasmissione con modulazione LoRA per grandi distanze e a bassa interferenza di rumore

----- In condizioni ideali la comunicaz. Può raggiungere i 5,5Km. In ogni caso la capacità di trasmettere a distanza è migliore

       rispetto alla tradizionale GFSK.

----- Trasmissione a Punto-Fisso(da un dispo. all’altro), oppure in Broadcast(tutti trasmettono e tutti ricevono, comunicazione aperta),

       Monitoraggio del canale.

------ Utilizzo del Protocollo/Metodo FEC(forward error correction) che garantisce la stabilità della comunicazione

------ Risveglio in modo radiofonico. (Air wake-up (ultra-low power consumption ) , selezionabile per avere un consumo molto basso(utilizzo a batterie)

------ Grande stabilità dell’oscillatore che assicura stabilità ed affidabilità!

------ Trasmissione massima 20dBm con possibilità di regolazione/configurazione.

------ Supporta la banda utilizzata in Europa 862/915MHz

------ Velocità di trasmissione da 300 a  19200 bps

------ 2,3v / 5,5V di alimentazione. Una tensione maggiore di 3,3v può garantire le migliori prestazioni.

         (Altrove, su questo stesso Data sheet  viene segnalato che per tensioni di alimentazione inferiori a 5v la potenza

          trasmissiva può NON essere quella massima garantita e che per tensioni eccedenti i 5,5v è molto probabile guastare

          il modulo.

------ Temperature di utilizzo. -40 / 85°C

 

 

1.1       Introduzione

L’E32-900T20D è un modulo seriale wireless basato sul chip SX1276 RF.  Il Modulo ha molteplici modi di trasmissione

che lavorano tra 862/915MHZ. In tecnologia LoRA via aerea e con uscite TTL (RS232).

La velocità di default di trasmissione via radio è di 2k4ps.

 

Dimensioni e definizione dei Pin

 

 

n.

Nome

Direzione

Funzione

1

M0

Input

Per determinare i quattro modi di lavoro. Non lasciare scollegato il pin.

2

M1

Input

Per determinare i quattro modi di lavoro. Non lasciare scollegato il pin.

3

RXD

Input

TTL input UART(segnale RS232)Da collegare al pin TX del Dispo. esterno che deve comunicare.

4

TXD

output

TTL output UART(segnale RS232)Da collegare al pin RX del Dispo. esterno che deve comunicare.

5

Aux

output

Utilizzato per vedere lo stato di lavoro corrente del modulo.Quando attivo MCU esterna, l’uscita è LOW per il tempo di inizializzazione.

6

Vcc

Input

Alimentazione positiva (2.3v / 5,5V

7

GND

Input

Ground

 

 

 

Collegamenti ad un Microcontrollore generico.

 

ATTENZIONE:

Sebbene il modulo vada alimentato a 5v, la comunicazione via TXD ed RXD deve essere fatta a 3,3v!!!!!

E’ specificato che il segnale a TR/RX non dovrà mai  eccedere  i 3,3v. Trascurare questo aspetto può

Danneggiare permanentemente il modulo.

 

 

 

Descrizione Funzioni/modalità trasmissione.

 

 

5.1 Fixed Trasmission:

Quando, il modulo viene configurato per la trasmissione Fixed(bit7 del byte OPTION)

I primi tre bytes dei dati trasmessi, indicano l’indirizzo(alto e basso) ed il canale.

In questa modalità di trasmissione, riceverà i dati(successivi al terzo byte) solo

il modulo che possiede l’indirizzo ed il canale specificato dal trasmittente.

Questa trasmissione coinvolge solo due moduli.

 

 

 

 

 

 

 

 

 

 

 

 

 

Settando l’indirizzo del modulo TRASMETTENTE a 0000h oppure  A  FFFFH, si attua la trasmissione BroadCast. Tutti i moduli(sul canale specificato) riceveranno i dati a prescindere

Dall’indirizzo posseduto!.

 

 

 

 

 

 

 

 

 

 

 

 

6     Modi di lavoro

Ci sono quattro modi di operare che sono settati dai pin  M0  ed M1. La tabella seguente spiega.

 

Modo

M0

M1

Spiega

osservazioni

0= normale

0

0

I canali UART(RXTX) e wirless sono attive. Trasmissione trasparente

Il ricevitore può lavorare in modo 0 oppure 1.

1=risveglio

1

0

I canali UART e wirless sono attivi. L’unica differenza con il modo zero è che prima della trasmissione dati, incrementa il codice di risveglio automaticamente cosi da risvegliare il ricevitore dal modo 3.

Il ricevitore può lavorare in modo 0 oppure 1

    oppure 2

2= risparmio energetico

0

1

Canale UART spento. Il canale wireless è in modalità risveglio, dopo aver ricevuto i dati UART si attiva e spedisce i dati.

Il trasmett. Deve essere in modo 1. Incapace di trasmettere in questo modo.

3= dormiente

1

1

Sleep mode. Utilizzato per settare i parametri del modulo.

Puoi travare i dettagli nella sezione dedicata al settaggio dei parametri.

 

Modificando lo stato logico dei due pin M0 ed M1 si può scegliere la modalità operativa.

Dopo la modifica dei pin, si dovrà attendere 1ms prima di lavorare nella nuova modalità(se non ci sono dati in coda).

In ogni caso, è possibile operare quando il pin AUX =1, in caso contrario si dovrà attendere.

 

 

6.2      Modo Normale – Modo 0,   (M0 ed M1 sono LOW)

 

 

(M0 ed M1 sono LOW)

Trasmissione

Il modulo può ricevere i dati utente tramite porta seriale e trasmettere pacchetti dati wireless di 58 byte. Quando i dati immessi dall'utente raggiungono i 58 byte, il modulo avvia la trasmissione wireless. Durante questa fase, l'utente può immettere dati in modo continuo. Quando i byte di trasmissione richiesti sono inferiori a 58 byte, il modulo attende 3 byte e considera questo tempo come una terminazione dei dati, a meno che l'utente non immetta dati in modo continuo. A questo punto, il modulo trasmette tutti i dati tramite il canale wireless. Quando il modulo riceve il primo pacchetto dati dall'utente, l'uscita AUX emette un livello basso. Dopo che tutti i dati sono stati trasmessi al chip RF e la trasmissione è iniziata, l'uscita AUX emette un livello alto. A questo punto, significa che è iniziata la trasmissione dell'ultimo pacchetto dati wireless, consentendo all'utente di immettere altri 512 byte in modo continuo. Il pacchetto dati trasmesso dal modulo in modalità 0 può essere ricevuto solo dal modulo in modalità 0 o 1.

 

Ricezione

La funzione di ricezione wireless del modulo è attiva, il pacchetto dati trasmesso dal modulo in modalità 0 e 1 può essere ricevuto. Dopo la ricezione del pacchetto dati, l'uscita AUX è a livello basso; 5 ms dopo, il modulo inizia a trasmettere dati wireless tramite il pin TXD della porta seriale. Dopo che tutti i dati wireless sono stati trasmessi tramite la porta seriale, l'uscita AUX è a livello alto.

 

 

 

6.3      Modo Risveglio – Modo 1,    (M0 = 1  e M1 =0)

 

 

(M0 = 1  e M1 =0)

 

Trasmissione

Le condizioni di trasmissione dei pacchetti dati e della funzione AUX sono le stesse della modalità 0. L'unica differenza è che il modulo aggiungerà automaticamente un codice preambolo prima di ogni pacchetto dati. La lunghezza del codice preambolo dipende dal tempo di riattivazione impostato nei parametri utente. Lo scopo del codice preambolo è riattivare il modulo ricevente che funziona in modalità 2. Pertanto, il pacchetto dati trasmesso dalla modalità 1 può essere ricevuto dalle modalità 0, 1 e 2.

Ricezione

Lo stesso della modalità 0.

 

 

 

 

6.4      Risparmio energetico – Modo 2,    (M0 = 0  e M1 =1)

 

 

(M0 = 1  e M1 =0)

 

Trasmissione

L'UART è chiuso, il modulo non può ricevere dati dalla porta seriale dall'esterno della MCU. Pertanto, la funzione di trasmissione wireless non è disponibile per il modulo che opera in questo modo.

Ricezione

In modalità 2, è necessario che il trasmettitore dati funzioni in modalità 1. Il modulo wireless monitora il codice preambolo a intervalli regolari. Una volta ricevuto il codice preambolo, rimarrà in stato di ricezione e attenderà il completamento della ricezione dell'intero pacchetto dati valido. Quindi, l'uscita AUX emette un livello basso e, 5 ms dopo, la porta seriale si apre per trasmettere i dati wireless ricevuti tramite TXD. Infine, l'uscita AUX emette un livello alto al termine del processo. Il modulo wireless rimane in stato di "risparmio energetico - monitoraggio" (polling). Impostando un tempo di riattivazione diverso, il modulo avrà un ritardo di risposta in ricezione diverso (2 s al massimo) e un consumo energetico medio diverso (30 µA al minimo). L'utente deve raggiungere un equilibrio tra il tempo di ritardo della comunicazione e il consumo energetico medio.

 

 

6.5      Dormiente – Modo 3,    (M0 = 1  e M1 =1)

 

 

(M0 = 1  e M1 =0)

 

Trasmissione

N/A

Ricezione

N/A

Settaggio parametri

Questa modalità può essere utilizzata per l'impostazione dei parametri. Utilizza le porte seriali 9600 e 8N1 per impostare i parametri di funzionamento del modulo tramite un formato di istruzioni specifico. (Per i dettagli, fare riferimento all'impostazione dei parametri)

Note

Quando la modalità passa da stand-by ad altre, il modulo reimposta i suoi parametri, durante i quali l'uscita AUX mantiene un livello basso per poi emettere un livello alto una volta completato il reset. Si consiglia di controllare il fronte di salita dell'uscita AUX per l'utente.

 

 

7      Formato dei comandi

In modalità sospensione (Modalità 3: M1=1, M0=1), supporta le istruzioni elencate di seguito.

N.B. i byte che costituiscono le istruzioni, devono essere inviati consecutivamente.

n.

Formato istruzione

Spiega

1

        C0+parametri

         da settare

C0 + i cinque byte che specificano i parametri di lavoro,  vengono  inviati in formato esadecimale. Sono 6 byte in totale e devono essere inviati in successione (salva i parametri quando viene spento).

2

C1+ C1+ C1

Vengono inviati tre C1 in formato 16 decimale e il modulo restituisce i parametri salvati,

3

        C2+parametri

        da settare

C2 + 5 byte di parametri di lavoro, per un totale di 6 byte, devono essere inviati ininterrottamente (lo spegnimento non salva).  (Come l’istruzione n.1 ma non salva!)

4

C3+ C3+ C3

tre C3 in formato 16decimale e il modulo restituisce informazioni sulla versione,

5

C4+ C4+ C4

tre C4 in formato 16decimale producono un reset.

 

7.1                  Parametri di Default (attenzione discrepanza. Ultimo byte(option)Sul Datasheet riporta 40h ma dai calcoli è 44h)

          Valori dei parametri predefiniti: C0 00 00 1A 17 44

 

Modello

Frequenza

Indirizzo

Canale

Velocità dati Radio

Baud Rate

Parita(settaggio porta Seriale)

Potenza di trasmissione

 

E32-900T20D

868

0000

06h

2400

9600

8N1

100mW

 

 

7.2                 Leggere i parametri

 

Istruzione

Spiega

C1+ C1+ C1

In modalità di sospensione (M0=1, M1=1),

l'utente impartisce l'istruzione al modulo (formato HEX): C1 C1 C1,

il modulo restituisce i parametri di configurazione correnti.

Ad esempio, C0 00 00 1A 17 44.

 

7.4                 Comando di reset

 

Istruzione

Spiega

C4+ C4+ C4

In modalità di sospensione (M0=1, M1=1),
l'utente impartisce al modulo un'istruzione (formato HEX): C4 C4 C4, il modulo si resetta. 
Durante il processo di reset, il modulo esegue un autocontrollo e le uscite AUX raggiungono il livello basso.
Al termine del reset, le uscite AUX raggiungono il livello alto, quindi il modulo riprende a funzionare regolarmente.
È possibile cambiare la modalità di funzionamento o ricevere un'altra istruzione.

 

 

 

7.5               Configurazione Parametri di comando

 

 

Operazioni di base – Progettazione dell’Hardware.

………………..  omissis…………

 

 

 

------------------------------------------                                                  ------- fine data sheet ----------                                                  ------------------------------------------                                                  ------------------------------------------                                                 

 

 

!!!!

 

 

 

Considerata la moltitudine di bit da configurare e la possibilità di commettere errori nella verifica pratica, ho pensato di realizzare un Programma (naturalmente in Visual Basic!) che mi consentisse semplicemente e CHIARAMENTE di configurare il modulo con pochi colpi di click, concentrandosi sulla configurazione, senza distrarsi.

Collegare il modulo tramite il solito FTDI 232 al PC mi è sembrata la soluzione più semplice anche perché avrei dovuto comunque realizzare un HW di collegamento al PC-modulo per i test successivi.

 

Montaggio volante per connettere il modulo al PC ed eseguire il programma ‘Lora_config’ che configura il modulo in modo rapido(istantaneo)

 

Seguirà, il montaggio più ordinato su millefori con tanto di

Jumper per settare le modalità(M0, M1) e solido fissaggio dell’insieme.

 

 

 

 

 

 

 

 

 

 

 

 

Per i test successivi infatti utilizzo uno dei due moduli collegato al PC (con relativo SW di gestione) e l’altro

ad un Microcontrollore (con relativo SW di gestione) .

Un Programmino in V.B. che gira in modo autonomo sul PC manda e riceve dati che vengono a loro volta rispediti dalla scheda MCU-Modulo.

 

 

 

 

Programma in Visual Basic per configurare ‘al volo’ il modulo.

Immagine del Form che andremo a realizzare. 

Fig.10

Breve spiega sul funzionamento.

Il Form è diviso in tre Gruppi di comandi con tre colori differenti:

Giallo -  All’avvio si dovrà specificare (come per ogni periferica USB-seriale) il COMM disponibile al collegamento sul nostro PC.

Rosa – Alla pressione del tasto LEGGI, appariranno:

             nella finestra Rosa-scuro i 5 bytes che rappresentano la configurazione.

             Nella rimanete finestra Rosa-chiaro, le specifiche per ogni byte letto

             Corrente.  Le TextBox della finestra rosa-chiaro sono a sola lettura.

Azzurro – Alla pressione del tasto ‘SCRIVI NEL MODULO I DATI A LATO (salvando), tutti i dati che abbiamo

                 Scritto nelle TextBox della finestra Azzurra saranno trascritti nel modulo. Nota che. Mentre scriveremo

                 I nuovi dati da trasferire nel modulo, per la nostra configurazione personalizzata, le caselle nella finestra azzurro –  

                 scuro aggiorneranno il valore di ogni byte (BYTES DI CONFIGURAZIONE(DA MANDARE)) in funzione delle scelte

                 specifiche che opereremo(alzi ed abbassi bit!). Notiamo, ad esempio che nella finestra azzurra abbiamo scelto un BaudRate diverso

                  rispetto alla configurazione di default ed infatti il byte SPEED da mandare è diventato 32h invece di 1Ah.

 

 

 

 

Breve filmato che illustra il funzionamento

 

 

 

Stesura Programma.

Prima di aprire l’IDE di V.B. e procedere alla stesura del codice, è opportuno, come di consueto, cercare quantomeno di ‘abbozzare’ uno schema di flusso.

Nel nostro caso, teniamo conto che il V.B. lavora in polling (diversamente dalla solita modalità utilizzata dove ogni operazione è successiva alla precedente)

Fig.11

 

 

Apriamo il nostro Visual Studio 2022 e clicchiamo sul tasto ‘CREA NUOVO PROGETTO’

Scegliamo il tipo di programma facendo attenzione a non confondersi! (con calma 😊)

Linguaggio Visual Basic – Selezionare App Windows Form(.NET Framework)

Diamo un nome al progetto, nel mio caso LoRA_1 e osserviamo dove creerà la cartella di progetto.

 

Siamo nell’IDE.

Creiamo un po' di oggetti e posizioniamoli sulla Form1.

Dovremo posizionare tre GroupBox(gialla,azzurra,rosa).

 Ognuna conterrà gli oggetti relativi al proprio Gruppo di oggetti. Vedi Fig.10.

Nel GroupBox giallo posizioniamo:

---   Un ComboBox (destinato ad accettare il porto selezionato libero sul PC)

---   Una Label(Seleziona porto disponibile)

 

Nel GroupBox rosa posizioniamo:

--- Altre cinque GroupBox destinate a contenere i dati letti,

    INDIRIZZO, SPEED, CANALE, OPTION, BYTES LETTI.

---   Ogni GroupBox conterrà Label e TextBox necessari a contenere scritte e dati.

      N.B.  I dati letti non potranno, naturalmente essere modificabili dall’utente e quindi

               tutte le caselle sono destinate esclusivamente alla lettura. Usare Label.

----  Nel GroupBox rosa-scuro posizioniamo anche un Button per avviare la lettura.

 

Nel GroupBox Azzurro posizioniamo:

 

----    Sei GroupBox  destinate a contenere Le TextBox che l’utente potrà modificare per specificare i

         parametri personali da configurare (parte azzurro chiaro) e quelle che verranno riempite con i dati

        ‘automaticamente’ generati dalle scelte sopra operate (parte azzurro scuro).

 

 

 

Codice Form1_Load     ---   finestra gialla.

All’avvio carica il codice necessario per dare la possibilità all’operatore di selezionare una Un Porto disponibile sul nostro P.C.

Dim portoMio As Array 'Matrice che contiene i numeri dei Porti liberi

 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    '---------------------------------------------------------------------------------------

    'È possibile ottenere un elenco di nomi di porta validi mediante il metodo GetPortNames.

    'N.B.PortoComboBox è un normale ComboBox che ho chiamato PortoComboBox

    PortoComboBox.DropDownStyle = ComboBoxStyle.DropDownList 'combobox-stile-listato(ComboBox-rinominato da ME in PortoComboBox)

    portoMio = IO.Ports.SerialPort.GetPortNames()  ' ---seleziona porto seriale libero

    PortoComboBox.Items.AddRange(portoMio)         ' ---seleziona porto seriale libero

    '---------------------------------------------------------------------------------------

End Sub

Attenzione: PortoComboBox non è un componente speciale! È semplicemente un ComboBox da me rinominato appunto

PortoComboBox. Notare che portoMio As Array è stato dichiarato per contenere l’elenco dei COMM…

In riferimento a Fig.11, abbiamo completato la scrittura relativa alla finestra gialla.

 

 

 

 

Finestra rosa - LEGGE PARAMETRI MODULO  -

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

     ' TASTO  --- LEGGI  ------------------

     '----------------------- FASE 1 = RICEZIONE DATI E COLLOCAZIONE NELLE TEXTBOX-----------------------------

     '----------------1) WRITE----invio codice c1, c1, c1 ritornano i parametri precedentemente salvati

     'assegna il numero di COMM precedentemente selezionato in PortoComboBox

     SerialPort1.PortName = PortoComboBox.Text

 

     'three C1  are sent In 16Decimal format, And the Module returns the saved parameters,

     'which must be sent consecutively.

     'C1h=193dec

 

     '+++++++++++++++++++++++++++++   TX     ++++++++++++++++++++++++++++++++++++++++++++++++++++

     Dim arr(4095) As Byte  'Dati da trasmettere .. Matrice che conterrà solo 3 numeri uguali 193,193,193. 193dec=C1h (C1+C1+C1 = il modulo restituisce i parametri salvati,)

 

     arr(0) = 193 ‘‘ assegna valore al primo elemento della matrice

 

     SerialPort1.Open()   ' apre comunicazione

     '------------------------

     SerialPort1.Write(arr, 0, 1) 'scrive il dato 196dec=C1h

     SerialPort1.Write(arr, 0, 1) 'scrive il dato

     SerialPort1.Write(arr, 0, 1) 'scrive il dato

     '++++++++++++++++++++++++++++  fine TX  ++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

….Alla pressione del tasto ‘LEGGI’ (Button3_Click)

Assegna per l’utilizzo della SerialPort il COMM precedentemente selezionato.

Spedisce senza interruzioni(di continuo!) i tre C1

ad indicare!!........... Rimandami i dati della configurazione corrente.

 

'--------FASE---2) READ-----legge i 5 bytes che contengono la configurazione.

 '  Si devono collocare nelle label29,27,25,23,21 per successiva decodifica..................

 

 

 '+++++++++++++++++++++++++++++  RX   ++++++++++++++++++++++++++++++++++++++++++++

 'Legge 6 byte

 Dim s(0 To 4095) As Byte 'Dati da ricevere

 'Dim n = 0    ' n= contatore dati

 ' Do

 s(0) = SerialPort1.ReadByte.ToString ' legge 1° dato

 s(1) = SerialPort1.ReadByte.ToString ' legge 1° dato

 s(2) = SerialPort1.ReadByte.ToString ' legge 1° dato

 s(3) = SerialPort1.ReadByte.ToString ' legge 1° dato

 s(4) = SerialPort1.ReadByte.ToString ' legge 1° dato

 s(5) = SerialPort1.ReadByte.ToString ' legge 1° dato

..

..

. Label51.Text = Hex(s(0))  'c1h  notiamo!!! Che il primo dei sei bytes è sempre C1h(risposta alla richiesta di invio dati corrente=c1+5daticonfigurazione corrente!)

 Label29.Text = Hex(s(1))  'addh

 Label27.Text = Hex(s(2))  'addl

 Label25.Text = Hex(s(3))   'speed

 Label23.Text = Hex(s(4))   'canale

 Label21.Text = Hex(s(5))   'option

 

Ora abbiamo i cinque dati nelle Label 51,29…..

I Bytes vanno ora letti, bit per bit per capire le varie configurazioni.

'------------------FASE 2 INTERPRETA SINGOLO BYTE E STAMPA CONFIG. ACCANTO OGNI VOCE-------------

 

La prima e la seconda cifra non hanno bisogno di essere decifrate.

Rappresentano soltanto L’indirizzo del Modulo suddiviso in due bytes poiché gli indirizzi totali sono 65536(a^16).

  ' speed------3°CIFRA----------------------------------LABEL25= SPEED------------------------------------------------------------

  Dim b(8) As Byte 'mette in matrice i singoli bit della cifra 'speed   label25.tex'

  Dim bx As Integer

  bx = (Convert.ToInt32((Label25.Text), 16))   ' numero decimale

  For n = 7 To 0 Step -1    'ok fig...

      bx = bx - 2 ^ (n)

      If bx < 0 Then bx = bx + 2 ^ (n) : b(n) = 0 Else b(n) = 1

  Next

 

 

Nella matrice b()  colloco gli stati logici dei singoli bit della 3° cifra

Esemio: 3°cifra= 100dec =64h = 0110 0100 …quindi …   b(7)=0, b(6)=1,  b(5)=1, b(4)=0,      b(3)=0, b(2)=1,  b(1)=0,  b(0)=0,  

 

 

 

 

Tramite semplici verifiche condizionate(if) è possibile determinare per ogni gruppo di bit il significato e scriverlo nella TextBox per l’utente.

 

  'parity------------    bit 7,6          3° Dato   ------

  If b(7) = 0 And b(6) = 0 Then Label34.Text = "8N1"  'ok

  If b(7) = 0 And b(6) = 1 Then Label34.Text = "8O1"  'ok

  If b(7) = 1 And b(6) = 0 Then Label34.Text = "8E1"  'ok

  If b(7) = 1 And b(6) = 1 Then Label34.Text = "8N1"  'ok

  '------------------------------------------------------------------------------------------------------------------------

 

  'BAUD RATE------------    bit 5,4,3,     3° Dato   ------

  If b(5) = 0 And b(4) = 0 And b(3) = 0 Then Label36.Text = "1200"  'ok

  If b(5) = 0 And b(4) = 0 And b(3) = 1 Then Label36.Text = "2400"  'ok

  If b(5) = 0 And b(4) = 1 And b(3) = 0 Then Label36.Text = "4800"  'ok

  If b(5) = 0 And b(4) = 1 And b(3) = 1 Then Label36.Text = "9600"  'ok

  If b(5) = 1 And b(4) = 0 And b(3) = 0 Then Label36.Text = "19200"  'ok

  If b(5) = 1 And b(4) = 0 And b(3) = 1 Then Label36.Text = "38400"  'ok

  If b(5) = 1 And b(4) = 1 And b(3) = 0 Then Label36.Text = "57600"  'ok

  If b(5) = 1 And b(4) = 1 And b(3) = 1 Then Label36.Text = "115200"  'ok

  '------------------------------------------------------------------------------------------------------------------------

 

 

  'AIR DATA RATE------------    bit 2,1,0,     3° Dato   ------

  If b(2) = 0 And b(1) = 0 And b(0) = 0 Then Label38.Text = "300"  'ok

  If b(2) = 0 And b(1) = 0 And b(0) = 1 Then Label38.Text = "1200"  'ok

  If b(2) = 0 And b(1) = 1 And b(0) = 0 Then Label38.Text = "2400"  'ok

  If b(2) = 0 And b(1) = 1 And b(0) = 1 Then Label38.Text = "4800"  'ok

  If b(2) = 1 And b(1) = 0 And b(0) = 0 Then Label38.Text = "9600"  'ok

 

  If b(2) = 1 And b(1) = 0 And b(0) = 1 Then Label38.Text = "19200"  'ok

  If b(2) = 1 And b(1) = 1 And b(0) = 0 Then Label38.Text = "19200"  'ok

  If b(2) = 1 And b(1) = 1 And b(0) = 1 Then Label38.Text = "19200"  'ok

  '------------------------------------------------------------------------------------------------------------------------

 

 

La quarta cifra è semplicemente un numero che rappresenta il canale. Da Data sheet risulta che tale numero sommato a 862 da la frequenza di trasmissione selezionata in megahertz

 

  ' CANALE ------4°CIFRA----------------------------------LABEL23= CHAN--------------------------

  'CANALE=LABEL23  risultato=label40

 

  'N. CANALE----BIT 4,3,2,1,0  -----------------------------------------------------------------------------------

  'COSTRUZIONE CIFRA.........+862mhZ................

  Label40.Text = Label23.Text & " \ " & 863 + (Convert.ToInt32((Label23.Text), 16)) & "MHz"

  '-------------------------------------------------------------------------------------------------------

 

 

 

La quinta  cifra, come la terza cifra, va analizzata bit per bit.

 

 

  '  OPTION ------5°CIFRA----------------------------------LABEL21=  OPTION--------------------------

  'OPTION=LABEL21 

  Dim b1(8) As Byte 'mette in matrice i singoli bit della cifra OPTION

  Dim bx1 As Integer

  bx1 = (Convert.ToInt32((Label21.Text), 16))   ' numero decimale

  For n = 7 To 0 Step -1    'ok fig...

      bx1 = bx1 - 2 ^ (n)

      If bx1 < 0 Then bx1 = bx1 + 2 ^ (n) : b1(n) = 0 Else b1(n) = 1

  Next

 

 

  ' FIXED - TRASPARENT----BIT 7,     5°CIFRA ---------------------------------------------------------------------------------

  If b1(7) = 0 Then Label43.Text = "TRASPARENT"  'ok

  If b1(7) = 1 Then Label43.Text = "FIXED"  'ok

  '-------------------------------------------------------------------------------------------------------

 

 

  ' DRIVE - PULL-UP O.C.----BIT 7,     5°CIFRA ---------------------------------------------------------------------------------

  If b1(6) = 0 Then Label41.Text = "TX E AUX O.C. out,RX O.C.in"  'ok

  If b1(6) = 1 Then Label41.Text = "TX E AUX PUSH-PULLout,RX PULL-UPin"  'ok

  '-------------------------------------------------------------------------------------------------------

 

 

  ' DRIVE - WAKE UP TIME----BIT 5,  4,  3,      5°CIFRA ---------------------------------------------------------------------------------

  If b1(5) = 0 And b1(4) = 0 And b1(3) = 0 Then Label31.Text = "250ms"  'ok

  If b1(5) = 0 And b1(4) = 0 And b1(3) = 1 Then Label31.Text = "500ms"  'ok

  If b1(5) = 0 And b1(4) = 1 And b1(3) = 0 Then Label31.Text = "750ms"  'ok

  If b1(5) = 0 And b1(4) = 1 And b1(3) = 1 Then Label31.Text = "100ms"  'ok

  If b1(5) = 1 And b1(4) = 0 And b1(3) = 0 Then Label31.Text = "1250mv"  'ok

  If b1(5) = 1 And b1(4) = 0 And b1(3) = 1 Then Label31.Text = "1500mv"  'ok

  If b1(5) = 1 And b1(4) = 1 And b1(3) = 0 Then Label31.Text = "1750mv"  'ok

  If b1(5) = 1 And b1(4) = 1 And b1(3) = 1 Then Label31.Text = "2000mv"  'ok

  '-------------------------------------------------------------------------------------------------------

 

 

  ' DRIVE - FEC----BIT 2,               5°CIFRA ---------------------------------------------------------------------------------

  If b1(2) = 0 Then Label47.Text = "OFF"  'ok

  If b1(2) = 1 Then Label47.Text = "ON(DEFAULT)"  'ok

  '-------------------------------------------------------------------------------------------------------

 

 

 

  ' DRIVE - TRANSM. POWER  1,  0,        5°CIFRA ---------------------------------------------------------------------------------

  If b1(1) = 0 And b1(0) = 0 Then Label45.Text = "20dBm(default)"  'ok

  If b1(1) = 0 And b1(0) = 1 Then Label45.Text = "17dBm"  'ok

  If b1(1) = 1 And b1(0) = 0 Then Label45.Text = "14dBm"  'ok

  If b1(1) = 1 And b1(0) = 1 Then Label45.Text = "10dBm"  'ok

  '-------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

Finestra azzurra – SCRIVE I PARAMETRI NEL MODULO 

Per quanto riguarda l’impostazione di nuovi dati e la successiva scrittura sul modulo degli stessi, le operazioni da fare

Sono le stesse ma in ordine capovolto!

Le TextBox relative alle varie configurazioni, aggiornano i cinque dati da SCRIVERE. In ogni momento, premendo

Il tasto invio verrà scritto sul porto seriale:

--Il comando di scrittura nuovi dati di configurazione  sul modulo C0h+C0h+C0h+C0h

--Subito a seguire, i cinque dati modificati, come si trovano.

Da notare che si utilizza la proprietà che hanno le TextBox che all’immissione di nuovi dati di configurazione,da parte dell’utilizzatore,

 eseguono la routine sub ……..  Private Sub TextBox1_TextChanged(sender As Object……………………………..

dove avviene l’aggiornamento del byte specifico,.

  '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

  '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

  '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

----------------------------------BITE 1-----------------------------------------------------

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

        'INDIRIZZOH

        Label2.Text = TextBox1.Text

    End Sub

'-----------------------------------BITE 2-----------------------------------------------------

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged

    'INDIRIZZOL

    Label3.Text = TextBox2.Text

End Sub

 

I bytes  INDIRIZZO’ non necessitano di  elaborazione e possono essere scritti  pari-pari nelle TextBox finali che contiengono i bytes pronti da spedire!

 

 

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged

        'BITE 3--  menu tendina discesa SPEED-PARITY         -----------bit 7, 6 --------------

        'Label5=byte da modificare

        If ComboBox2.SelectedItem = "8N1" Then b7_SPEED = 0 : b6_SPEED = 0 : GoTo fine_parity

        If ComboBox2.SelectedItem = "8O1" Then b7_SPEED = 0 : b6_SPEED = 1 : GoTo fine_parity

        If ComboBox2.SelectedItem = "8E1" Then b7_SPEED = 1 : b6_SPEED = 0 : GoTo fine_parity

fine_parity:

        'CALCOLA BYTE parità

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

            Label5.Text = Hex(SPEED)

    End Sub

I bit 7 e 6  del   byte 3 = ‘SPEED’ necessitano del solito trattamento.

Vengono infatti sommati con il loro peso, senza modificare gli altri 6 per formare il byte 3 ‘SPEED’ pronto da spedire successivamente sul modulo.

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

        'BITE 3--  menu tendina discesa SPEED-BAUD RATE         -----------bit 5, 4, 3--------------

        'Label5=byte da modificare

 

        If ComboBox1.SelectedItem = 1200 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 2400 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 4800 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 9600 Then b5_SPEED = 0 : b4_SPEED = 1 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 19200 Then b5_SPEED = 1 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 38400 Then b5_SPEED = 1 : b4_SPEED = 0 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 57600 Then b5_SPEED = 1 : b4_SPEED = 1 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 115200 Then b5_SPEED = 1 : b4_SPEED = 1 : b3_SPEED = 1 : GoTo fine_speed

fine_speed:

        'CALCOLA BYTE SPEED

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

        Label5.Text = Hex(SPEED)

    End Sub

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged

        'BITE 3--Menu tendina discesa SPEED-AirDataRate         -----------bit 2, 1, 0--------------

        'Label5=byte da modificare

 

        If ComboBox3.SelectedItem = 300 Then b2_SPEED = 0 : b1_SPEED = 0 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 1200 Then b2_SPEED = 0 : b1_SPEED = 0 : b0_SPEED = 1 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 2400 Then b2_SPEED = 0 : b1_SPEED = 1 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 4800 Then b2_SPEED = 0 : b1_SPEED = 1 : b0_SPEED = 1 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 9600 Then b2_SPEED = 1 : b1_SPEED = 0 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 19200 Then b2_SPEED = 1 : b1_SPEED = 0 : b0_SPEED = 1 : GoTo fine_AirDataRate

fine_AirDataRate:

        'CALCOLA BYTE SPEED

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

        Label5.Text = Hex(SPEED)

    End Sub

 

 

Stessa procedura per gli altri gruppetti di bit relativi al byte 3.

---------------------                   -----------------------------                      ----------------------------------

 

Il byte 4 è più semplice da processare. Contiene infatti il canale.

Una volta controllato che il n. di canale INSERITO non sia maggiore di 69dec, 45h(Massimo consentito dal modulo)

Vengono pari-pari copiate nella TextBox DEL  BYTE4 =‘CANALE’ pronto da spedire successivamente sul modulo.

     '-----------------------------------BITE 4-----------------------------------------------------

    Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged

        'BITE 4--Menu tendina discesa CANALE COMM (0-45H, 00-)        -----------bit 4, 3, 2, 1, 0--------------

        Dim b4 As Byte  ' numero immesso diventa hex!

        b4 = Convert.ToInt32((TextBox3.Text), 16)    'converte da hex (scritto nella textbox in hex!)

        If b4 > 69 Then Label15.Text = "Max 45h!" : GoTo finechan

        Label7.Text = Hex(b4) : Label15.Text = "--"

finechan:

        End Sub

 

 

 

---------------------                   -----------------------------                      ----------------------------------

Il byte 5 ‘OPTION’ è tutto da ricostruire bit per bit. La procedura è la solita

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox4.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 7,    0-1,  TRASPARENT-FIXED

 

        If ComboBox4.SelectedItem = "TRASPARENT" Then b7_OPTION = 0 : GoTo finebite5

        If ComboBox4.SelectedItem = "FIXED" Then b7_OPTION = 1 :

finebite5:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 6,     0-1, pull up - o.c.

        If ComboBox5.SelectedItem = "TX E AUX PUSH-PULLout, RX PULL-UPin" Then b6_OPTION = 1 : GoTo finebite52

        If ComboBox5.SelectedItem = "TX E AUX O.C. out,   RX O.C.in" Then b6_OPTION = 0 :

finebite52:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox6_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox6.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 5, 4, 3, time risveglio  in ms

        If ComboBox6.SelectedItem = "250(default)" Then b5_OPTION = 0 : b4_OPTION = 0 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 500 Then b5_OPTION = 0 : b4_OPTION = 0 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 750 Then b5_OPTION = 0 : b4_OPTION = 1 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1000 Then b5_OPTION = 0 : b4_OPTION = 1 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1250 Then b5_OPTION = 1 : b4_OPTION = 0 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1500 Then b5_OPTION = 1 : b4_OPTION = 0 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1750 Then b5_OPTION = 1 : b4_OPTION = 1 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 2000 Then b5_OPTION = 1 : b4_OPTION = 1 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

fine_TIMEWKUP:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 2,  FEC ON OFF,   CORREZIONE ERRORI

        If ComboBox7.SelectedItem = "ON(DEFAULT)" Then b2_OPTION = 1 : GoTo fine_FEC

        If ComboBox7.SelectedItem = "OFF" Then b2_OPTION = 0

fine_FEC:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox8_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox8.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 1, 0,   potenza di trasmissione

        If ComboBox8.SelectedItem = "20dBm(default)" Then b1_OPTION = 0 : b0_OPTION = 0 : GoTo fine_pow

        If ComboBox8.SelectedItem = "17dBm" Then b1_OPTION = 0 : b0_OPTION = 1 : GoTo fine_pow

        If ComboBox8.SelectedItem = "14dBm" Then b1_OPTION = 1 : b0_OPTION = 0 : GoTo fine_pow

        If ComboBox8.SelectedItem = "10dBm" Then b1_OPTION = 1 : b0_OPTION = 1 : GoTo fine_pow

fine_pow:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

-------- Alla pressione del tasto ‘SCRIVI NEL MODULO I DATI A LATO(salvando)’, 

Assegna per l’utilizzo della SerialPort il COMM precedentemente selezionato.

'assegna il numero di COMM precedentemente selezionato in PortoComboBox

 SerialPort1.PortName = PortoComboBox.Text

 

Prepara nella matrice tutti i dati precedentemente approntati per la scrittura.

Dim arr(4095) As Byte  'Dati da trasmettere

 

arr(0) = 192 'scrive nella matrice alla posizione di indice0 il dato c0h=192=SCRIVI E MEMORIZZA parametri

arr(1) = (Convert.ToInt32((Label2.Text), 16))   ' numero decimale Label2.Text  ---ADDH

arr(2) = (Convert.ToInt32((Label3.Text), 16))   ' numero decimale Label2.Text  ---ADDL

arr(3) = (Convert.ToInt32((Label5.Text), 16))   ' numero decimale Label2.Text  ---SPEED

arr(4) = (Convert.ToInt32((Label7.Text), 16))   ' numero decimale Label2.Text  ---CHAN

arr(5) = (Convert.ToInt32((Label9.Text), 16))   ' numero decimale Label2.Text  ---OPTION

 

 

 Spedisce C0, ……..   ad indicare!!........... Scrivi  i nuovi dati  nella configurazione corrente.

Ed a seguito (senza interruzioni) i 5 bytes elaborati che contengono la nuova config.

SerialPort1.Open()   ' apre comunicazione

 '-------------------------------------------------------------------------------------------

 SerialPort1.Write(arr, 0, 1) 'scrive il dato 192dec=C0h

 SerialPort1.Write(arr, 1, 1) 'scrive il dato

 SerialPort1.Write(arr, 2, 1) 'scrive il dato

 SerialPort1.Write(arr, 3, 1) 'scrive il dato

 SerialPort1.Write(arr, 4, 1) 'scrive il dato

 SerialPort1.Write(arr, 5, 1) 'scrive il dato

 '++++++++++++++++++++++++++++  fine TX  ++++++++++++++++++++++++++++++++++++++++++++++++++++++

 SerialPort1.Close()   '

 

 

 

Linck:

Per chi vorrà la cartella del progetto da utilizzare nel proprio IDE-Visual-Studio  (per eventualmente personalizzare il prog.)

Per chi vorrà il programma già compilato pronto da installare sul proprio P.C. (scaricare e cliccare ‘setup’)

 

---------------------------Segue il listato completo----------------------------------------------------------

Public Class Form1

    Dim ADDH As Byte = 0

    Dim b0_ADDH, b1_ADDH, b2_ADDH, b3_ADDH, b4_ADDH, b5_ADDH, b6_ADDH, b7_ADDH As Byte

 

    Dim ADDL As Byte = 0

    Dim b0_ADDL, b1_ADDL, b2_ADDL, b3_ADDL, b4_ADDL, b5_ADDL, b6_ADDL, b7_ADDL As Byte

 

    Dim SPEED As Byte = 0

    Dim b0_SPEED, b1_SPEED, b2_SPEED, b3_SPEED, b4_SPEED, b5_SPEED, b6_SPEED, b7_SPEED As Byte

 

    Dim CHAN As Byte = 0

    Dim b0_CHAN, b1_CHAN, b2_CHAN, b3_CHAN, b4_CHAN, b5_CHAN, b6_CHAN, b7_CHAN As Byte

 

    Dim OPTION_ As Byte

    Dim b0_OPTION, b1_OPTION, b2_OPTION, b3_OPTION, b4_OPTION, b5_OPTION, b6_OPTION, b7_OPTION As Byte

 

 

    Dim portoMio As Array 'Matrice che contiene i numeri dei Porti liberi

 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        '---------------------------------------------------------------------------------------

        'È possibile ottenere un elenco di nomi di porta validi mediante il metodo GetPortNames.

        'N.B.PortoComboBox è un normale ComboBox che ho chiamato PortoComboBox

        PortoComboBox.DropDownStyle = ComboBoxStyle.DropDownList 'combobox-stile-listato(ComboBox-rinominato da ME in PortoComboBox)

        portoMio = IO.Ports.SerialPort.GetPortNames()  ' ---seleziona porto seriale libero

        PortoComboBox.Items.AddRange(portoMio)         ' ---seleziona porto seriale libero

        '---------------------------------------------------------------------------------------

 

 

    End Sub

 

 

 

 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        'TASTO   ----------SCRIVI NEL MODULO I DATI A LATO(salvando)----------------   A Z Z U R R O   ------------------

        '-------------------LABEL2,3,5,7,9   ADDH,  ADDL,   SPEED,  CHAN,   OPTION

 

        '1)---LEGGE VALORI LABEL2,3,5,7,9  E COLLOCA NELL'ARRAY PER SPEDIRE AL MODULO --- C0 = SCRIVI E MEMORIZZA C0h=192dec

        '     16 Decimal Format Sends C0+5 Bytes Working Parameters, a total of 6 bytes, must be

        '     sent continuously(saved after power off).

 

        'assegna il numero di COMM precedentemente selezionato in PortoComboBox

        SerialPort1.PortName = PortoComboBox.Text

        '+++++++++++++++++++++++++++++   TX     ++++++++++++++++++++++++++++++++++++++++++++++++++++

        Dim arr(4095) As Byte  'Dati da trasmettere

 

        arr(0) = 192 'scrive nella matrice alla posizione di indice0 il dato c0h=192=SCRIVI E MEMORIZZA parametri

 

        arr(1) = (Convert.ToInt32((Label2.Text), 16))   ' numero decimale Label2.Text  ---ADDH

        arr(2) = (Convert.ToInt32((Label3.Text), 16))   ' numero decimale Label2.Text  ---ADDL

        arr(3) = (Convert.ToInt32((Label5.Text), 16))   ' numero decimale Label2.Text  ---SPEED

        arr(4) = (Convert.ToInt32((Label7.Text), 16))   ' numero decimale Label2.Text  ---CHAN

        arr(5) = (Convert.ToInt32((Label9.Text), 16))   ' numero decimale Label2.Text  ---OPTION

 

        SerialPort1.Open()   ' apre comunicazione

        '-------------------------------------------------------------------------------------------

        SerialPort1.Write(arr, 0, 1) 'scrive il dato 192dec=C0h

        SerialPort1.Write(arr, 1, 1) 'scrive il dato

        SerialPort1.Write(arr, 2, 1) 'scrive il dato

        SerialPort1.Write(arr, 3, 1) 'scrive il dato

        SerialPort1.Write(arr, 4, 1) 'scrive il dato

        SerialPort1.Write(arr, 5, 1) 'scrive il dato

        '++++++++++++++++++++++++++++  fine TX  ++++++++++++++++++++++++++++++++++++++++++++++++++++++

        SerialPort1.Close()   ' apre comunicazione

 

    End Sub

 

 

 

    '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

    '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

    '---------------------------FORMATURA BYTES DI CONFIGURAZIONE-----------------------------------------------

    '-----------------------------------BITE 1-----------------------------------------------------

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

        'INDIRIZZOH

        Label2.Text = TextBox1.Text

    End Sub

 

    '-----------------------------------BITE 2-----------------------------------------------------

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged

        'INDIRIZZOL

        Label3.Text = TextBox2.Text

    End Sub

 

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged

        'BITE 3--  menu tendina discesa SPEED-PARITY         -----------bit 7, 6 --------------

        'Label5=byte da modificare

        If ComboBox2.SelectedItem = "8N1" Then b7_SPEED = 0 : b6_SPEED = 0 : GoTo fine_parity

        If ComboBox2.SelectedItem = "8O1" Then b7_SPEED = 0 : b6_SPEED = 1 : GoTo fine_parity

        If ComboBox2.SelectedItem = "8E1" Then b7_SPEED = 1 : b6_SPEED = 0 : GoTo fine_parity

fine_parity:

        'CALCOLA BYTE parità

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

            Label5.Text = Hex(SPEED)

    End Sub

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

        'BITE 3--  menu tendina discesa SPEED-BAUD RATE         -----------bit 5, 4, 3--------------

        'Label5=byte da modificare

 

        If ComboBox1.SelectedItem = 1200 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 2400 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 4800 Then b5_SPEED = 0 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 9600 Then b5_SPEED = 0 : b4_SPEED = 1 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 19200 Then b5_SPEED = 1 : b4_SPEED = 0 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 38400 Then b5_SPEED = 1 : b4_SPEED = 0 : b3_SPEED = 1 : GoTo fine_speed

        If ComboBox1.SelectedItem = 57600 Then b5_SPEED = 1 : b4_SPEED = 1 : b3_SPEED = 0 : GoTo fine_speed

        If ComboBox1.SelectedItem = 115200 Then b5_SPEED = 1 : b4_SPEED = 1 : b3_SPEED = 1 : GoTo fine_speed

fine_speed:

        'CALCOLA BYTE SPEED

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

        Label5.Text = Hex(SPEED)

    End Sub

    '-----------------------------------BITE 3-----------------------------------------------------

    Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged

        'BITE 3--Menu tendina discesa SPEED-AirDataRate         -----------bit 2, 1, 0--------------

        'Label5=byte da modificare

 

        If ComboBox3.SelectedItem = 300 Then b2_SPEED = 0 : b1_SPEED = 0 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 1200 Then b2_SPEED = 0 : b1_SPEED = 0 : b0_SPEED = 1 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 2400 Then b2_SPEED = 0 : b1_SPEED = 1 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 4800 Then b2_SPEED = 0 : b1_SPEED = 1 : b0_SPEED = 1 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 9600 Then b2_SPEED = 1 : b1_SPEED = 0 : b0_SPEED = 0 : GoTo fine_AirDataRate

        If ComboBox3.SelectedItem = 19200 Then b2_SPEED = 1 : b1_SPEED = 0 : b0_SPEED = 1 : GoTo fine_AirDataRate

fine_AirDataRate:

        'CALCOLA BYTE SPEED

        SPEED = b0_SPEED + b1_SPEED * 2 + b2_SPEED * 4 + b3_SPEED * 8 + b4_SPEED * 16 + b5_SPEED * 32 + b6_SPEED * 64 + b7_SPEED * 128

        Label5.Text = Hex(SPEED)

    End Sub

 

 

 

    '-----------------------------------BITE 4-----------------------------------------------------

    Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged

        'BITE 4--Menu tendina discesa CANALE COMM (0-45H, 00-)        -----------bit 4, 3, 2, 1, 0--------------

        Dim b4 As Byte  ' numero immesso diventa hex!

        b4 = Convert.ToInt32((TextBox3.Text), 16)    'converte da hex (scritto nella textbox in hex!)

        If b4 > 69 Then Label15.Text = "Max 45h!" : GoTo finechan

        Label7.Text = Hex(b4) : Label15.Text = "--"

finechan:

        End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox4.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 7,    0-1,  TRASPARENT-FIXED

 

        If ComboBox4.SelectedItem = "TRASPARENT" Then b7_OPTION = 0 : GoTo finebite5

        If ComboBox4.SelectedItem = "FIXED" Then b7_OPTION = 1 :

finebite5:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 6,     0-1, pull up - o.c.

        If ComboBox5.SelectedItem = "TX E AUX PUSH-PULLout, RX PULL-UPin" Then b6_OPTION = 1 : GoTo finebite52

        If ComboBox5.SelectedItem = "TX E AUX O.C. out,   RX O.C.in" Then b6_OPTION = 0 :

finebite52:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox6_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox6.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 5, 4, 3, time risveglio  in ms

        If ComboBox6.SelectedItem = "250(default)" Then b5_OPTION = 0 : b4_OPTION = 0 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 500 Then b5_OPTION = 0 : b4_OPTION = 0 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 750 Then b5_OPTION = 0 : b4_OPTION = 1 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1000 Then b5_OPTION = 0 : b4_OPTION = 1 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1250 Then b5_OPTION = 1 : b4_OPTION = 0 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1500 Then b5_OPTION = 1 : b4_OPTION = 0 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 1750 Then b5_OPTION = 1 : b4_OPTION = 1 : b3_OPTION = 0 : GoTo fine_TIMEWKUP

        If ComboBox6.SelectedItem = 2000 Then b5_OPTION = 1 : b4_OPTION = 1 : b3_OPTION = 1 : GoTo fine_TIMEWKUP

fine_TIMEWKUP:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 2,  FEC ON OFF,   CORREZIONE ERRORI

        If ComboBox7.SelectedItem = "ON(DEFAULT)" Then b2_OPTION = 1 : GoTo fine_FEC

        If ComboBox7.SelectedItem = "OFF" Then b2_OPTION = 0

fine_FEC:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

    '-----------------------------------BITE 5-----------------------------------------------------

    Private Sub ComboBox8_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox8.SelectedIndexChanged

        'BITE 5--Menu tendina discesa bit 1, 0,   potenza di trasmissione

        If ComboBox8.SelectedItem = "20dBm(default)" Then b1_OPTION = 0 : b0_OPTION = 0 : GoTo fine_pow

        If ComboBox8.SelectedItem = "17dBm" Then b1_OPTION = 0 : b0_OPTION = 1 : GoTo fine_pow

        If ComboBox8.SelectedItem = "14dBm" Then b1_OPTION = 1 : b0_OPTION = 0 : GoTo fine_pow

        If ComboBox8.SelectedItem = "10dBm" Then b1_OPTION = 1 : b0_OPTION = 1 : GoTo fine_pow

fine_pow:

        'CALCOLA BYTE 5

        OPTION_ = b0_OPTION + b1_OPTION * 2 + b2_OPTION * 4 + b3_OPTION * 8 + b4_OPTION * 16 + b5_OPTION * 32 + b6_OPTION * 64 + b7_OPTION * 128

        Label9.Text = Hex(OPTION_)

    End Sub

 

 

    '--------------------------------------------------------------------------------------------------------------------------------------

    '--------------------------------------------------------------------------------------------------------------------------------------

    '--------------------------------------------------LEGGE PARAMETRI MODULO-------------------------------------------------------------

    '--------------------------------------------------------------------------------------------------------------------------------------

    '--------------------------------------------------------------------------------------------------------------------------------------

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        ' TASTO  --- LEGGI  ------------------

        '----------------------- FASE 1 = RICEZIONE DATI E COLLOCAZIONE NELLE TEXTBOX-----------------------------

        '----------------1) WRITE----invio codice c1, c1, c1 ritornano i parametri precedentemente salvati

        'assegna il numero di COMM precedentemente selezionato in PortoComboBox

        SerialPort1.PortName = PortoComboBox.Text

 

        'three C1  are sent In 16Decimal format, And the Module returns the saved parameters,

        'which must be sent consecutively.

        'C1h=193dec

 

        '+++++++++++++++++++++++++++++   TX     ++++++++++++++++++++++++++++++++++++++++++++++++++++

        Dim arr(4095) As Byte  'Dati da trasmettere

        arr(0) = 193 'scrive nella matrice alla posizione di indice0 il dato nella TextBox1

 

        SerialPort1.Open()   ' apre comunicazione

        '------------------------

        SerialPort1.Write(arr, 0, 1) 'scrive il dato 196dec=C1h

        SerialPort1.Write(arr, 0, 1) 'scrive il dato

        SerialPort1.Write(arr, 0, 1) 'scrive il dato

        '++++++++++++++++++++++++++++  fine TX  ++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

        '----------------2) READ-----legge i 5 bytes che contengono la configurazione.

        '  Si devono collocare nelle label29,27,25,23,21 per successiva decodifica..................

 

 

        '+++++++++++++++++++++++++++++  RX   ++++++++++++++++++++++++++++++++++++++++++++

        'Legge 6 byte

        Dim s(0 To 4095) As Byte 'Dati da ricevere

        'Dim n = 0    ' n= contatore dati

        ' Do

        s(0) = SerialPort1.ReadByte.ToString ' legge 1° dato

        s(1) = SerialPort1.ReadByte.ToString ' legge 1° dato

        s(2) = SerialPort1.ReadByte.ToString ' legge 1° dato

        s(3) = SerialPort1.ReadByte.ToString ' legge 1° dato

        s(4) = SerialPort1.ReadByte.ToString ' legge 1° dato

        s(5) = SerialPort1.ReadByte.ToString ' legge 1° dato

        ' n = n + 1

        'Loop While n = 0  ' non looppa poiche acquisisce un solo dato

        '++++++++++++++++++++++++++++  fine RX  ++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

        '-----------------------------------

 

        '-------------------

        'TextBox2.Text = s(0)   'scrive il dato ricevuto nella TextBox2

        'label...............29,27,25,23,21

 

        Label51.Text = Hex(s(0))  'c1h  ........... da canc oppure printare ok se ricevuto c1h

        Label29.Text = Hex(s(1))  'addh

        Label27.Text = Hex(s(2))  'addl

        Label25.Text = Hex(s(3))   'speed

        Label23.Text = Hex(s(4))   'canale

        Label21.Text = Hex(s(5))   'option

 

 

        SerialPort1.Close()  ' chiude comunicazione

 

'------------------FASE 2 INTERPRETA SINGOLO BYTE E STAMPA CONFIG. ACCANTO OGNI VOCE----------------------

 

'ADD----------------------------- DA STAMPARE IN DECIMALE COME UNICA CIFRA-----------------------------------------

'LABEL29H,label27L

'label 32= risultato

Label32.Text = (Convert.ToInt32((Label29.Text), 16)) * 256 + (Convert.ToInt32((Label27.Text), 16)) * 1

'-------------------------------------------------------------------------------------------------------------------

 

' speed------3°CIFRA----------------------------------LABEL25= SPEED------------------------------------------------------------

Dim b(8) As Byte 'mette in matrice i singoli bit della cifra 'speed   label25.tex'

Dim bx As Integer

bx = (Convert.ToInt32((Label25.Text), 16))   ' numero decimale

For n = 7 To 0 Step -1    'ok fig...

    bx = bx - 2 ^ (n)

    If bx < 0 Then bx = bx + 2 ^ (n) : b(n) = 0 Else b(n) = 1

Next

 

'parity------------    bit 7,6          3° Dato   ------

If b(7) = 0 And b(6) = 0 Then Label34.Text = "8N1"  'ok

If b(7) = 0 And b(6) = 1 Then Label34.Text = "8O1"  'ok

If b(7) = 1 And b(6) = 0 Then Label34.Text = "8E1"  'ok

If b(7) = 1 And b(6) = 1 Then Label34.Text = "8N1"  'ok

'------------------------------------------------------------------------------------------------------------------------

 

'BAUD RATE------------    bit 5,4,3,     3° Dato   ------

If b(5) = 0 And b(4) = 0 And b(3) = 0 Then Label36.Text = "1200"  'ok

If b(5) = 0 And b(4) = 0 And b(3) = 1 Then Label36.Text = "2400"  'ok

If b(5) = 0 And b(4) = 1 And b(3) = 0 Then Label36.Text = "4800"  'ok

If b(5) = 0 And b(4) = 1 And b(3) = 1 Then Label36.Text = "9600"  'ok

If b(5) = 1 And b(4) = 0 And b(3) = 0 Then Label36.Text = "19200"  'ok

If b(5) = 1 And b(4) = 0 And b(3) = 1 Then Label36.Text = "38400"  'ok

If b(5) = 1 And b(4) = 1 And b(3) = 0 Then Label36.Text = "57600"  'ok

If b(5) = 1 And b(4) = 1 And b(3) = 1 Then Label36.Text = "115200"  'ok

'------------------------------------------------------------------------------------------------------------------------

 

 

'AIR DATA RATE------------    bit 2,1,0,     3° Dato   ------

If b(2) = 0 And b(1) = 0 And b(0) = 0 Then Label38.Text = "300"  'ok

If b(2) = 0 And b(1) = 0 And b(0) = 1 Then Label38.Text = "1200"  'ok

If b(2) = 0 And b(1) = 1 And b(0) = 0 Then Label38.Text = "2400"  'ok

If b(2) = 0 And b(1) = 1 And b(0) = 1 Then Label38.Text = "4800"  'ok

If b(2) = 1 And b(1) = 0 And b(0) = 0 Then Label38.Text = "9600"  'ok

 

If b(2) = 1 And b(1) = 0 And b(0) = 1 Then Label38.Text = "19200"  'ok

If b(2) = 1 And b(1) = 1 And b(0) = 0 Then Label38.Text = "19200"  'ok

If b(2) = 1 And b(1) = 1 And b(0) = 1 Then Label38.Text = "19200"  'ok

'------------------------------------------------------------------------------------------------------------------------

 

' CANALE ------4°CIFRA----------------------------------LABEL23= CHAN--------------------------

'CANALE=LABEL23  risultato=label40

 

'N. CANALE----BIT 4,3,2,1,0  -----------------------------------------------------------------------------------

'COSTRUZIONE CIFRA.........+862mhZ................

Label40.Text = Label23.Text & " \ " & 863 + (Convert.ToInt32((Label23.Text), 16)) & "MHz"

'-------------------------------------------------------------------------------------------------------

 

 

 

'  OPTION ------5°CIFRA----------------------------------LABEL21=  OPTION--------------------------

'OPTION=LABEL21 

Dim b1(8) As Byte 'mette in matrice i singoli bit della cifra OPTION

Dim bx1 As Integer

bx1 = (Convert.ToInt32((Label21.Text), 16))   ' numero decimale

For n = 7 To 0 Step -1    'ok fig...

    bx1 = bx1 - 2 ^ (n)

    If bx1 < 0 Then bx1 = bx1 + 2 ^ (n) : b1(n) = 0 Else b1(n) = 1

Next

 

 

        ' FIXED - TRASPARENT----BIT 7,     5°CIFRA ---------------------------------------------------------------------------------

        If b1(7) = 0 Then Label43.Text = "TRASPARENT"  'ok

        If b1(7) = 1 Then Label43.Text = "FIXED"  'ok

        '-------------------------------------------------------------------------------------------------------

 

        ' DRIVE - PULL-UP O.C.----BIT 7,     5°CIFRA ---------------------------------------------------------------------------------

        If b1(6) = 0 Then Label41.Text = "TX E AUX O.C. out,RX O.C.in"  'ok

        If b1(6) = 1 Then Label41.Text = "TX E AUX PUSH-PULLout,RX PULL-UPin"  'ok

        '-------------------------------------------------------------------------------------------------------

 

        ' DRIVE - WAKE UP TIME----BIT 5,  4,  3,      5°CIFRA ---------------------------------------------------------------------------------

        If b1(5) = 0 And b1(4) = 0 And b1(3) = 0 Then Label31.Text = "250ms"  'ok

        If b1(5) = 0 And b1(4) = 0 And b1(3) = 1 Then Label31.Text = "500ms"  'ok

        If b1(5) = 0 And b1(4) = 1 And b1(3) = 0 Then Label31.Text = "750ms"  'ok

        If b1(5) = 0 And b1(4) = 1 And b1(3) = 1 Then Label31.Text = "100ms"  'ok

        If b1(5) = 1 And b1(4) = 0 And b1(3) = 0 Then Label31.Text = "1250mv"  'ok

        If b1(5) = 1 And b1(4) = 0 And b1(3) = 1 Then Label31.Text = "1500mv"  'ok

        If b1(5) = 1 And b1(4) = 1 And b1(3) = 0 Then Label31.Text = "1750mv"  'ok

        If b1(5) = 1 And b1(4) = 1 And b1(3) = 1 Then Label31.Text = "2000mv"  'ok

        '-------------------------------------------------------------------------------------------------------

 

        ' DRIVE - FEC----BIT 2,               5°CIFRA ---------------------------------------------------------------------------------

        If b1(2) = 0 Then Label47.Text = "OFF"  'ok

        If b1(2) = 1 Then Label47.Text = "ON(DEFAULT)"  'ok

        '-------------------------------------------------------------------------------------------------------

 

        ' DRIVE - TRANSM. POWER  1,  0,        5°CIFRA ---------------------------------------------------------------------------------

        If b1(1) = 0 And b1(0) = 0 Then Label45.Text = "20dBm(default)"  'ok

        If b1(1) = 0 And b1(0) = 1 Then Label45.Text = "17dBm"  'ok

        If b1(1) = 1 And b1(0) = 0 Then Label45.Text = "14dBm"  'ok

        If b1(1) = 1 And b1(0) = 1 Then Label45.Text = "10dBm"  'ok

        '-------------------------------------------------------------------------------------------------------

 

        'Label21 =OPTION

 

    End Sub

End Class