Go Down

Topic: [OT] richiesta di aiuto per programmino x Accordatore (Read 79594 times) previous topic - next topic

leo72


Leo, oggi sei pignolo  :D dai che si legge anche in nero e rosso :smiley-sweat:,

E' una questione di usare il forum in modo corretto e tale da renderlo fruibile a tutti.  ;)

Quote

per farti perdonare appena possibile io ti scrivo lo schema logico e tu lo traduci in un bel codice semplice semplice per campa, ok?

No problem.

menniti

Ottimo Leo, grazie, allora Campa può Campare tranquillo :smiley-mr-green:
Appena possibile (la mia giornata sul Forum finisce in questo momento....) preparo lo schema pratico e quello logico (passo-passo), così tu lo traduci in firmware ed il nostro amico lo testa.
Buona giornata a tutti.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Campa1957

#47
Jun 04, 2013, 06:35 pm Last Edit: Jun 05, 2013, 05:14 pm by Campa1957 Reason: 1
Grazie ragazzi!!!   :)  :)  :)

resto in trepidante attesa!!!

intanto allego foto del primo pezzo dell'HD, l'LCD visualizza il ROS calcolato come da formuletta di qualche post fa' più atri paramentri indicativi.

Andrea

menniti

Sto preparando lo schema pratico, appena finisco passo a quello logico, vediamo se in serata riusciamo a fare una prova :smiley-sweat:
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

menniti

#49
Jun 07, 2013, 07:35 pm Last Edit: Jun 08, 2013, 10:19 pm by Michele Menniti Reason: 1
In allegato la descrizione base del Progetto e lo schema descrittivo dei collegamenti. Ho raggruppato i controlli dei relé delle induttanze e dei condensatori per PORT in modo da favorire la programmazione; il relé che commuta i condensatori su TX o ANTENNA è collegato allo stesso PORT (D) dei relé dei condensatori, nel caso venisse comodo raggrupparli.
Intanto che provo a stilare lo schema logico consideratevi tutti arruolati :D Coloro che hanno seguito la discussione o che volessero iniziare ora sappiano che tutte le info necessarie, grazie all'interrogatorio estenuante a cui è stato sottoposto Campa1957, sono nei vari post del Topic, basta rileggere.....
Sono a disposizione per qualsiasi chiarimento, se non ci saranno osservazioni su questa prima parte appena finisco pubblico la logica per gli esperti software; se non impiegassi una settimana di tempo (che non ho) lo scriverei io, gli esperti penso se la caveranno con un'oretta scarsa.
Ho l'impegno di Leo, ma se si fa avanti qualcun altro garantisco io che non si offenderà ;) e se invece non si fa avanti nessuno resterà l'impegno di Leo. :)
Grazie per i contributi che darete.

EDIT: ho integrato lo schema logico per la preparazione del firmware, è parziale e riferito alla sola sezione delle induttanze, se si procederà e dopo collaudo positivo, potremo implementare la gestione dei condensatori.

EDIT: elimino il Progetto con schema logico, che ora ho inserito nel mio ultimo post, in versione aggiornata.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Campa1957

Grande Michele!

questa sera sono stanchissimo........... :~  :~  :~

domani pomeriggio quando rientro studio con attenzione il tuo lavoro e vediamo se ci fosse qualche piccolo aggiustamento da fare, da una prima occhiata direi che non sarà il caso............

Andrea

menniti

ok, buon riposo allora :smiley-sleep:; naturalmente prima di procedre aspetto la tua valutazione, ho qualche dubbio su quanto ho "spiegato" riguardo la tecnica di test delle impedenze.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Campa1957

Grande Michele!!!

riporto di seguito con il copia e incolla, spero quotato al meglio, alcuni suggerimenti

Quote


