luni, 18 aprilie 2022

Arduino RDS PI decoder

Dupa construirea receptorului FM, urmatoarea etapa a fost integrarea unui decodor RDS. In prima faza intentia mea a fost intelegerea principiului de transmitere RDS si decodarea acestuia. Ulterior, dupa ce am citit mai multe documente pe internet, am trecut la experimente. Folosind semnalele de ceas si date, furnizate de un receptor Sony ST-SE370, am incercat si am reusit sa decodez. Am folosit un Arduino Nano, care s-a potrivit perfect nivelelor semnalelor din receptor. Ultima parte a proiectului a reprezentat simplificarea codului sursa, micsorarea timpului de decodare si extragerea doar a datelor care ma interesau, respectiv identificatorul PI.

Transmisiunea RDS se face in paralel cu semnalul audio stereo in cadrul unui semnal multiplex. Transmisia este seriala, cu o viteza de 1187.5 biti / secunda. Datele sint impartite pe grupuri. Acestea la rindul lor sint impartite in blocuri: A, B, C, D. Fiecare bloc are 26 biti, fiecare grup are 26 x 4 = 104 biti. Intr-o secunda sint transmise cca 11 grupuri. Blocul A contine identificatorul PI. El se regaseste in primul bloc din fiecare grup transmis, din 104 in 104 biti. In concluzie, blocul A este transmis de cca 11x / secunda, respectiv odata la 87.5 milisecunde.

Daca blocul A este transmis de cca 11x / secunda, cred ca este deajuns, in cadrul unor reflexii MS, de scurta durata, daca semnalul este destul de puternic, sa pot identifica PI-ul postului transmis. Pentru aceasta imi este necesar o receptie a grupului, respectiv 87.5 milisecunde, pentru a decoda si memora temporar PI-ul postului receptionat. Urmat dupa aceea de inca o receptie a grupului, alte 87.5 milisecunde, pentru a decoda dinou ID-ul si apoi sa il compar cu primul PI temporar. In caz de egalitate, totul este ok, am identificat postul, altfel, reiau procesul de la inceput.

Aceasta ultima afirmatie este pura teorie. Nu am testat-o inca. Teoretic ar putea sa functioneze, practic voi afla in vara aceasta, cu ocazia Perseidelor. In anii precedenti am receptionat des semnale de scurta durata via MS intr-un receptor auto. Anul acesta am posiblitatea sa si testez.

Schema de principiu este simpla. Pini de date si masa au fost conectati direct la microcontroler. Nu a fost necesara nicio interfatare, nivelele semnalelor sint perfect compatibile, 0 - 5V. Pinii D2 si D3 sint folositi ca intrari si sint conectati pull-up intern din setarile software. Rezultatul decodarii se trimite prin intermediul portului serial in USB la calculator si evidentiat intr-un monitor. Alimentarea se face din portul USB al calculatorului.

Software-ul seteaza pinii ca intrari si activeaza o intrerupere interna pe pinul de ceas. Dupa receptionarea a 26 de biti de date se incearca identificarea blocului prin calcularea CRC. Daca CRC nu este bun operatia se repeta. Cind CRC este ok, se identifica blocul. Daca blocul este altul decit A, se calculeaza dupa citi biti urmeaza blocul A si se reia asteptarea blocului A. Cind blocul A este identificat, se decodeaza si memoreaza PI. Se asteapta timp de 104 biti, se receptioneaza urmatorul bloc A, fara sa se mai verifice CRC, se extrage PI si se compara cu primul decodat. Daca este in regula se trimite prin intermediul portului serial catre calculator pentru a fi afisat pe monitor.

Aceasta este pe scurt descrierea algoritmului decodorului meu si intentiile mele pentru a-l folosii. Mai multe detalii dupa experimentele ce urmeaza sa le intreprind.

Sa vina vara, eu sint pregatit!

Constantin Bădican - YO7FWS

Descarca: codul sursa

Pentru realizarea proiectului m-am inspirat din:

---  73's   YO7FWS  ---

vineri, 15 aprilie 2022

Alertă E Sporadic prin SMS

Salut!
Curind incepe sezonul de propagare E Sporadic in unde ultrascurte. Sinteti pregătiți? 
Iată ce mi-am construit: un sistem de alertare prin SMS in caz de propagare E Sporadic.
Dispozitivul monitorizează anunțurile de pe DXCluster și dacă sint raportate legaturi radio via E Sporadic, mă anunță in cel mai scurt timp, printr-un SMS. Folosesc dispozitivul din anul 2017 și de-a lungul timpului mi-a adus reale satisfacții.

Hardware

Circuitul are in componența sa două module interconectate: un microcontroler ESP8266 și o placă de dezvoltare GSM, respectiv IOT-GA6. Microcontrolerul este componenta principală a dispozitivului. Acesta se conectează prin WiFi la internet și dupa aceea la un server DXCluster. Tot el monitorizeză anunțurile și declansează alertarea. Placa de dezvolare GSM asigură conexiunea telefonică cu un operator și in caz de alertă, transmite SMS. Comunicația intre cele două module se face prin intermediul porturilor seriale din dotare. Acestea sint alimentate cu tensiune prin intermediul a două stabilizatoare de tensiune: 3.3V și 5V. Conectarea la rețeaua WiFi, logarea la serverul DXCluster și conectarea la rețeaua GSM sint semnalizate prin intermediul a două LED-uri.


