| ElettroshockNow
| Inviato il: 13/03/2015 14:00:23
|
CITAZIONE (inverter90, 13/03/2015 10:08:01 )
.... Ora che arriva il bello ?
Le linee guida sono quelle che ho malamente spiegato , bisognerà sicuramente rivedere il metodo di pilotaggio e una spiegazione più dettagliata. | | | | giordanto1971
milliWatt Utente Msg:4
Stato:
| Inviato il: 13/03/2015 15:17:33
|
http://www.feec.ece.vt.edu/NewProjects/FuelCellConverter.php
http://www.feec.ece.vt.edu/NewProjects/FuelCellConverter/NewV6.jpg | | | | inverter90
| Inviato il: 13/03/2015 15:45:13
|
CITAZIONE (ElettroshockNow, 13/03/2015 15:17:33 )
CITAZIONE (inverter90, 13/03/2015 10:08:01 )
.... Ora che arriva il bello ?
Le linee guida sono quelle che ho malamente spiegato , bisognerà sicuramente rivedere il metodo di pilotaggio e una spiegazione più dettagliata.
Si Elettro sarà stata la stanchezza di fine turno ora a mente lucida vediamo di ripartire.Comunque in ogni caso quando avrete tempo una spiegazione piu dettagliata per i non adddetti mi sarabbe molto utile prima di proseguire...
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | scinty
| Inviato il: 13/03/2015 21:42:15
|
CITAZIONE (giordanto1971, 13/03/2015 15:45:13 )
http://www.feec.ece.vt.edu/NewProjects/FuelCellConverter.php
http://www.feec.ece.vt.edu/NewProjects/FuelCellConverter/NewV6.jpg
bravo giordanato vedo che con google te la cavi a fare copia e incolla però non sai che quello non funziona (se leggi bene c'è pure scritto che è un progetto in corso) e a me non va di fare la foto a quello funzionante perchè vale un perù
--------------- 14 pannelli mono da 250Wp 24 pannelli amorfi Sharp da 130Wp banco batterie 48V 225Ah survoltore 5000...
| | | | BellaEli
| Inviato il: 13/03/2015 23:26:05
|
CITAZIONE
...perchè vale un perù
Che volevi scrivere ? O, se è un'espressione, che vuol dire ?
CITAZIONE
...però non sai che quello non funziona (se leggi bene c'è pure scritto che è un progetto in corso) e a me non va di fare la foto a quello funzionante...
Onestamente non mi ha fatto piacere vedere quel progetto, non perché penso che non sei all'altezza ma perché sei stato scorretto a non dire che non era il tuo DC-DC...
Mi hai persino rimproverato perché non sembrava un prodotto Homemade...
Cos'è una tecnica di difesa ? Mi hai aggredito per non farti scoprire ?
Più che rimproverare giordano dovresti chiedere scusa a quelli come me che hanno creduto che fosse il tuo progetto e non quello di altri, a prescindere da ogni cosa.
Non importa se tu sei più bravo, se il tuo progetto è migliore, più bello, più efficiente, o più tutto, quello che conta è che senza alcun motivo sensato hai nascosto ai tuoi "amici" del forum che si trattava di una foto presa da internet.
Ora spero solo che prima di rispondere a questo mio post conterai fino a 100 e risponderai con la testa anziché con l'istinto (visto che non ti manca né l'uno né l'altro...)
Con disinteressata amicizia, Eligio.
--------------- C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!
| | | | BellaEli
| Inviato il: 14/03/2015 00:05:09
|
CITAZIONE
Comunque in ogni caso quando avrete tempo una spiegazione piu dettagliata per i non adddetti mi sarabbe molto utile prima di proseguire
Probabilmente i tuoi dubbi sono legati alla non conoscenza degli interrupt.
A tal proposito ti consiglio di leggere la breve guida in italiano di Mauro Alfieri, riportata a questo link:
http://www.mauroalfieri.it/elettronica/tutorial-arduino-interrupt.html
Se hai letto la guida dovresti incominciare a capire la direzione che dobbiamo prendere, ma proviamo a spiegare (elettro correggimi se sbaglio, anche per me sono argomenti inesplorati !).
Sappiamo che all'interno dell'atmega ci sono 3 timer, ovvero 3 circuiti indipendenti dal codice che contano da 0 a xxx per poi ripartire, con una frequenza di 16 MHz.
Dovremmo anche essere in grado di resettare tali timer, ovvero farli ripartire da zero a nostro piacimento.
Sappiamo anche che per rallentare il conteggio possiamo utilizzare i prescaler, ovvero una calcolatrice che in tempo reale divide il valore del timer per 2 o un suo multiplo.
A questo punto, dopo aver fatto i dovuti conteggi e impostato i giusti parametri, possiamo impostare un interrupt per essere richiamato tutte le volte che il Timer x arriva al numero y
Ma che vuol dire tutto ciò ?
Che il timer inizia a contare (essendo un contatore hardware il cui clock è determinato da un quarzo è molto preciso) e ipotizziamo che quando arriva a 500 siano passati esattamente 100 microsecondi.
A questo punto agganciamo una funzione interrupt al valore 500 del timer.
Mentre il codice contenuto nella funzione loop viene eseguito, il contatore del timer, indipendentemente è contemporaneamente al codice, conta e appena arriva al valore 500 interrompe il codice della funzione loop e lancia la funzione dell'interrupt.
Nel nostro caso, in tale funzione, ci saranno inserite le istruzioni per leggere il nuovo valore del vettore ed impostarlo sul pin PWM.
Finita la funzione dell'interrupt il codice riprende da dove era stato interrotto e il timer continua il suo conteggio (conviene resettarlo dentro la funzione dell'interrupt ?)
Allora come possiamo fare per variare la frequenza di qualche decimo di Hz ?
Semplice, modifichiamo il valore 500 con 499, 498 o 501, 502 etc.
Tutto chiaro ?
Elettro tutto giusto ?
--------------- C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!
| | | | inverter90
| Inviato il: 14/03/2015 07:46:57
|
Si l'interrupt non lo mai usati..
ok potrebbe essere qualcosa del genere?Supponiamo sempre che i nostri 100microsecondi equivalgono a 500.
Nel nostro esempio il conteggio arriva a 500 dovrà disattivare timer1? Oppure dovrà disattivare prima l'uscita OCR1A e poi altro conteggio fino a 500 e disattivare uscita OCR1B? Se si come si fa?( con l'istruzione OCR1A= LOW; non funziona.
Il conteggio è meglio farla fare nella funzione loop? o nella funzione ISR(TIMER1_OVF_vect)?
Il pin 2 cioè lo (0 dichiarato su attachInterrupt )è il nostro interruttore meccanico che accenderà e spegnera l'inverter o lo dobbiamo sostituire con una variabile?
int interrConteggio=0;
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
void setup()
{
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
attachInterrupt(0, interruptPwm, RISING);
sbi (TCCR1A, COM1B0);
sbi (TCCR1A, COM1B1);
sbi (TCCR1A, COM1A1);
cbi (TCCR1A, COM1A0);
sbi (TCCR1A, WGM11);
cbi (TCCR1A, WGM10);
cbi (TCCR1A, WGM12);
cbi (TCCR1A, WGM13);
sbi (TCCR1B, CS10);
cbi (TCCR1B, CS11);
cbi (TCCR1B, CS12);
}
void loop() {
interrConteggio++;
if ( interrConteggio == 500 )
{
interrConteggio = 0;
cbi (TIMSK1,TOIE1);// disabilita timer1
}
}
void interruptPwm()
{
sbi (TIMSK1,TOIE1);// abilita timer1
}
ISR(TIMER1_OVF_vect) {
OCR1A=pgm_read_byte_near(sine256 );
delayMicroseconds(5);
OCR1B=pgm_read_byte_near(sine256 );
delayMicroseconds(5);
}
Thank you
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | | | | inverter90
| Inviato il: 14/03/2015 08:19:04
|
CITAZIONE (ElettroshockNow, 14/03/2015 07:58:27 )
Elettronica) gratuitamente concede il download dei propri corsi ....
CORSI GRATUITI E LETTRONICAIN
e questo potrebbe essere di aiuto (sopratutto la sezione interrupt )
LINK
Ciao e buona EA
Elettro
WOOAOO
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | ElettroshockNow
| Inviato il: 14/03/2015 09:02:01
|
Penso che ti toglierà ogni dubbio.
Ammetto di averne sempre una copia vicino insieme al datasheet e ai nomi degli ISR ... (ciò poca memoria )
Lo sai che stai abbandonando Arduino entrando nel cuore del micro ?
Questo è un bene .... | | | | inverter90
| Inviato il: 14/03/2015 09:14:53
|
Si si Elettro sei un grande è una rivista di tutto rispetto (spero solo di comprenderla ben). ora come ho qualche ora a disposizione inizio a studiarlo
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | inverter90
| Inviato il: 14/03/2015 18:05:06
|
Ma void main equivale a void loop?
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | ElettroshockNow
| Inviato il: 14/03/2015 21:18:03
|
Si il Main in C è il Loop in Wiring ....
Iniziano le differenze | | | | inverter90
| Inviato il: 15/03/2015 08:58:14
|
Ok Elettro
Ora però sto facendo un'altra confusione, mi potresti spiegare la differenza (o meglio dire il significato) tra OCR1A E OCR2? Cioè quello che pensavo di sapere è che OCR1A corrisponde a pin 9?, ma leggendo sulla rivista misa che pensavo male..
sul corso dichiara OCR1A= 100 // il timer scatta ogni 7ms
e
ISR (TIMER1_COMPA_vect)
OCR2=luce //l'istruzione da compiere ogni 7ms
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | ElettroshockNow
| Inviato il: 15/03/2015 09:33:24
|
CITAZIONE (inverter90, 15/03/2015 08:58:14 )
Ok Elettro
Ora però sto facendo un'altra confusione, mi potresti spiegare la differenza (o meglio dire il significato) tra OCR1A E OCR2? Cioè quello che pensavo di sapere è che OCR1A corrisponde a pin 9?, ma leggendo sulla rivista misa che pensavo male..
sul corso dichiara OCR1A= 100 // il timer scatta ogni 7ms
e
ISR (TIMER1_COMPA_vect)
OCR2=luce //l'istruzione da compiere ogni 7ms
*sostituire n con il timer che si vuole usare
OCRn (esempio OCR1,OCR1A,OCR1B,OCR2) sono dei valori che vengono comparati con il contatore TCNTn (esempio TCNT1 ,TCNT2,TCNT3)
OCn (esempio OC1A,OC1B,OC2A) sono le possibili uscite fisiche che possiamo collegare ai rispettivi timer
Le possiamo collegare internamente al micro grazie alla configurazione dei bit COMnx (esempio COM1A1 ,COM1A0 ,COM1B0) ...
Poi arduino le chiama sempre uscita 9 ,ma si chiama OC1A
Per gli Interrupt .....
ISR stà per Interrupt Service Routine e in pratica è una routine che viene richiamata ed eseguita ogni volta che succede un interrupt (interruzione del programma nel main o nel loop in Arduino)
Quindi dobbiamo scegliere chi fà interrompere il programma e lo facciamo scrivendo all'interno delle parentesi (esempio TIMER0_COMPA_vect,TIMER0_COMPB_vect,TIMER0_OVF_vect .. lista completa LINK)
Nel tuo esempio ISR (TIMER1_COMPA_vect) chiediamo al micro che ogni volta il valore TCNT1 (che è il conteggio degli impulsi proveniente dalla frequenza del cristallo diviso il prescaler1 ) è uguale al valore di OCR1A esegui la routine | |
| | |
|
Versione Completa!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|