INTRODUZIONE
Obiettivo:
realizzare un accordatore di antenna per le HF automatico.
Tecnica:
Lettura di due valori di tensione (Potenza diretta e Potenza riflessa) applicati a due ingressi analogici e
calcolo del ROS mediante la formula
ROS_reale = ((1 + (pot_rifl / pot_dir)) / (1 - pot_rifl / pot_dir)));
pot_rifl e pot_dir sono frutto della media di xx letture dei due valori analogici.
Confronto tra ROS_reale ed ROS_ideale (costante 1.5); se inferiore la procedura non è richiesta, se >=
invece parte la procedura correttiva.
Inserimento di un massimo di 6 induttanze in serie al centrale d'antenna, con altrettanti step, per ottenere
il miglior valore di Ros possibile. Si usando 6 relé pilotati da altrettanti pin di Arduino.
Inserimento di un massimo di 6 condensatori in parallelo al centrale d'antenna, con test automatico per
valutare se l'inserimento va fatto lato TX oppure lato Antenna. Si usando 6 relé pilotati da altrettanti pin di
Arduino più un settimo relé per la commutazione TX/ANT.
Si può prevedere un pin che accenda un LED verde quando la procedura è finita e solo se il ROS ha
raggiunto un livello corretto.
Connessioni ai pin del mega328 (pin fisici, v. schema pighixxx per connessioni Arduino):
PIN 14 - 15 - 16 - 17 - 18 - 19 (PB0 ÷ PB5) Controllo dei 6 relé delle induttanze
PIN 2 - 3 - 4 - 5 - 6 - 11 (PD0 ÷ PD5) Controllo dei 6 relé dei condensatori
PIN 12 (PD6) Controllo del relé di commutazione TX/ANT (stesso PORT dei relé dei condensatori)
PIN 13 Controllo del LED ROS_OK
PIN 23 (A0) Ingresso segnale Potenza riflessa
PIN 24 (A1) Ingresso segnale Potenza diretta
PIN 25 - 26 - 27 - 28 (A2 ÷ A5) Pin analogici liberi da DISABILITARE
Logica del firmware:
1. Imposto ROS_ideale <1.5
2. Leggo A0 x volte e faccio la media (= pot_rifl)
3. Leggo A1 x volte e faccio la media (= pot_dir)
4. Calcolo ROS_reale= ((1 + (pot_rifl / pot_dir)) / (1 - pot_rifl / pot_dir)));
5. Confronto ROS_reale e ROS_ideale
a. Se ROS_reale<ROS_ideale l'accoppiamento TX/ANTENNA è corretto e la procedura termina
b. Viceversa (ROS_reale>=ROS_ideale) inizio la procedura correttiva
Procedura correttiva
6. Attivo il relé PB0
7. Ripeto da 2 a 5b

7. Ripeto da 1 a 5b
Quote

8. Se è ancora vero il punto 5b attivo ANCHE il relé successivo (PB0+PB1)
9. Ripeto da 2 a 5b

9. Ripeto da 1 a 5b
Quote

10. Se è ancora vero il punto 5b confronto ROS_reale(PB0) con ROS_reale(PB0+PB1)
a. se ROS_reale(PB0)> ROS_reale(PB0+PB1) lascio entrambi accesi
b. INVECE Se ROS_reale(PB0)< ROS_reale(PB0+PB1) significa che la coppia PB0-PB1 è eccessiva
c. Spengo il relé PB0 (resta acceso solo PB1)
d. Ripeto da 2 a 5b

d. Ripeto da 1 a 5b
Quote

11. Attivo il relé successivo (PB2)
12. Ripeto da 7 a 10d confrontando PB0+PB1 con PB0+PB1+PB2
13. Se necessario dopo 10d ripeto la procedura spegnendo anche PB1 (resta acceso solo PB2)
Forse a questo punto è meglio spiegare come avviene la procedura, fornendo ulteriori info, per ora restiamo solo sulle impedenze. Le 6 impedenze sono tra loro in rapporto "binario"; es. supponendo che la prima sia 1?H, le successive sono 2-4-8-16-32?H. La procedura inizia (p.es. ROS=3.5) inserendo in serie al centrale d'antenna 1?H, si ripete la misura, se necessario (p.es. ROS=3) si inserisce anche la 2?H che in serie alla precedente fa 3?H; se il risultato è migliore del precedente (p.es. ROS=2) si procede inserendo anche la 4?H (totale 7?H); se invece il risultato con 3?H fosse peggiore (p.es. ROS=3.2) allora si elimina la 1?H per testare la sola 2?H. Tutto questo metodo si ripete fino ad ottenere il valore di ROS più vicino possibile a 1.5, a quel punto si passa all'equivalente procedura coi condensatori.
Andando avanti mettiamo di essere arrivati al 5° passaggio (31?H) in una progressiva diminuzione del ROS, ora aggiungiamo la 6° (63?H) e notiamo invece un aumento del ROS, dobbiamo trovare la miglior combinazione possibile eliminando una per volta le impedenze da 1?H a 16?H, partendo dalla più piccola e via via eliminando ANCHE la successiva cioè si testa: 63-1, 63-3, 63-7, ecc, saltando i passaggi intermedi (almeno per il momento procediamo così, altrimenti un ciclo negativo diventa lunghissimo…).
Quindi io direi di preparare il firmware considerando le sole impedenze, vediamo i risultati che ottiene Campa1957 col suo circuito e poi procediamo nei giorni a venire.