Intregul  montaj a fost realizat pe o bucată de cablaj imprimat cu dimensiunile 58 x 53 mm. Montajul a fost introdus intr-o carcasă din plexiglass. 


Principiul de funcționare
Pe DXCluster sint anunțate continuu legăturile radio realizate intre corespondenți și suplimentar, pentru informarea comunității, modul de propagare. Dispozitivul monitorizează conținutul acestor anunțuri și cind identifică cuvinte cheie precum: <ES> sau ESporadic, se prealertează sau anunță prin SMS utilizatorul. 

In timpul funcționării, dispozitivul se poate afla intr-una dintre următoarele stări: starea de veghe, starea de prealertare și starea de alertare.

Atunci cind nu este propagare radio dispozitivul se află in stare de veghe. In tot acest timp, monitorizează anunțurile in vederea identificării unuia care implică propagare de tip E Sporadic.

In starea de prealertare se trece intotdeauna numai din starea de veghe. Tranziția are loc doar atunci cind se identifică un anunț care implică propagare de tip E Sporadic. Invers, trecerea din starea de prealertare in starea de veghe, se face atunci cind după anunțul de prealertare, timp de 15 minute, nu mai este identificat un alt anunț asemănător. In acest caz, prealertarea a fost o alarmă falsa, o deschidere de scurtă durată a propagării radio.

Alerta propriu-zisă, starea de alertă, se activează intotdeauna numai din starea de prealertare. Condiția de alertare este dată de apariția după primul anunț de prealertare a unui alt anunț asemănător, intr-o perioadă mai scurtă de 15 minute. In concluzie, intr-un interval mai mic de 15 minute, primul anunț declanșează prealertarea, iar al doilea declanșează alerta SMS, respectiv semnalizează deschiderea propagării radio.

Trecerea din stare de alertă in stare de veghe reprezintă sfirșitul propagării radio. Aceasta se consideră incheiată cind timp de 60 minute de la ultimul anunț, care implică propagare de tip E Sporadic, nu se identifică un alt anunț asemănător.

Cuvintele cheie și duratele de timp folosite au fost astfel alese incit să nu existe alerte SMS false sau rateuri. 

Software
Programul care gestionează dispozitivul a fost scris in limbajul Arduino. Pentru o bună funcționare au fost implementate urmatoarele funcții:
- conectarea la internet prin rețeaua wireless și semnalizarea conectării
- conectarea la un server DXCluster, logarea și semnalizarea logării
- conectarea la rețeaua GSM și semnalizarea conectării
- filtrarea anunțurilor
- identificarea anunțurilor, prealertarea, alertarea și revenirea la starea de veghe
- trimiterea anunțurilor prin SMS
- menținerea activă a conexiunii cu serverul DXCluster
- resetarea dispozitivului in caz de eroare


Alerte false
Dispozitivul nu este perfect. Nu este capabil să identifice anunțurile false. Acesta tratează toate anunțurile identic. Pentru a micșora numărul de alerte false trebuiesc imbunătățiți algoritmii de analiză și filtrare. Din fericire aceste anunțuri false sint tot mai puține in ultima perioadă.

Iată două cazuri care pot genera alerte false:

Are loc o legatură radio intre doi corespondenți și acestia raportează fiecare legatura pe DXCluster. Dacă anunțurile apar consecutiv, intr-o perioadă mai scurtă de 15 minute, dispozitivul le identifică ca două anunțuri: unul de prealertare și celalalt de alertare. In realitate avem o singură legatură radio.
Soluție: verificarea incrucișată a indicativelor din anunțuri și ignorarea ultimului anunț in caz de egalitate.

Un alt caz de alertă falsă este atunci cind se raportează greșit legătura radio. Aceasta se intimplă cind legăturile radio Tropo sint raportate ca legaturi radio E Sporadic. 
Soluție: calcularea distanței intre locatoare și dacă este <700..1000 km, se va ignora ultimul anunț.

Alerta prin SMS se poate adresa unui destinatar sau grup de destinatari. De asemenea, aceasta poate fi inlocuită cu alertă prin email sau un alt tip de alertă. Totul ține de preferințele utilizatorului.

Să inceapă sezonul, eu sint pregatit!
73!

Constantin Bădican - YO7FWS

---  73's   YO7FWS  ---







vineri, 4 martie 2022

LogulMeuUUS vers. 03.03.2022

Noutati:
- Interfata poate fi comutata in limba romana sau limba engleza. Multumesc pentru sprijin lui Dan, YO9CWY.
- Se poate afisa harta legaturilor radio. Atentie! Necesita conexiune la internet.
- Pentru cei care nu se descurca am introdus menu-ul Ajutor.
- Programul calculeaza media Km/QSO.

Descarca:

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---
 

luni, 21 februarie 2022

