Se sei già registrato           oppure    

Orario: 26/04/2024 17:59:17  

 

Energia Alternativa ed Energia Fai Da Te > Applicazioni E Realizzazioni Pratiche

VISUALIZZA L'ALBUM

Pagine: (167)  < ...  81   82   83   84   85   86   87   88   89   90   [91]   92   93   94   95   96   97   98   99   100   101  ...>    (Ultimo Msg)


Homemade Inverter "modulo DC/AC"
FinePagina

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 23/03/2015 10:08:14

CITAZIONE (ElettroshockNow, 20/03/2015 17:34:04 ) Discussione.php?55031252&88#MSG1352

CITAZIONE (inverter90, 15/03/2015 08:58:14 ) Discussione.php?55031252&88#MSG1351
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

http://www.energialternativa.info/public/newforum/ForumEA/D/Pinout.jpg



Elettro gentilmente sai dirmi dove posso trovare uno schema simile ma per l'ATMEGA16? E da ieri che cerco su internet,ma non ho trovato niente



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 23/03/2015 10:38:22

Ho riletto tutto il corso dalla prima pagina fino alla parte dei display. E devo dire che rileggendolo molti punti ora mi sono piu chiari, tuttavia mi rimane un punto che proprio non sto riuscendo a capire e avrei bisogno di aiuto.

Sarebbero queste due righe qua
DDRC = 0b10111100; /* PC0, PC1 e PC6 sono ingressi */
DDRD = 0b11110011; /* PD2 e PD3 sono ingressi */

Vedendo nel datasheet
PC0 SCL (Two-wire Serial Bus Clock Line)
PC1 SDA (Two-wire Serial Bus Data Input/Output Line)
PC7 TOSC2 (Timer Oscillator Pin 2)

PD2 INT0 (External Interrupt 0 Input)
PD3 INT1 (External Interrupt 1 Input)

quello che mi è oscuro perche questi pin bisogna dichiararli come ingressi?

Help me please



---------------
Il niente è impossibile finchè non ci provi!!!

 

farstar1965

Avatar
KiloWatt


Gruppo:Utente
Messaggi:293

Stato:



Inviato il: 23/03/2015 13:26:40

CITAZIONE (inverter90, 23/03/2015 10:38:22 ) Discussione.php?55031252&91#MSG1383

CITAZIONE (ElettroshockNow, 20/03/2015 17:34:04 ) Discussione.php?55031252&88#MSG1352
CITAZIONE (inverter90, 15/03/2015 08:58:14 ) Discussione.php?55031252&88#MSG1351
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

http://www.energialternativa.info/public/newforum/ForumEA/D/Pinout.jpg



Elettro gentilmente sai dirmi dove posso trovare uno schema simile ma per l'ATMEGA16? E da ieri che cerco su internet,ma non ho trovato niente


Prova ad andare su " pighixxx.com " se non lo trovi li vuol dire che non esiste



---------------
Più impari più ti rendi conto di quanto sei ignorante.

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 23/03/2015 14:49:17

CITAZIONE (farstar1965, 23/03/2015 13:26:40 ) Discussione.php?55031252&91#MSG1385



Prova ad andare su " pighixxx.com " se non lo trovi li vuol dire che non esi
ste


Come miseria fate a trovare tutti sti siti interessanti? Pultroppo non c'e comunque grazie farstar..



---------------
Il niente è impossibile finchè non ci provi!!!

 

farstar1965

Avatar
KiloWatt


Gruppo:Utente
Messaggi:293

Stato:



Inviato il: 23/03/2015 15:20:34

Non sono cosi esperto finora ho usato solo il 328 e il 1024 ma se cerchi con google "pinout atmega16 stickers" nelle immagini mi pare di aver visto quello che ti serve. Non proprio uguale ai fantastici disegni di pighixxx (cosi in stile vintage nuova elettronica quando ci facevamo i primi circuiti di luci psichedeliche) ma comunque simile



---------------
Più impari più ti rendi conto di quanto sei ignorante.

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 23/03/2015 15:44:31

Si si quelle immagini le avevo gia viste mi sarebbe piaciuto trovare proprio tutte le diramazioni dei pin, ma comunque quello che cercavo era nel datasheet completo dell' atmega.. Mi rimane solo da capire perche bisogna impostare quei pin come ingressi e qualè la loro funzione...



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 24/03/2015 01:01:01

Ciao inverter 90, è da un po' che non scrivo ma solo perché in questa fase di studio non sarei di grande aiuto.
In ogni caso controllo questo topic più volte al giorno, tutti i giorni !

Sto continuando con la guida, sono a pag 64 e, finalmente, alcune "strane" istruzioni iniziano ad essere più comprensibili, per esempio: TCCR1B = (1 << CS12) | (1 << CS10) | (1 << WGM12);.

Il problema ora sono i registri: nomi strani, tanti, difficili da memorizzare e poco intuitivi.
Ogni volta che ne appare uno non ho idea di cosa si tratta senza prima guardare il datasheet e questo non è un bene... Speriamo che con il tempo le cose migliorino !!!