Propongo di ripartire dal punto 1 anziche dal punto 2 inquanto il valore di ROS potrebbe scendere sotto il valore 'ottimale' dopo l'inserimento di qualunque scalino e a quel punto tanto vale bloccare il processo.
Per poter fare meglio la verifica di funzionamento potrebbe essere utile inserie un piccolo ritardo, da ridurre poi a pochi millisecondi, dopo l'inserimento di ogni scalino, durante il mio tentativo di cui ho allegato il listato mi permetteva di variare il valore di comparzione.

Per il resto, quanto hai scritto, è la perfetta trascrizzione del mio progetto.

Grazie

Andrea


Maurotec

#53
Jun 08, 2013, 08:21 pm Last Edit: Jun 08, 2013, 10:40 pm by MauroTec Reason: 1
Quote
Forse a questo punto è meglio spiegare come avviene la procedura, fornendo ulteriori info, per ora restiamo solo sulle impedenze. Le 6 impedenze sono tra loro in rapporto "binario"; es. supponendo che la prima sia 1?H, le successive sono 2-4-8-16-32?H. La procedura inizia (p.es. ROS=3.5) inserendo in serie al centrale d'antenna 1?H, si ripete la misura, se necessario (p.es. ROS=3) si inserisce anche la 2?H che in serie alla precedente fa 3?H; se il risultato è migliore del precedente (p.es. ROS=2) si procede inserendo anche la 4?H (totale 7?H); se invece il risultato con 3?H fosse peggiore (p.es. ROS=3.2) allora si elimina la 1?H per testare la sola 2?H. Tutto questo metodo si ripete fino ad ottenere il valore di ROS più vicino possibile a 1.5, a quel punto si passa all'equivalente procedura coi condensatori

No, non ha senso dopo aver inserito la 1uH inserire anche la 2 uH, semmai ha senso disinserire la 1uH è inserire la 2uH,
il prossimo inseriemento segue il conteggio binario
decimale    binario    valore in uH
1                000001   1uH
2                000010   2uH
3                000011   1uH + 2uH = 3uH
4                000100   4uH
5                000101   4uH + 1uH = 5uH
continua fino a
63              111111   1uH + 2uH + 4uH + 8uH + 16uH + 32uH = 63uH

bestROS = 1.5
Lstep = 0;
oldROS = calcROS(); // oldROS = 3
ciclo:
{  // Lstep = 0
   if (bestROS{1.5} < oldROS{3}) {
       if (Lstep > 0)
          oldROS = bestROS;

       Lstep++{1}
       bestROS{2.8} = calcROS(); // oldROS = 2.8
   } else {
       
   }
}

ciclo:
{  Lstep = 1
   if (bestROS{2.8} < oldROS{3}) {
       if (Lstep > 0)
          oldROS{2.8} = bestROS{2.8};

       Lstep++{2}
       bestROS{2.0} = calcROS(); // oldROS = 2.1
   }
}

ciclo:
{  Lstep = 2
   if (bestROS{2.0} < oldROS{2.8}) {
       if (Lstep > 0)
          oldROS{2.0} = bestROS{2.0};

       Lstep++{3}
       bestROS{2.1} = calcROS(); // oldROS = 2.1
   }
}

ciclo:
{  Lstep = 3
   if (bestROS{2.1} < oldROS{2.0}) {
       if (Lstep > 0)
          oldROS = bestROS;

       Lstep++{4}
       bestROS{2.0} = calcROS(); // oldROS = 2.8
   } else {
       Lstep{3} è la migliore configurazione
   }

}

Ciao.


menniti