FM DX RDS PI Scanner (1)

Receptiile radio si tv la mare distanta m-au pasionat dintotdeauna. In anii de liceu am observat receptionarea in Banda 1 TV a unor posturi de televiziune din Europa, iar in banda OIRT a unor posturi radio rusesti. Foarte mult timp am studiat acest fenomen, dar prea putin documentat. Anii trecuti am revenit la aceasta veche pasiune, am reluat receptiile si am avut rezultate. Ce m-a impresionat de aceasta data a fost posibilitatea identificarii postului radio care emite cu ajutorul transmisiei RDS in paralel cu semnalul audio. Aceasta facilitate este foarte importanta, nu numai ca auzi un post de radio interesant, dar ai posibilitatea sa stii de unde emite si cum se numeste. Genial!

Primele receptii le-am facut pe un radiocasetofon Sony pe masina. Apoi am trecut la un receptor RTLSDR pe calculator si un tuner stationar Sony ST-SE370. Toate au functionat, dar nu conform asteptarilor mele. Niciunul dintre acestea nu imi furniza in cel mai scurt timp posibil informatiile RDS transmise de postul radio receptionat. Era frustant: se auzea foarte bine, dar nu decoda nimic. Pornind de la aceasta experienta oarecum nereusita, m-am hotarit sa imi construiesc un receptor radio asa cum imi doream eu. Nu am avut de gind sa plec complet de la zero, am cautat sa gasesc module, gata construite, pe care imbinindu-le impreuna, sa-mi asigure rezultatul mult asteptat. Pentru aceasta am studiat module tuner din diverse receptoare radio, combine si casetofoane de masina, modul de comanda al acestora si controlul PLL, precum si principiul de transmitere si decodare RDS. Iarna aceasta am reusit sa-mi construiesc o varianta simplificata a primului receptor.

Tunerul FM si modulul decoder RDS au facut parte dintr-o combina Aiwa_XR-EM30. Pentru comanda si controlul PLL am folosit o placa de dezvoltare Arduino Nano, la care am conectat un afisaj LCD 2 x 16 caractere, un encoder mecanic si o tastatura cu trei push butoane. Receptorul nu este dotat cu amplificator audio, receptia se poate face doar in casti. Datorita dimensiunilor reduse ale componentelor, modulul decoder RDS a fost 'decupat' de pe placa de baza a combinei si adaptat proiectului meu. Iata schema simplificata a receptorului:

Controlul tunerului FM este realizata cu ajutorul unui program incarcat in Arduino Nano. Acesta comanda registrii de uz general GPIO si controleaza PLL dintr-un circuit integrat specializat Sanyo LC72131.  Intervalul de frecventa acoperit este 88 - 108 MHz, cu pas de 100 KHz. Schimbarea frecventei de receptie este ralizata cu un encoder mecanic si afisarea se face pe un ecran LCD. Pentru inceput programul este foarte simplu. Acesta impreuna cu receptorul urmeaza sa fie imbunatatite pe viitor. 

Descarca codul sursa: RXFM_V1.ino

La realizarea proiectului m-am inspirat din:

joi, 27 ianuarie 2022

2021 - Recordurile mele in 2m

 Iata ce scriam acum un an pe blog:

Hmm, am receptionat CU3EQ, Insulele Azore, la 4257Km... deci este posibil. Daca receptionez, inseamna ca pot sa si lucrez. Totul depinde de mine: cind si cu ce. Ia sa vedem: pot?

Si dupa un an pot spune: aproape am putut! Nu sint chiar 4257 Km, dar sint aproape!

Vara trecuta am lasat deoparte legaturile radio " la intimplare, tot ce aud si cit mai multe la numar ", in Es Sporadic, si am  inceput sa ma concentrez pe directiile de propagare, dupa indicative si distante  mari, posibile  de lucru. Pe 10 Iunie 2021 in jurul orei 15.10 s-a produs o propagare puternica pe sudul Spaniei, acesta fiind momentul oportun pentru mine. Am oprit emisia si m-am concentrat pe indicative. La scurt timp mi-a aparut pe ecran apelul lui EA8JK, din Insulele Canare, care chema pe directia mea o statie din YU. Nu am mai stat pe ginduri, momentele acestea nu dureaza foarte mult, si l-am chemat. La scurt timp mi-a raspuns si am continuat legatura. Finalul legaturii, salutarile, nu l-am mai prins, propagarea radio a scazut. Dar am avut noroc: corespondentul meu l-a copiat. 

A doua zi, am primit confirmarea prin email: legatura radio perfect valabila. A fost bucurie mare in sufletul meu. Am depasit doua bariere: 3000 si 4000 Km, doar cu o singura legatura, HI! Ce frumoasa este pasiunea noastra!

 La cca doua saptamini am primit si premiul: confirmarea qsl.

Si astfel, am adaugat in palmaresul personal un nou record: EA8JK, Insulele Canare, 4091 Km, confirmat!

Probabil, in scurt timp, chiar de anul acesta, numarul legaturilor radio peste 4000 Km se vor inmultii printre iubitorii legaturilor radio in unde ultrascurte. De vina o sa fie Soarele, dar si modul de lucru FT8. Foarte bine! Toata lumea trebuie sa fie fericita!

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---


