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..
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