#54
Jun 08, 2013, 10:01 pm Last Edit: Jun 08, 2013, 10:22 pm by Michele Menniti Reason: 1
Andrea, il punto 1 serve solo per fissare inizialmente il valore minimo di ROS da correggere, la verifica viene effettuata ogni volta al punto 5a, infatti c'è scritto che se siamo OJ la procedura termina  ;)

Mauro: hai perfettamente ragione, seguendo la logica binaria provo tutti i valori e quando arrivo ad un ROS superiore al precedente mi basta tornare indietro di un passo, la cosa apparentemente allunga ma di fatto si semplifica notevolmente. Allora interrompo il mio articolo e rimetto mano al "Progetto" e riscrivo la logica. Come ho detto però io mi fermo qui perché non sono in condizioni di scrivere in tempo decente il codice da far testare a Campa1957, quindi spero che tu abbia voglia e tempo di arrivare fino in fondo, altrimenti mi tocca bussare da Leo che intanto latita..... :smiley-sweat:

EDIT: allego il Progetto modificato sulla base del prezioso suggerimento di Mauro; resta sempre l'invito ai softwaristi bravi di voler tradurre questa logica in uno sketch da far testare a Campa1957, non mi deludete!! XD
Mi era sfuggito un particolare: dopo l'attivazione di una nuova combinazione di relé conviene inserire un ritardo fisico per dare il tempo alle impedenze di svolgere il loro lavoro, quindi si può passare ad una nuova lettura, è sufficiente un delay(2000), a ridurlo ci siamo sempre.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Maurotec

Quote
Mauro: hai perfettamente ragione, seguendo la logica binaria provo tutti i valori e quando arrivo ad un ROS superiore al precedente mi basta tornare indietro di un passo, la cosa apparentemente allunga ma di fatto si semplifica notevolmente.


Si, dipende, cioè se la configurazione migliore è la 63° li devo scorrere tutte da 0 a 62 per scoprire la 63° è meglio della 62°, per questo nei post precedenti ho ipotizzato l'idea di partire dal centro, cioè da 64 / 2 (perchè da 0 a 63 ci sono 64 configurazioni diverse), quindi si parte da 32.

Questa volta l'algoritmo prima deve sceglire il senso, cioè se incrementando ROS peggiora, non resta che fare la cosa opposta cioè decrementare.

Però se per caso estremo il ROS migliore si trova nella configurazione 2, per poi dopo 2 ore trovarsi nella configurazione 63, devo per forza  testare tutte le configurazioni intermedie. Un decisioni in merito alla logica va presa appunto a ragion veduta e al momento non sappiamo cosa è più saggio.

Estrema:
Sicuramente è possibile stabilire qualè la differenza di ROS tra una configurazione e l'atra successiva, es Conf[23] e Conf[24], che per lavorare con i numeri la ipotizzo io a caso attribuendogli un valore di 0.1 ROS, quindi es Conf[23]-ROS1.8 e Conf[24]-ROS1.8 - 0.1.
Sicuramente è possibile creare una tabella, in base al ROS come valore assoluto con riferimento ad una configurazione di default, che potrebbe essere 64/2, quindi se con ROS= 2 la differenza tra configurazioni adiacenti vale 0.1, con  ROS = 3 la differenza tra configurazioni adiacenti è 0.2, ecc. Questa tabella potrebbe essere il software stesso a compilarla, anzi spedisce i dati al computer dove c'è un programma che li archivia di modo che si possano studiare al fine di determinare un algoritmo che possa ad esempio decidere di saltare 5 configurazioni di colpo perchè la tabella dice che almeno 5 configurazioni più in la si dovrebbe trovare il migliore dei ROS, magari non è così, ma bastano alcune iterazioni per vedere se la migliore è la precedento o la successiva, comunque un bel salto di 5 velocizza di molto l'algoritmo.

Il tempo che l'algoritmo impiega per trovare il miglior ROS è fondamentale, perchè più allunghiamo il tempo più il ROS cambia per cause ambientali e ad esempio la configurazione scartata ora potrebbe essere quella migliore.