duminică, 23 ianuarie 2022

Baliza WSPR (1)

 Provocat de un experiment initiat de YO3FFF in banda de 80 m, m-am hotarit sa construiesc si eu o baliza WSPR. Intentia de a construi baliza era veche, asa ca de-a lungul timpului am achizitionat componentele necesare. Fara sa stau prea mult pe ginduri, am schitat o schema bloc cu minimul de componente necesare, am proiectat un cablaj imprimat si am trecut la executarea lui. Montajul a fost destul de simplu, nu a necesitat niciun reglaj. Pentru acesta am folosit o placa de dezvoltare Arduino Nano, un modul GPS Neo-6M si un generator SI5351. O iesire a generatorului am conectat-o la un filtru trece jos, pe care intentionez sa il studiez mai bine, ceva mai tirziu.

La punerea in functiune am avut probleme cu programul. Am ales un program 'de-a gata', luat de pe GitHub, care desi functiona corect, semnalul era nedecodabil. Nu am reusit sa inteleg unde era eroarea, n-am gasit nicio problema in cod. Apoi am testat, fara nicio sincronizare de timp, exemplul dat in libraria EtherKit JTEncode, care a functionat de la prima incercare. Dezamagit de timpul pierdut, m-am hotarit sa rescriu codul plecind de la acest exemplu. Mai intii am eliminat ceea ce era in plus si nu ma ajuta in proiect, apoi am adaugat restul de cod, necesar proiectului. Receptiile le-am facut 'pe masa', cu transceiverul meu si decodarea in laptop. Totul functiona corect. Fara sa montez filtrul de iesire, am conectat antena si am pornit emisia balizei. La scurt timp am fost receptionat de citeva statii din YO3, YO9. Spre seara au inceput sa apara receptiile dinspre SP, OE, DL, PA, OH si cel mai departe EA8. Am ramas impresionat. Cu doar 10mW, intr-o antena dipol, eram receptionat in toata Europa. Minunat!

A doua zi am montat un filtru de iesire si am lasat-o definitiv in emisie, pe antena. Pe fiecare dimineata, la cafea, imi arunc privirea pe harta cu receptia semnalelor mele. Pina azi, recordul de distanta este de cca 4300 Km, receptiont de RX9O, in apropiere de Novosibirsk.

Pe viitor, din motive de tehnice, intentionez sa renunt la modulul GPS si sa folosesc un modul RTC. Din nefericire este foarte greu de gasit un modul precis, experienta mea cu acestea a fost complet neplacuta. Testele continua!

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---

25.01.2022
Un nou record de distanta: WZ7I, 7628 Km in apropiere de New York.
Am masurat consumul montajului:
 - 80 mA in repaus
 - 120 mA in emisie

---  73's   YO7FWS  ---

04.03.2022
TimestampCallMHzSNRDriftGridPwrReporterRGridkmazMode
 2022-03-04 04:00  YO7FWS  3.570097  -13  0  KN24dj  0.01  K4WLO  EM65  8761  309  2 
 2022-03-04 04:02  YO7FWS  3.570097  -14  0  KN24dj  0.01  K4WLO  EM65  8761  309  2 
 2022-03-04 04:04  YO7FWS  3.570096  -21  0  KN24dj  0.01  K4WLO  EM65  8761  309  2 
 

---  73's   YO7FWS  ---

vineri, 21 ianuarie 2022

My VHF Monitor

Articolul original a fost publicat pe siteul Radioamator.ro. Se pare ca titlul articolului si anumite denumiri formulate de mine in acesta, nu puteau fi folosite datorita drepturilor de autor. Pentru a nu intra in polemica, am hotarit retragerea articolului, corectarea acestuia si publicarea in continuare aici pe blogul meu. Articolul prezinta o solutie tehnica simpla care poate fi o sursa de inspiratie pentru alti constructori, programatori sau radioamatori.

Iubesc ESP8266. Este mic, inteligent si ieftin. Stie Wi-Fi, stie sa se conecteze la internet, sa fie server, client, etc. O bijuterie! Cu putina pricepere si multa imaginatie, poti da viata celor mai nastrusnice idei. Iata una pe care avut-o de curand: afisarea in timp real a legaturilor radio in benzile de radioamator.

Hardware

Un modul ESP01S este conectat la alimentare prin intermediul unui stabilizator de tensiune care furnizeaza 3.3V. Doua leduri, conectate la pinii ESP01S, indica starea conexiunii la reteaua Wi-Fi si un server DxCluster. Acestea pot fi comandate de oricare dintre perechile de pini, Rx - Tx sau GPIO0 - GPIO2, prin montarea unor strapuri. Eu am ales pinii: GPIO0 si GPIO2.  

Intreg montajul este realizat pe o bucata de cablaj imprimat, simplu placat, cu dimensiunile: 40 x 30 mm. Pentru micsorarea dimensiunilor cablajului, conectorul alimentarii este montat sub modulul ESP01S.