Altro problema è proprio il datasheet: se quello che ho aperto oggi sul sito dell'Atmel è quello giusto (atmega 328P) si tratta di un mattone di oltre 600 pagine !!!
Si, c'è il pulsante "trova", ma con un testo così lungo si perde tempo per cercare quello di cui si ha bisogno...

Ho letto le tue domande dei post precedenti a questo, ma per darti una risposta dovrei studiare, sperimentare, cercare: per ora voglio finire la guida e provare a buttar giù un codice che almeno generi un'onda, poi vedremo di dare una risposta anche alle domande...

x Farstar1965: davvero bello il sito linkato !!!

A presto, Eligio.



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 24/03/2015 07:56:29

Ciao BellaEli si teoricamente per i timer non ci dovrebbero essere problemi io gli ho impostati cosi e sembra funzionare, anzi se ai la posibilità di provare questo codice mi confermeresti..


#include
#include
#include


void setup() {


}


pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
//TIMER1 GENERAZIONE PWM
TCCR1A = (1 << WGM11)| (1 << COM1A1)|(1<TCCR1B=(1 << CS10);
//WGM11 IMPOSTA PWM,PHASE CORRECTED 9BIT
//COM1A1 IMPOSTA USCITA A NON-INVERTENTE
//COM1B1,COM1B0 IMPOSTA USCITA B INVERTENTE
//CS10 IMPOSTA PRESCALER 1


//TIMER2 IMPOSTATO PER INTERRUPT
TCCR2A = 0;
TCCR2B = (1 << CS21) | (1 << WGM22);
OCR2A = 64; // con 64 il timer scatta ogni 32 mICROs circa */
TIMSK2 = (1 << OCIE2A);
sei();
//TCCR2A A 0 IN MODALITà NORMALE
//CS21 IMPOSTA PRESCALER 8, 16000000/8=2000000; 1/2000000=0,5uS
//WGM22 IMPOSTA MODALITà CTC PER IL CONTEGGIO
//OCR2A = 64;
//10/312 CAMPIONAMENTI=32uS , QUINDI 32uS/0,5uS=64
}

void loop() {


}



ISR (TIMER2_COMPA_vect){


OCR1A = 255;// CON 511 DUTY CICLY AL 100%, CON 0 DUTY CICLY AL 0%;

OCR1B = 255;//USCITA INVERTITA CON 511 DUTY CICLY AL 0%; CON 0 DUTY CICLY AL 100%;


}

Il problema per questo codice e che da una settimana sto smanettando con la funzione progmen, nel senso che non so come fargli leggere gli array agl'ocr1a e ocr1b. E il secondo problema è che non ho dimistichezza con office per fare un campionamento come si deve,ma questo per te non dovrebbe essere un problema..

Poi mi sorge un'altro dubbio, abbiamo detto che con valore 511 OCR1A il duty cicly è al 100%, mentre OCR1B con valore 511 sarà al 0%.Ma se noi dobbiamo introdurre il feedback non possiamo arrivare a 511 perche se il feedback dovrà incrementare il valore l'onda si distorcerebbe, quindi il valore massimo metterei 450.
Mentre per OCR1B la cosa è contraria quando siamo a 0 il duty sarà al 100% quindi se il feedback avrà variazioni non potrà scendere sotto lo zero per incrementare il duty, quindi dovremo partire da 50 anziche 0.Questo mi fa pensare che dovremmo creare 2 array diversi uno per OCR1A e l'altro per OCR1B..

Ora non so se tutte queste ipotesi sono giuste, ma da teoria il discorso dovrebbe filare..

Io farei un array da 250 punti cosi abbiamo un numero intero 10/250=0,04uS. 250 punti con valori da 0 a 450 per OCR1A e 250 punti con valori da 50 a 511 per OCR1B..

Sperando che qualcosa di quello che ho scritto sia giusta



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 24/03/2015 14:06:33

Inverter90 ci sono 2 regole fondamentali da rispettare in una ISR:

1) Non puoi chiamare un'altra funzione, tutto i codice deve essere contenuto all'interno della ISR (anche la funzione Delay() non è utilizzabile);

2) Il codice all'interno della ISR deve essere eseguibile in tempi brevi, devi fare i conti per evitare che mentre la ISR sta in esecuzione ne venga richiamata un'altra !


CITAZIONE

...non ho dimistichezza con office per fare un campionamento come si deve,ma questo per te non dovrebbe essere un problema...

Esatto, non è un problema, dimmi cosa ti serve e te lo preparo.

A presto



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 24/03/2015 15:27:38

ok BellaEli io farei un array da 250 campioni con valori duty da 0 a 500 cosi abbiamo la possibilità di implementare il feedback, ma confermami anche tu se secondo te può andar bene, perche non sono sicuro di ciò che sto dicendo.

0 inizia la semionda positiva(valore duty 0)
250 picco della semionda positiva(valore duty 500)
0 tutto spento(valore duty 0)

e poi si deve ripetere per la semionda negativa, ma qua ho l'ennesimo dubbio,? OCR1B è contrario quindi è cosi?