Io non posso codificare lato arduino, perchè uso il C nudo è crudo è sono una schiappa con Arduino core, ci ho perso la mano, quindi non scrivo codice intero, se possibile scrivero spezzoni di codice C generico, ma l'impegno non posso neanche prendermelo perchè sto scrivendo un protocollo PC to arduino e di tanto in tanto divago quando mancano le ide e vengo qui sul forum. Però non vorrei affatto si sottovalutasse il contributo che sto dando in merito alla analisi del problema e alla logica del programma. In definitiva Michele come hai detto tu l'obbiettivo è realizzare il pezzo di programma che gestisce solo L, si lavora su questo e quando lo si ritiene opportuno si passa ad altro, no perchè il codice che funziona mostra lati del problema che prima non apparivano lampanti.

Ciao.

menniti

Qui non si sottovaluta niente e nessuno, ci mancherebbe! Ognuno apporta il proprio contributo e tutto è importante ai fini della risoluzione del problema, resta il fatto che il codice va scritto pr Arduino, quindi certamente i tuoi suggerimenti sono più che validi ai fini della realizzazione dello sketch, chi sa programmare è perfettamente in grado di convertire il tuo C in linguaggio "arduinico"; io potrei riuscire a scriverlo ma mi occorre molto tempo, perché ogni volta che scrivo uno sketch sto sempre lì con manuale alla mano, riga per riga, una faticaccia, ma nemmeno io ho tutto questo tempo, specialmente ora che ho iniziato a scrivere l'articolo sul Frequenzimetro e sono ancora alle prese con l'ottimizzazione del mio sketch.
MI piace anche la logica dell'inizio con la lettura dei due valori centrali della scala, per scegliere la "direzione" di inserimento, ma a questo punto bisogna necessariamente "arruolare" un'anima pia che se voglia tradurre in codice quanto abbiamo stabilito; a me non sembra, almeno sulla carta, una cosa molto impegnativa, ho visto alcuni qui sul Forum scrivere decine e decine di righe di codice in qualche minuto, però ora non mi sento nemmeno più di sollecitare Leo, se vuole si fa avanti lui, altrimenti è giusto rispettare la libertà di tutti, ognuno ha i suoi propri impegni.

Andrea, ho visto che sei combinato pure tu malaccio quindi non ci provo proprio a dirti di iniziare a scriverlo, però se non troviamo nessuno forse la strada più semplice è quella di iniziare a cimentarti, su un pezzo di sketch già scritto è più semplice dare una mano. Personalmente ho mantenuto l'impegno preso e continuo a farlo, potrò anche mettermi a scrivere lo sketch, ma questo non potrà essere prima di fine mese, ho davvero troppi casini, ma almeno così una scadenza l'abbiamo. Se non troviamo nessuno tu inizia a scrivere e pian piano arriviamo a qualcosa di decente. ok? Però se decidi di partire fallo da 0, cancella tutta quella roba, ed inizia passo-passo.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72

Scusate mi ero dimenticato di questa discussione..... allora lo schema logico "giusto" è quello dell'ultimo post di Mike?

menniti


Scusate mi ero dimenticato di questa discussione..... allora lo schema logico "giusto" è quello dell'ultimo post di Mike?

Figurati Leo, ma chiarisco che quella dell'altra sera era solo una battuta, non sei impegnato a far nulla, ma se vuoi è graditissimo :)
Ciò che ti serve eventualmente è il mio allegato ed una lettura dei 4 post precedenti al tuo, ci sono info importanti su quanto ha detto e consigliato Mauto e su quanto ho pensato di recepire io....
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

paulus1969



Mi era sfuggito un particolare: dopo l'attivazione di una nuova combinazione di relé conviene inserire un ritardo fisico per dare il tempo alle impedenze di svolgere il loro lavoro, quindi si può passare ad una nuova lettura, è sufficiente un delay(2000), a ridurlo ci siamo sempre.


Secondo me è troppo.

Un altro dettaglio mi sfugge.
Il trasmettitore rimane in trasmissione tutto il tempo?
Non sarebbe meglio mettere un altro PIN che manda in trasmissione il trasmettitore solo per il tempo strettamente necessario alla misura del ROS?

Code: [Select]

SCHEMA LOGICO:
1 TX ON
2 MISURA ROS
3 TX OFF
4 IF ROS <= 1.5 THEN GOTO 7
5 COMMUTAZIONI VARIE L - C
6 GOTO 1
7 END


(Perdonatemi il simil-basic)

Go Up