Montajul este plasat intr-o carcasa din plexiglass de 4 mm, cu ajutorul unor distantieri din PVC. Carcasa este prevazuta cu gauri de fixare pe un panou sau perete.


Software

Partea de software este ceva mai complexa. A fost o provocare chiar si pentru mine. Cuprinde cunostinte de programare pentru microcontrolere, mai precis Arduino, a paginilor WEB, respectiv HTML, CSS, JavaScript si nu in ultimul rand, Leaflet. Acesta din urma a fost necesar pentru afisarea hartii.

Functionarea pe etape a programului din microcontroler este urmatoarea:
1. Restart.
2. Conectarea la reteaua Wi-Fi si semnalizarea conectarii prin aprinderea LED1.
3. Crearea unui server WEB pentru tratarea clientilor.
4. Crearea unui client TCP necesar receptionarii spoturilor de la un DxCluster.
3. Conectarea clientului la un DxCluster din internet.
4. Logarea la DxCluster si transmiterea comenzilor de filtrare a spoturilor. Reusita conectarii si logarii este semnalizata de LED2.
5. Receptionarea spoturilor, parsarea, extragerea indicativelor si locatoarelor din spoturile formatate.
6. Pregatirea datelor pentru a fi transmise unui eventual client conectat la serverul WEB.
7. Tratarea clientilor conectati la serverul nostru prin transmiterea unei pagini WEB.
8. Transmiterea unui refresh catre serverul DxCluster, necesar pentru prevenirea deconectarii. In acelasi timp sunt sterse toate datele care nu mai sunt de actualitate.


In caz de eroare, prevenirea blocarii microcontrolerului se face printr-un reset software. Astfel, acesta va functiona continuu, timp indelungat, fara a fi necesara interventia proprietarului.

Resetarea microcontrolerului se face pentru unul din urmatoarele motive:

1. nu se poate conecta la reteaua wireless.
2. conectarea la DxCluster a esuat.
3. logarea la DxCluster a esuat.
4. daca timp de 15 minute nu receptioneaza date de la serverul DxCluster, inclusiv raspuns la refresh.
5. daca este deconectat de la serverul DxCluster.
In acesta versiune a programului, toate datele stocate inaintea resetarii, se vor pierde. Pe viitor, am in vedere pastrarea acestora si dupa restart.



Pe harta legaturile radio efectuate sint afisate cu ajutorul unor markeri dispusi peste locatorul corespondentilor, uniti prin linii geodezice. Extragerea indicativelor si a locatoarelor se face numai din spoturile corect formatate. Un spot formatat contine la comentariu un camp de forma:

LOC1<MOD>LOC2

unde:
LOC1 - locatorul corespondentului 1
MOD - tipul de propagare anuntat
LOC2 - locatorul corespondentului 2

Pagina WEB transmisa clientului este relativ simpla. Afisarea hartii in interiorul acesteia se face cu ajutorul unui iFrame. Folosirea iFrame-ului in pagina WEB, permite utilizatorului editarea cu usurinta a acesteia, intr-un mod cat mai atragator, fara sa fie afectat de catre acesta. Reactualizarea hartii se face automat printr-un refresh odata la 30 secunde. Datele afisate pe harta se reimprospateaza in timp real, pe masura ce sunt receptionate de la serverul DxCluster. Durata afisarii acestora este de cca 60 minute, dar poate fi modificata. Dupa expirarea timpului de afisare, acestea sunt sterse.

Pentru a raspunde cit mai rapid cererilor clientilor, pagina WEB a fost impartita in trei blocuri. Primul bloc si ultimul, care nu se modifica niciodata pe intreaga perioada de functionare, se incarca in memorie imediat dupa restart. Al doilea bloc se reactualizeaza automat la receptionarea unui spot formatat. Deasemenea toate datele, care nu mai sunt de actualitate, sint sterse imediat dupa transmiterea unui refresh catre serverul DxCluster. Astfel, in orice moment, la cererea unui client, pagina WEB este disponibila in cel mai scurt timp posibil pentru a putea fi transmisa.



Continutul paginii a fost creat cu editorul NotePad++. Conversia acesteia pentru a fi incarcata in program a fost realizata cu programul utilitar TextConv.
Pe viitor am in vedere imbunatatirea functionarii serverului, intoducerea de facilitati noi si posibiltatea  mentenantei de la distanta.
Serverul meu poate fi accesat la adresa: http://yo7fws.go.ro. Acesta functioneaza continuu de peste sase luni, fara interventii din partea mea.
Pornind de la acest proiect am mai creat inca un server, “Aproape de ES”, acum offline, care imi afiseaza in timp real evolutia propagarii Es Sporadic pentru frecvente apropiate benzii 144 MHz. Alte proiecte posibile ar putea fi afisare pe harta a evolutiei unui balon, emitator APRS, WSPR, etc. O pagina de internet prin care se extrag legaturile radio dintr-un fisier EDI si afisarea acestora pe harta. Totul tine doar de imaginatie.

Descarca: codul sursa

Pentru realizarea proiectului m-am inspirat din:

Constantin Badican  - YO7FWS
---  73's   YO7FWS  ---


duminică, 14 noiembrie 2021

CW.DLL

Am scris acest DLL de proba. A fost ca o provocare pentru mine. Un experiment. Mi s-a parut interesant. La baza DLL se afla un program de transmis telegrafie pe care l-am scris in urma cu 15-20 de ani. Am mai adaugat comenzi neceasare pentru listarea si utilizarea placilor de sunet si porturilor seriale. Cu exceptia algoritmului de transmitere a semnalelor telegrafice, toate celelalte proceduri si functii le-am gasit pe internet. Nu am facut decit sa le copiez, sa le modific si sa le folosesc intocmai scopului meu. 

DLL a fost scris in Delphi 10.2 Tokyo Starter si tot in Delphi l-am testat. Mi s-a parut in regula. Codul sursa comentat este disponibil, nu este niciun secret. 

CW.DLL 
Proceduri si functii exportate:

[ DLL ]
procedure DllInitialise 
- creaza si initializeaza componentele din DLL.
procedure DllFree 
- elibereaza memoria de componentele create in DLL.

[ Placa de sunet ]
function GetSoundCards: WideString
- afiseaza lista placilor de sunet disponibile in calculator.
procedure SetSoundCard (number: cardinal)
- seteaza spre utilizare o placa de sunet din lista GetSoundCards.

[ CW ]
procedure SetTone (frequency: integer) unde frequency = 300 ... 3000
- seteaza frecventa in Hz al tonului audio telegrafic.
procedure SetAmplitude (level: integer) unde level = 0 ... 10000
- seteaza nivelul tonului audio telegrafic.
procedure SetMute (onOff: boolean)
- activeaza / dezactiveaza tonului audio telegrafic.
procedure SetSpeed (speed: integer) unde speed = 12 ... 40
- seteaza viteza de transmitere a mesajului in WPM.
procedure SetText (text: WideString )
- seteaza textul ce urmeaza a fi transmis in telegrafie.
function IsBusy: boolean
- semnalizeaza daca se transmite un mesaj in telegrafie.
procedure SendCW
- comanda pornirea transmisiei mesajului in telegrafie.
procedure StopCW
- comanda oprirea transmisiei mesajului in telegrafie.

[ Portul serial]
function GetSerialPorts: WideString
- afiseaza lista porturilor seriale disponibile in calculator.
function SetSerialPort (name: WideString): boolean
- seteaza portul serial ce urmeaza a fi folosit pentru comanda PTT si manipulare.

[ Manipulare ]
procedure EnablePTT (enable: boolean)
- activeaza / dezactiveaza comanda PTT pe durata transmiterii mesajului in telegrafie.
procedure SetPTTPin (pin: WideString)
- seteaza pinul ce urmeaza a fi folosit pentru comanda PTT. Acesta pot fi: RTS sau DTR.
procedure EnableKey (enable: boolean)
- activeaza / dezactiveaza manipularea transceiverului in telegrafie.
procedure SetKeyPin (pin: WideString)
- seteaza pinul ce urmeaza a fi folosit pentru manipularea transceiverului. Acesta pot fi: RTS sau DTR.

          Transmiterea unui text in telegrafie se poate realiza in trei pasi. Primul pas se poate face la deschiderea programului sau premergator comenzii de transmitere a textului. Este obligatoriu. Fara initializare DLL nu va functiona. Pasul 2 se utilizeaza doar cind se transmite textul. Comenzile optionale pot fi transmise catre DLL doar o singura data sau pe masura ce sint modificate. Ultimul pas se poate face la inchiderea programului sau imediat dupa transmiterea textului. Nu toti parametrii pot fi schimbati pe timpul transmisiei, o parte din acestia sint setati doar la inceputul acesteia.

1.     
DllInitialise 

2.    
SetSoundCard (0) - optional
SetTone (1000) - optional
SetAmplitude (2000) - optional
SetSpeed (24) - optional
EnablePTT (True) - optional
SetPttPin ('RTS') - optional
EnableKey (True) - optional
SetKeyPin ('DTR') - optional
SetText ('CQ CQ CQ')
SendCW

3.
DllFree

          A fost un experiment interesant. A durat cca trei saptamini. Cind m-am apucat sa scriu, nu stiam prea multe despre DLL, crearea de componente, mesagerie, handle. Acum experienta mea s-a imbogatit. Am avut de cistigat. Ce mai urmeaza?

Descarca: codul sursa

Update: deoarece pastrez fisierele pe Google Drive sint nevoit sa afisez doar codul sursa fara executabile. Devine tot mai greu partajarea fisierelor executabile, daca nu chiar imposibila.

Pentru realizarea proiectului m-am inspirat din:
---  73's   YO7FWS  ---


vineri, 15 octombrie 2021