0 inizia la semionda negativa(valore duty 511)
250 picco della semionda negativa(valore duty 11)(11 perche se il feedback deve incrementare il valore può arrivare a 0)
0 tutto spento(valore duty 511);

quindi tu che dici dobbiamo creare due tabelle diverse una per la positiva e una per la negativa?



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 24/03/2015 16:05:25

Un'altra cosa BellaEli supponiamo che tu scriva il codice con l'array,ad esempio:

PROGMEM prog_uchar sine256[] =
{0,40,500,40,0}

void setup(){
supponiamo che timer2 richiami un interrupt ogni tot tempo.
}
void loop(){
.........
}

ISR (TIMER2_COMPA_vect){

OCR1A =come fai a fargli eseguire i valori della tabella partendo da 0 fino a 500 e poi di nuovo fino a 0?;

OCR1B =;

il deadTime con quale istruzione gli lo fai eseguire?
}



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 24/03/2015 23:36:22


CITAZIONE

ok BellaEli io farei un array da 250 campioni con valori duty da 0 a 500 cosi abbiamo la possibilità di implementare il feedback, ma confermami anche tu se secondo te può andar bene, perche non sono sicuro di ciò che sto dicendo


Se per il PWM a 8 bit (0...255) parlavamo di un valore di picco di 200, con PWM a 9 bit (0...512) devi pensare a un picco di 400 per avere il giusto margine.

Stasera, in ufficio, ho preparato un foglio Excel dove è possibile settare il numero di campioni e l'escursione desiderata e lui ti tira fuori tutti i valori da inserire nell'Array, naturalmente accompagnato dal relativo grafico, dovevo sistemare le etichette, domani vedo di pubblicarlo così sarai autonomo.

Per quanto riguarda l'Array, in teoria ti basterebbe anche solo 1/4 di onda, poi i valori si ripetono.
Se per esempio l'Array fosse formato da 20 elementi, con incrementi di 1 unità, avremo:
0 -> 0
1 -> 1
...
5 -> 5
...
10 -> 10
11 -> 9
...
15 -> 5
...
20 -> 0

per la semionda positiva, e identici valori per quella negativa.
In realtà, avendo i primi 10 valori potresti costruire l'onda intera scorrendo il vettore una volta verso il basso e la successiva verso l'alto.

Tuttavia tale decisione è da valutare all'atto della stesura del codice, mettendo sul piatto della bilancia la velocità di esecuzione, la complessità di implementazione, il risparmio di memoria, etc.

In ogni caso, fare due vettori mi sembra superfluo, se hai bisogno di valori che partono da 511 quando il vettore sta a 0, basta una semplice sottrazione:
PWM negato = 511 - ValoreArray
e i valori andranno da 511 a 11, proprio come serve a te.

Infine c'è un aspetto che devi tener presente se vuoi far funzionare il tuo codice: svilupparlo per gradi !

Voglio dire che al momento non puoi già pensare al feedback, al dead time, al display, alle protezioni, alla messa in fase con l'Enel, al datalogger, al WebServer, al....
Iniziamo a scrivere un codice che genera una sinusoide e poi proviamo ad implementare le migliorie... Ok ???

Ora vado, a presto !!!



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 06:27:46

CITAZIONE (BellaEli, 24/03/2015 23:36:22 ) Discussione.php?55031252&91#MSG1394



Voglio dire che al momento non puoi già pensare al feedback, al dead time, al display, alle protezioni, alla messa in fase con l'Enel, al datalogger, al
WebServer, al....
Iniziamo a scrivere un codice che genera una sinusoide e poi proviamo ad implementare le migliorie... Ok ???

Ora vado, a presto !!!


Ok BellaEli hai pienamente ragione andiamo per gradi! E che ogni tanto mi piace guardare oltre
A presto



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 11:58:40

Buongiorno a tutti,

come promesso ho completato il foglio Excel per il calcolo dei valori da inserire nell'Array.

L'idea iniziale era molto più semplice, strada facendo ne è uscito qualcosa di davvero simpatico.

Lo allego di seguito... ciao !

Scarica allegato

Sinusoide.Xlsx ( Numero download: 174 )



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 12:33:44

Ciao BellaEli, ottimpo sei di parola
Qusta però sarà da modificare no? Arrivo a 250 campioni con valore massimo 400..Ok io però piu andiamo avanti e piu mi rendo conto che ne sò davvero poco! Quindi ennesima domanda.. ora io riporto quei valori nell 'array
prog_char onda[250] PROGMEM =
{0,200,0
}
per la semionda positiva, ma per la negativa dobbiamo mettere sempre nella stessa tabella -13,-200,-13?o come?
poi vorrei chiarire un'altro punto la semionda positiva sarà sul pin9 gestita dal duty impostato su OCR1A?Giusto?
e la semionda negativa dal pin 10 gestita dal duty impostato da OCR1B?



---------------
Il niente è impossibile finchè non ci provi!!!

 
 InizioPagina
 

Pagine: (167)  < ...  81   82   83   84   85   86   87   88   89   90   [91]   92   93   94   95   96   97   98   99   100   101  ...>    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum