COR ripetitore .... finalmente funziona tutto

Ho appena concluso la parte logica di un controller per ponti ripetitori.

Allego qui lo script di base, da usarsi per configurare e personalizzare la propria impostazione .....

Mi rendo conto che l'argomento non è di largo interesse ma, io che cercavo qualcosa e non trovavo nulla, mi sono dovuto impegnare a costruirlo in ogni sua parte, compreso il decoder DTMF per settarne la modalità di funzionamento.

Siccome è abbastanza lungo sia spiegarne il funzionamento che spiegarne la configurazione per impostare la modalità voluta, mi limito a dire che il sistema è estremamente flessibile, potendo definire una grande quantità di modi di funzionamento, selezionabili via DTMF da un ricevitore (o più di uno) o da un modulo GSM;
le caratteristiche sono queste:

  • gestione fino a 3 RX (controllo sui segnali di busy di ciascun ricevitore);
  • gestione fino a 4 TX (4 PIN, ciascuno con una coda programmabile prima della compilazione)
  • 4 PIN che assumo valore HIGH alla caduta del segnale di busy, per una durata programmabile prima della compilazione
  • 16 PIN che assumono il valore HIGH al rilevamento di un segnale di busy, e tornano a LOW alla caduta del segnale di busy;
  • memorizzazione su eeprom dell'ultima modalita di funzionamento attivata;
  • visulaizzazione su LCD dei dati (RX impegnati e TX impegnati);
  • decoder DTMF (telecomando) integrato, per settare e cambiare la modalità di fuzionamento...

Il sistema non è ancora concluso, perchè devo ancora integrare delle funzioni per esempio:

  • spegnimento dell'LCD dopo tot minuti dall'ultimo uso ...
  • comunicazione in CW (morse) del nome del ripetitore, ad intervalli regolari, nonchè per comunicare il cambio di settaggio, quando si agisce con il telecomendo;
    oppure, e sarebbe meglio:
  • integrare una scheda audio (che sto aspettando), per trasmettere in fonia quanto detto sopra;
    un'altra imlementazione interessante sarebbe di attivarlo come web server via http, e poter impostare i parametri di funzionamento via http..

se qualcuno lo volesse provare i collegamenti sono questi:
i PIN per rilevare i segnali di busy dei tre ricevitori sono:
A0, A1, A2

i 24 pin utilizzati sono gestiti tramite shift out gestiti tramite
const byte dataPin = A3; // PIN utilizzati per lo shift register
const byte latchPin = A4; // 24 uscite indipendenti
const byte clockPin = A5; //

l'LCD è collegato con questi PIN
LiquidCrystal lcd(13,12,11,10,9,8);

il decoder DTMF è realizzato con un MT8870 cablato come da qui: Arduino Forum
//ARDUINO PD3 PD4 PD5 PD6 PD7
//MT8870 PIN 15(STD) PIN 11(Q1) PIN 12(Q2) PIN 13(Q3) PIN 14(Q4)

Il lavoro sin qui fatto, lo metto qui a disposizione di chi volesse una base da cui scopiazzare qualcosa oppure rifletterci su per apportare modifiche ...

in un'altro post, che posterò in un'altra sezione chiederò consigli su come attivare il web server ... per ogni informazione, se a qualcuno interessasse.. sono qui ... grazie ciao

cor_2_0.zip (4.5 KB)

1 Like

Non so assolutamente a cosa possa servire, dato che ho sbirciato velocissimamente il codice, ma tutta la mia stima per la condivisione delle tue fatiche con la comunità. Sono sempre contento quando qualcuno mette a disposizione degli altri il proprio lavoro. :wink:

grazie leo.. ma ci sono anche parti copiate da te....

Ricordati le licenze, allora :wink:

Complimenti, molto interessante il tuo progetto, stavo proprio pensando di provare a buttare giù qualcosa che potesse servire alla gestione di un ponte ripetitore che dovremmo installare nelle prossime settimane e guarda te... faccio una ricerca in google e me lo trovo bello e pronto! :slight_smile: :slight_smile:
A parte gli scherzi, complimenti veramente, testerò il sistema che hai creato e vedrò se ci sono modifiche da apportare ed eventualmente le renderò pubbliche oltre che a passartele...
Ciao e Grazie!