Pamint - Luna - Pamint in 2.7 secunde ( 3 )

           Anul acesta am lucrat foarte putin EME. Lucrarile de mentenanta la antena, din primavara, au afectat in mod negativ sensibilitatea. Si totusi nu m-am descurajat, am cautat momentul oportun si am avut rezultate. Cu ocazia concursului ARI din luna septembrie am reusit doua legaturi radio cu RX1AS si I2FAK. Este prima mea participare intr-un concurs EME si m-am grabit sa trimit fisa pentru a confirma legaturile corespondentilor mei. La citeva zile diferenta am lucrat cu I3MEK si SM2BYC. Random. Acestia au receptionat apelul meu lansat catre Luna. Imi este greu sa descriu senzatia pe care am avut-o cind mi-am vazut indicativul, in raspunsul la apel, pe ecran. Exact pentru acest sentiment merita intreaga osteneala. Reprezinta sfirsitul unor vise, acum implinite, si indelungi asteptari. Trebuie sa continui, trebuie sa trec la nivelul urmator. Merita!





          Conditiile de lucru au ramas neschimbate: transceiver FT897D, amplificator 200W, antena DK7ZB cu 10 elemente, 3WL, 25 m cablu Ecoflex 10, fara preamplificator. Toate legaturile s-au realizat cind Luna se afla la nivelul orizontului cu elevatie sub 15 grade. Sistemul de orientare in azimut, autoconstruit, imi permite orientarea antenei cu o precizie de 1 grad. Nu am camera video pe antena, ma incred in aparate.   

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---

miercuri, 14 aprilie 2021

Separare galvanica? :-))

          Azi am inteles de ce numai am tensiune de alimentare pe un port USB, HI! De ce in 6m mi se reseteaza panadapterul? De ce in 80m, daca maream puterea, interfata audio cu placa audio separata, se reseta?
Motivul: separarea galvanica!


Iata o schema simplificata a unei interfete audio clasica, audio si PTT. Planul de masa al calculatorului, culoarea albastra, este complet separat de planul de masa al statiei, culoarea rosie. Semnalele audio sint transferate in ambele sensuri prin intermediul transformatoarelor. Comanda de trecere pe emisie a statiei se face optic. Astfel, transformatoarele si optocuplorul, izoleaza galvanic circuitele de masa ale ambelor echipamente.
          Dar ce se intimpla daca intre calculator si statie se conecteaza un circuit suplimentar? Acesta poate fi un adaptor USB - CAT, un panadapter sau o interfata oarecare.



Iata ce  s-a intimplat la mine cind am conectat un circuit panadapter. Priviti imaginea: masa calculatorului, culoarea albastra, se intilneste cu masa statiei prin intermediul modulului panadapter. Astfel, functia de izolare a transformatoarelor si optocuplorului este anulata. Planul de masa este continuu. Lucrez astfel de foarte mult timp, dar niciodata nu am banuit ca se intimpla asa ceva.



Cum se poate testa lipsa separatiei galvanice? Simplu: se conecteaza toate circuitele necesare intre calculator si statie, apoi se masoara cu ohm-metrul intre planele de masa, la bornele transformatoarelor separatoare. Daca nu prezinta scurt, atunci circuitul este OK.



Cum pot corecta lipsa separatiei galvanice intre calculatorul si statia mea? Simplu: prin montarea unui condensator intre cele doua plane de masa. Nu stiu de ce, dar imi aminteste de circuitul de cuplare al antenei din selectoarele de canale TV Electronica.

Concluzie: daca intre calculator si statie inafara de interfata audio izolata mai sint si alte circuite, daca acestea nu sint galvanic izolate, atunci nici interfata audio nu este izolata. Verificati cu ohm-metrul lipsa continuitatii intre planele de masa!  

Sursa emoticon: 

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---


joi, 1 aprilie 2021

Circuit de comanda AZ - EL pentru rotorul antenei ( 4 )

 Circuitul de interconectare al modulelor



Toate modulele au fost interconectate folosind cablu multifilar. Pentru conectarea cablurilor care realizeaza conexiunea cu motoarele si senzorii Reed, am folosit o regleta recuperata de la o sursa de alimentare in comutatie. Aceasta a fost montata in exteriorul carcasei de plastic in care este dispus montajul. Sursele de alimentare de 12 si 24V, deasemenea, au fost montate in interiorul carcasei de plastic. Acestea din urma nu sint construite, ele fiind cumparate.
Software-ul este in faza de testare si va fi publicat pe viitor.

Constantin Badican  - YO7FWS

---  73's   YO7FWS  ---

sâmbătă, 20 martie 2021

Circuit de comanda AZ - EL pentru rotorul antenei ( 3 )

 Modulul nr.3

Este destinat afisarii datelor sau mesajelor generate de microcontroler.
Afisarea se face cu ajutorul a doua ecrane OLED de 0.96 inch. Rezolutia unui ecran este 128 x 64 pixeli. Initial am folosit un ecran LCD 2 x 16 caractere, cu dimensiunile 80 x 36 mm. Am renuntat rapid la acesta din urmatoarele motive:
- nu reusea sa afiseze in timp real datele generate de microcontroler, respectiv azimutul si elevatia.
- vizibiltatea era redusa. Nu ma refer strict la dimensiunea fontului. Nu era vizibil bine in lumina naturala, iar unghiul de vizibilitate era redus.
Cautind solutii, dupa mai multe incercari nereusite, am testat cu succes ecranele OLED. Am ramas impresionat de viteza mare la afisare, cca 60 cadre/secunda, si vizibilitatea acestora in lumina naturala. In opinia mea sint cele mai bune.



Pentru afisarea datelor am folosit doua ecrane identice din urmatoarele motive:
- aveam panoul frontal deja decupat pentru un ecran LCD 16 x 2 caractere.
- dimensiunile ecranelor OLED sint destul de reduse si nu puteam afisa toate datele.
Astfel am utilizat doua ecrane pozitionate astfel incit dimensiunea compusa sa se incadreze in dimensiunile ecranului LCD. Ambele ecrane au fost montate pe o bucata de cablaj imprimat cu dimensiunile 80 x 36 mm, iar sustinerea acestora am realizat-o cu banda dublu adeziva. Un cadran din carton negru ascunde ochiului elementele constructive care nu trebuiesc vazute.


Ecranele comunica cu microcontrolerul pe magistrala de date I2C. Acestea sint setate, din constructie, cu o adresa unica de interogare. Pentru a nu avea conflicte, am schimbat adresa de interogare la un ecran. Aceasta am realizat-o prin modificarea pozitiei unui rezistor SMD situat pe cablajul acestuia. Modificarea este optionala si este recoandata de producator.

Pentru realizarea proiectului m-am inspirat din:

Descarca: Cablajul imprimat.


Modulul nr.4


Asigura conexiunea si transferul de date cu calculatorul.
Este o expansiune a portului USB de pe placa de dezvolatare STM32F103C. Conectat la calculator, dupa instalare, in lista dispozitivelor instalate va apare un port serial cu denumirea 'Mapple'. Prin intermediul acestui port este posibila programarea, comandarea sau interogarea microcontrolerului. Programarea se poate face fara a fi necesara deconectarea placii de dezvoltare din soclu.
Montajul a fost realizat pe o bucata de cablaj imprimat cu dimensiunile: 44 x 26 mm.
Conectorul folosit este USB-B.






joi, 18 martie 2021

Circuit de comanda AZ - EL pentru rotorul antenei ( 2 )

 Modulul nr. 2


Acest modul asigura conexiunea cu elementele de citire a pozitiei si executie.

Elementele de citire a pozitiei

Citirea pozitiei antenei se face cu ajutorul a doua contacte Reed. Acestea sint actionate de motoarele care actioneaza antena. Unul in azimut si altul in elevatie. La fiecare rotatie completa a axelor acestora este generat un impuls electric. Acesta este captat si contorizat de catre microcontroler. 

Exemplu practic 
Pentru rotirea completa a antenei utilizez un reductor mecanic cu raportul 1:60. La 60 de rotatii ale axului melcat, axul antenei se roteste o singura data.
Axul melcat este conectat la un motoras de stergator de parbriz la 24V. Acesta la rindul sau are un reductor intern cu raportul 1:36. 
In concluzie, pentru rotirea completa a antenei sint necesare 60 x 36 rotatii ale axului melc al motorasului, respectiv 2160 rotatii. Cum la fiecare rotatie este generat un impuls, voi avea 2160 impulsuri.
Rezolutia citirii pozitiei antenei este de 360 grd / 2160 impulsuri = 0.1666 grd / 1 impuls.
Daca reusec sa contorizez impulsurile atunci voi cunoaste in orice moment unde se afla antena mea si cit trebuie deplasata sau cit s-a deplasat. 
Contactele sint conectate la microcontroler prin intermediul unor optocuplori. Condensatoarele C1 si C2 de 1uF au rolul de a filtra zgomotele si netezii semnalul sosit de la contacte. Valoarea de 1uF functioneaza foarte bine la mine. Semnalele sosite de la contactele Reed sint captate de microcontroler pe sistemul de intreruperi, astfel niciun impuls electric nu este pierdut.

Elementele de executie

Rotirea si elevarea antenelor se face cu ajutorul a doua motoare. Acestea trebuiesc comandate electric cu doua tipuri de semnale: unul, pentru comanda de pornire si oprire a motoarelor, si altul, pentru schimbarea sensului de rotatie. Aceste semnale sint generate automat, in functie de comenzi si decizii, de catre microcontroler. Pentru schimbarea sensului de rotatie, pentru un singur motor, folosesc ambele perechi de contacte ale unui releu. Pentru pornirea si oprirea acestui motor folosesc un comutator electronic, respectiv BTS432D. Comutatorul electronic poate fi comandat normal, 1 pentru motor pornit si 0 pentru motor oprit, cit si in PWM. Astfel, pe linga pornirea si oprirea motorului, este posibila cresterea sau reducerea turatiei motoarelor.


Montajul a fost realizat pe o bucata de cablaj imprimat cu dimensiunile: 100 x 95 mm. Pentru conectarea firelor de legatura cu motoarele si contactele Reed, am folosit o bareta de contacte recuperata de la o sursa in comutatie.

Atentie, pinul 4 de la comutatorul electronic, BTS432D, nu este conectat la cablajul imprimat!