ciao, mi piacerebbe capire di più il tuo progetto.
Da quel che ho capito è un trasmettitore, e riceve un input da un tastierino numerico letto in DTMF(che immagino essere uno standard di trasmissione dati con suoni).. o non ci ho capito una mazza??

Comunque sembra un bel progetto, forse merita pure di essere spostao iun megatopic visto che orami rimane solo qualche "ritocco"

comuque ho guardato il tuo codice (sguardo veloce, eh, senza sapere che combini!)

effettivamente le cose su una riga sola sono più leggibili, ma solo perchè sono scritte in maniera "poco leggibile" a priori, oltre che inefficente da l punto di vista dello spazio skecth.. per esempio:

switch (repeaterMode)
    { 
        case 0: 
        lcd.setCursor(0, 0);  lcd.print("Md: 0 "); 
        if (bitRead(PINC, 0) && bitRead(busy, 0)) { busy1=B001; azioneA_1ptt = B0000; azioneA_1rit = B0000; azioneB_1 = B00000000; azioneC_1 = B00000000;} else { busy1=B111;  azioneB_1 = B00000000; azioneC_1 = B00000000;}
        if (bitRead(PINC, 1) && bitRead(busy, 1)) { busy2=B010; azioneA_2ptt = B0000; azioneA_2rit = B0000; azioneB_2 = B00000000; azioneC_2 = B00000000;} else { busy2=B111;  azioneB_2 = B00000000; azioneC_2 = B00000000;}
        if (bitRead(PINC, 2) && bitRead(busy, 2)) { busy3=B100; azioneA_3ptt = B0000; azioneA_3rit = B0000; azioneB_3 = B00000000; azioneC_3 = B00000000;} else { busy3=B111;  azioneB_3 = B00000000; azioneC_3 = B00000000;}
        break;
[...]

a parte che forse avrei usato degli array per busy123 etc... però mantenendoli comunque diventa:

//set default value
busy1 = busy2 = busy3 = B111;  
azioneB_1 = azioneB_2 = azioneB_3 = 0; 
azioneC_1 = azioneC_2 = azioneC_3 = 0;

//write on LCD
lcd.setCursor(0, 0);  
lcd.print("Md: "); 
lcd.print( repeaterMode );
lcd.print(" "); 

//cchange default value if needed
switch (repeaterMode)
    { 
        case 0: 
			if (bitRead(PINC, 2) && bitRead(busy, 2)) { 
				busy3= B100;
                                azioneA_3ptt = 0; 
   	    		        azioneA_3rit = 0; 
			}else if (bitRead(PINC, 1) && bitRead(busy, 1)) { 
				busy2= B10;
                                azioneA_2ptt = 0; 
   	    		        azioneA_2rit = 0; 
			}
			if (bitRead(PINC, 0) && bitRead(busy, 0)) { 
				busy1= B1;
                                azioneA_1ptt = 0; 
   	    		        azioneA_1rit = 0; 
			}
			
        break;

in realtà anche busi potrebbe esseere messo tra i valori default, visto che l'unico case che lo varierebbe è il case 1.

Secondo me non hai spiegato la cosa più importante, che cos'è un COR ripetitore, a cosa serve, un esempio di applicazione pratica.
Come dice John Hancock o-tti-mo la-vo-ro!

In parole povere, un circuito definito COR è un sistema che serve alla gestione di un ponte ripetitore radio.
Detto ponte è di solito formato da un ricevitore e da un trasmettitore che lavorano su frequenza spostate tra loro di uno shift predefinito.
Il COR serve sostanzialmente a; far andare in trasmissione il TX quando viene ricevuto un segnale valido in RX, ricevere eventuali comandi DTMF e decodificarli per attivare o disattivare funzioni del ripetitore, gestire la cosidetta CODA, cioè il tempo di trasmissione residua del TX dopo che il segnale RX è terminato.
A questo possono essere aggiunte altre funzioni, come la trasmissione dell'indicativo del ponte a intervalli regolari (obbligatorio per i ponti radioamatoriali), la gestione di altri link o ricevitori o l'attivazione automatica in caso di guasti di apparecchiature di scorta atte a mantenere il ponte attivo anche in caso appunto di guasto...
Non so se sono stato sufficientemente chiaro sul funzionamento, diciamo che come puntualizzato da Paolo, l'argomento non è di larga diffusione in quanto è relegato all ambito radioamatoriale o poco più.
A disposizione per altri chiarimenti.
Ciao!

fico, e se seguissi i tuoi schemi, potrei costruirmi da solo un ponte radio? in che frequenza? con che range? peso e spazio occupato? dovrei avere il patentino da radioamatore?

@lesto: si,in teoria ti servirebbe la patente da radioamatore..e per averla devi sostenere un esame..se invece hai una laurea in ingegneria dell'informazione(es informatica),elettronica o perito elettronico,non hai neanke bisogno di sostenere l'esame..

sì, un pò mi sono informato, il problema è: e se sono perito informatico?

già è una mezza idea, se poi devo pure fare gli esami ci ripenso a quando mi serve :slight_smile:

lesto:
sì, un pò mi sono informato, il problema è: e se sono perito informatico?

già è una mezza idea, se poi devo pure fare gli esami ci ripenso a quando mi serve :slight_smile:

Io lo sto facendo, sono perito informatico e non ho fatto l'esame... per ora mi hanno dato anche una sigla provvisoria...
IZ3ALZ

Ok... scusate ma non avevo visto le Vs ultime risposte... in questi ultimi giorni ho trascurato un pò....

Ok.. per la definizione del ponte radio data da kd2bgl.
Aggiungo che un ponte ripetitore è nella sua forma più semplice, composto da un ricevitore che lavora (riceve su una frequenza fRX, per esempio 145.150 MHz) e da un trasmettittore (trasmete su una frequenza shiftata più in alto o più in basso, di un opportuno valore affinche non disturbi il ricevitore vicino, per esempio 145.750 MHz) (i valori dati corrispondono al ponte radioamatroriale VHF che si chiama R6).

A questo sistema così semplice ci sono diverse varianti per esempio vedete qui:


che è il link nazionale radioamatoriale messo in piedi dal CISAR , cui mi pregio di appartenere.

dove un generico nodo, non ha solo un ricevitore ed un trasmettitore, ma almeno tre ricevitori e tre trasmettitori che hanno queste funzioni;
rx1 e tx 1 -- > gestiscono il collegamento sulla tratta 1 (immaginate con una antenna direttiva verso un'altro nodo)
rx2 e tx2 --- > gestiscono il collegamento sulla tratta 2 (immaginate con una antenna direttiva verso un'altro nodo)
rx3 e tx3 ---> gestiscono i collegamenti per la una diffuzione (immaginate con un'antenna omnidirezionale che cura la diffusione del segnale nella zona servita dal nodo)

ogni ricevitore ha un segnale di ricevitore occupato ( busy), che indica che il ricevitore staricevendo un segnale che ha superato la soglia di sensibilità minima preimpostata (squelch);
il segnale di busy, costituisce l'evento che dispone l'accensione (commutazione) dei trasmettitori in base alla modalità di funzionamento voluta.

chiaramente si possono definire diversi stati di funzionamento per sempio;

rx1 e tx 1 -- > attivo
rx2 e tx2 --- > attivo
rx3 e tx3 ---> disattivo
il nodo funge solo da transito e non si cura della diffusoine in loco

rx1 e tx 1 -- > disattivo
rx2 e tx2 --- > attivo
rx3 e tx3 ---> attivo
la tratta 1 è disattivata, perchè magari cè un uso improprio che giunge da quela lato della rete ..

quando il ponte effetua la connessione tra tratte operanti su bande diverse (ec. VHF ed UHF), si dice, che funge anche da trasponder Transponder - Wikipedia

oltre naturalmente alla possibilità di spegnere del tutto, per esempio per abusi sull'uso del ponte etc..

il cambiamento è l'impostazoine dei vari stati avviene tramite il telecomando DTMF, inviando dei codici di controllo prestabilità , che settano la modalità di funzoinamento come desiderato dal manutentore del ponte ....

il segnale DTMF può essere inviato o tramite uno dei tre ricevitori, oppure anche tramite un modulo GSM ..

adesso sto cercando di capire come implementare un piccolo web server per controllare alcune variabili e poterle modificare via http...

a chi è interessato spiego come definire la generica modalità di funzionamento:

Per ogni stato di funzionamento bisogna inserire un blocco di codice come questo.

        case 0: 
        lcd.setCursor(0, 0);  lcd.print("Md: 0 "); 
        if (bitRead(PINC, 0) && bitRead(busy, 0)) { busy1=B001; azioneA_1ptt = B0000; azioneA_1rit = B0000; azioneB_1 = B00000000; azioneC_1 = B00000000;} else { busy1=B111;  azioneB_1 = B00000000; azioneC_1 = B00000000;}
        if (bitRead(PINC, 1) && bitRead(busy, 1)) { busy2=B010; azioneA_2ptt = B0000; azioneA_2rit = B0000; azioneB_2 = B00000000; azioneC_2 = B00000000;} else { busy2=B111;  azioneB_2 = B00000000; azioneC_2 = B00000000;}
        if (bitRead(PINC, 2) && bitRead(busy, 2)) { busy3=B100; azioneA_3ptt = B0000; azioneA_3rit = B0000; azioneB_3 = B00000000; azioneC_3 = B00000000;} else { busy3=B111;  azioneB_3 = B00000000; azioneC_3 = B00000000;}
        break;

questa è la modalità 0, ovvero vedete che tutte le variabili azioneA_ptt, azioneA_rit, azioneB, e azoineC .. sono tutte 0, quindi al verificarsi dell'evento bitRead(PINC, 0) o bitRead(PINC, 1) o bitRead(PINC, 0), che sono i pin che rilevano la presenza del segnale di busy, non attiva nessun comando, essendo tutti 0 ...

vediamo, per esempio la modalità 1, essa potrebbe essere così (potrebbe, perchè in effetti deve essere adattata alla propria situazoine reale)..

        case 1: 
        lcd.setCursor(0, 0);  lcd.print("Md: 1 "); 
        if (bitRead(PINC, 0) && bitRead(busy, 0)) { busy1=B001; azioneA_1ptt = B1110; azioneA_1rit = B0000; azioneB_1 = B11100000; azioneC_1 = B11100000;} else { busy1=B111;  azioneB_1 = B00000000; azioneC_1 = B00000000;}
        if (bitRead(PINC, 1) && bitRead(busy, 1)) { busy2=B010; azioneA_2ptt = B1110; azioneA_2rit = B0000; azioneB_2 = B11100000; azioneC_2 = B11100000;} else { busy2=B111;  azioneB_2 = B00000000; azioneC_2 = B00000000;}
        if (bitRead(PINC, 2) && bitRead(busy, 2)) { busy3=B100; azioneA_3ptt = B1110; azioneA_3rit = B0000; azioneB_3 = B11100000; azioneC_3 = B11100000;} else { busy3=B111;  azioneB_3 = B00000000; azioneC_3 = B00000000;}
        break;

NB ... scusate per i B0000000 .... si puo, più giustamente, scrivere 0, semplicemente ...

cioè al verificarsi dell'apertura di uno squelch su un ricevitore (bitRead(PINC, 0), o bitRead(PINC, 1) o bitRead(PINC, 2)) si attivano tutti e tre i pin destunati al ptt (azioneA_1ptt = B1110 o azioneA_2ptt = B1110, o azioneA_3ptt = B1110) , questi pin come detto prima sono caraterizzati che il loro stato si mantiene per un tempo, in millisecondi (coda del trasmettitore), oltre la caduta del segnale di busy.

gli altri PIN (azioneB ed azioneC), servono per effetuare gli scambi nell'elettronica analogica (selezionare il segnale audio dal giusto ricevitore, ed inoltrarlo al giusto trasmettitore, azionare messaggi automatici preregitrsti in coda al messaggio etc..)...

etc...

la variabile busy serve a specificare la priorità e la mutua esclusione (se voluto) dei ricevitori...
per esempio questo
busy1=B001; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);
busy2=B010; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);
busy3=B100; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);
con questo
busy = busy1 && busy2 && busy3 ;
stabilisce la mutua esclusoine dei ricevitori, cioè quando si apre il primo ricevitore, poi vengono ignorati gli altri....

invece una configurazione così:
busy1=B101; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);
busy2=B110; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);
busy3=B100; (busy associato alla condizoine True) e busy1=B111 (associato alla condizoine false (else);

stabilisce una priorità del ricevitore 3 che non può essere inibito dagli altri ( ma che può inibire gli altri) ....

mi rendo conto di non essere molto chiaro. scusate... ed abbiate pazianza anche per i numerosi strafalcioni ortografici dovuti (spero) alla digitazione veloce
ciao

scrivete pure qui per altre info...

mi rimane ancora aperto qualche dubbio

  1. quanto mi costa? ovvero, preso tutto il necessario (o autocostruendolo, se non è impossibile), quanto si spende?
  2. quali sono le freuqenze più usate (sempre in deroga al punto 1., quindi anche economiche)
  3. quale aerea copro senza usare altri ponti e antenne stratosferiche?
  4. quanto è il consumo?
  5. cosa e per quanto tempo posso trasmettere/ricevere, con che velocità, e più o meno con che consumi?

Ciao lesto

  1. quanto mi costa? ovvero, preso tutto il necessario (o autocostruendolo, se non è impossibile), quanto si spende?

ciao lesto.... non è facile da realizzare nel senso che serve molta atrezzatura.. noi la faccimoa a livello di associazione, ci quotiamo per comprare le radio che su ebay troviamo tra poche decine di euro ma anche 150 uro cadauna ...ne servono almeno 2 per la vrsione piu semplice (un rx e un tx)
poi servono le antenne, almeno due, una per il tx ed una per il rx , almeno 70 euri cadauna;
poi servono i filtri passabanda, a cavità, sintonizzati sulle frequenze di tx e rx, ciò affinchè il trasmettittore non saturi il ricevitore e lo silenzi quando sta ricevendo... (se li devi acquistare ci vuole qualche centinaio di euri)
poi serve costruire il cor e la parte analogica (parte BF audio etc);

  1. quali sono le frequenze più usate (sempre in deroga al punto 1., quindi anche economiche)

noi lavoriamo sulle frequenze radioamatoriali, tipicamente nella parte VHF e UHF della bandplan assegnataci, guarda qui:
http://www.associazionemarconi.com/rds/bandplan.htm

  1. quale aerea copro senza usare altri ponti e antenne stratosferiche?

qui da noi (ARI Oristano) c'è il ponte R6, sul monte "montiferru", dove ci sono anche i ripetori RAI (zona molto elevata) e copre buona parte di tutta la regione Sardegna, per intenderci arriva a Cagliari ed anche Sassari, c'è anche UR20 (UHF), gestito dal CISAR che è collegato al link nazionale CISAR che, dallo stesso punto (quasi), copre buona parte del territorio regionale.
guarda qui: http://www.radioamatore.info/images/stories/Ponti_Ripetitori/linknazionale061009.jpg

  1. quanto è il consumo?

ogni trasmettitore eroga 10, 20 o 30 W al max, comunque, per alimentare il tutto, ci vuole un alimentatore da almeno 15- 20 A. Non sarebbe male che ci fosse anche una batteria tampone ....

  1. cosa e per quanto tempo posso trasmettere/ricevere, con che velocità, e più o meno con che consumi?

procurati un rtx e prova a fare qualche ascolto, guarda questo:
http://www.ebay.it/itm/Main-radio-Baofeng-UV-3R-Plus-MARKII-Bibanda-VHF-UHF-2-Watt-Radio-FM-TOP-Design-/160862235678?pt=Ham_HF_VHF_UHF_S
ma ricordati che puoi usarlo solo in ricezione .. per trasmettere ci vuole la patente che puoi ottenere con l'esame, se non sei almeno perito elettronico ...

ma se ti piace la radio come hobby, ti consiglio di procurarti almeno un ricevitore HF (0-30 Mhz, AM ed SSB) giusto per capire di cosa si tratta, si possono ricevere trasmissioni audio in fonia, ma anche decodificare trasmissioni nei modi digitali (RTTY, PSK31, SSTV etc..)....

ciao
Paolo
IS0CFU ... adesso vado a pranzo..

kd2bgl:
Complimenti, molto interessante il tuo progetto, stavo proprio pensando di provare a buttare giù qualcosa che potesse servire alla gestione di un ponte ripetitore che dovremmo installare nelle prossime settimane e guarda te... faccio una ricerca in google e me lo trovo bello e pronto! :slight_smile: :slight_smile:
A parte gli scherzi, complimenti veramente, testerò il sistema che hai creato e vedrò se ci sono modifiche da apportare ed eventualmente le renderò pubbliche oltre che a passartele...
Ciao e Grazie!

ciao ... visto che sei interessato ... che ne diresti di lavorarci assieme per aggiungere le ulteriori implementazioni ????...
... la parte in morse, cioè la possibilità di inviare in codice morse l'ho già implementata, la devo solo fondere nello schetc gia fatto...

ho bisogno di più pin, e sto aspettando gli atmel644 (poi dovrò mettrere il boot loader) etc..

sto anche aspettando queste:
http://www.ebay.it/itm/MP3-Voice-module-U-disk-audio-player-SD-card-voice-module-WTV020-SD-16P?item=160806790230&cmd=ViewItem&_trksid=p5197.m7&_trkparms=algo%3DLVI%26itu%3DUCI%26otn%3D5%26po%3DLVI%26ps%3D63%26clkid%3D1530243404452511681

con le quali, vorrei inviare tutti i messaggi in fonia ....

inoltre l'implementazione più importante è quella di attivare anche il web server per controllare il tutto tramite http ....

fammi sapere grazie.... e naturalmnete se conosci chi può aiutarci invitalo.. grazie..
ciao

per il web server consiglio:

  1. implementare un sistema di ricezione dei comandi e lettura dei dati via seriale (facile da testare anche usando un PC, se usi la seriale per programmare!)
  2. un secondo arduino fa da server web (dai un'occhiata alla libreria tinyweb, tinyurl o qualcosa di simile) comunica col primo sistema vbia seriale i dati/comandi che arrivano/vanno al web

questo sistema è ottimo perchè quando ci si interfaccia con l'esterno, internet in particolare, c'è sempre da tener conto del blocco del micro

grazie lesto....
pensavo fosse meglio con un solo micro.... ma se tu suggerisci così credo che ne utilizzerò due...

grazie ciao

mah.. sono un radioamatore ma non ho mica capito che cosa intendi fare di preciso
e sopratutto manca la parte fisica circuito stampato e almeno una simulazione su breadbord

poi un ponte ripetitore minimo deve avere almeno i sub tono audio standard per essere attivato
se no ad ogni tuono/lampo, o se si alza il QRM (QRM=rumore di fondo) si attiva senza motivo

non bastano un paio di ricetrasmettitori e una schedina per fare un ponte
la parte "esterma" e la piu importante dove viene piazzato la disposizione delle antenne, sopratutto i "filtri in cavità" altrimenti la trasmissione stessa del ponte azzera la ricezione del ricevitore (per troppa vicinanza)

@ratto93: ti danno la patente anche solo con perito informatico?hai un link da darmi?