joeled
| Inviato il: 08/04/2020 15:08:31
|
@emuland
Allora , leggo i dati i2c da altro arduino ,e li passo al dac sempre con i2c e tutto funziona...
Ma se anzichè ricevere da i2c ricevo da seriale addio a tutto, la seriale vuole troppo tempo e i 20 ms dell'onda generata vanno a farsi benedire...
void loop () {
Wire.requestFrom(9, 2);
a = Wire.read();
b = Wire.read();
val = a;
val = val << 8 | b;
val = (map(val,0,4500,0,1165));
while (digitalRead(8) == 1) {
genera(val);
}
}
void genera (int val) {
dac.print(2220 + val);// 2200 genera offset dc di 1.7 volt
delayMicroseconds(9900);//
dac.print(2220 - val);
delayMicroseconds(9900);//2200 genera offset dc di 1.7 volt
}
--------------- 595Wp 1 mono + 4 poli direzione 1 ovest - PCM 60 X MPPT - 2x SMA 12volt 105 Ah - inverter china 1000 Watt onda pura-Sistema 24 volt Sito realtime in versione beta...
| |
| | emuland
| Inviato il: 08/04/2020 15:52:51
|
CITAZIONE (joeled, 08/04/2020 15:08:31 ) 
@emuland
Allora , leggo i dati i2c da altro arduino ,e li passo al dac sempre con i2c e tutto funziona...
Ma se anzichè ricevere da i2c ricevo da seriale addio a tutto, la seriale vuole troppo tempo e i 20 ms dell'onda generata vanno a farsi benedire...
void loop () {
Wire.requestFrom(9, 2);
a = Wire.read();
b = Wire.read();
val = a;
val = val << 8 | b;
val = (map(val,0,4500,0,1165));
while (digitalRead(8) == 1) {
genera(val);
}
}
void genera (int val) {
dac.print(2220 + val);// 2200 genera offset dc di 1.7 volt
delayMicroseconds(9900);//
dac.print(2220 - val);
delayMicroseconds(9900);//2200 genera offset dc di 1.7 volt
}
ma perchè usi delay e non millis() ?
dovresti fare una prova con la seriale di un esp da 115200, secondo me bypassi il problema
--------------- Ragioniere senza conoscenza dei ruoli che ama 4A per mmq di supposta (comprata su Wikipedia) Agricoltore ammazza child e NON col latte vaccino che ucciderà tutti quelli che ne fanno uso
| | | | PierGsi
Watt   Gruppo:Utente Messaggi:62
Stato:
| Inviato il: 08/04/2020 16:07:12
|
Arduino NANO vedo che utilizza ATMEGA328...
P.S. non ho riscontri del funzionamento di quanto segue e potrei aver sbagliato qualche registro, è una mia idea di come lo farei in C...
Metti un quarzo da 20 MHz
* Setti INT0 per rilevare lo zero crossing rete sul secondario di un trasfo di isolamento, la routine sarà chiamata 100 volte al secondo (ad ogni passaggio sia negativo/positivo che positivo/negativo della semionda di rete).
* Metti il TIMER/COUNTER1 in Phase correct mode ed imposti i registri in modo da avere un valore TOP max di conteggio pari a 2048 (che sarà la risoluzione del tuo PWM) ,prescaler ad 1.
fOUT= FRQ.OSCILLATORE/2*1*TOP
fOUT= (20*10^6)/(2*1*2048)= 4.88 kHz
4.88 kHz sarà la frequenza "di carrier" fornita dal pin PWM per generare la onda quadra modulata in ampiezza.
5V/2048 = 2.4 mV di risoluzione
L'uscita del pin PWM la colleghi ad un filtro integratore RC per avere un compromesso tra tempo di risposta e ripple, diciamo 2k2 / 100 nF oppure 10k / 100nF, da valutare considerando la costante di tempo R*C per arrivare circa al 60/70% della carica che ci si aspetta.
Metti a riposo il PWM a 1023 (registro OCR1x mi pare), per 2.5V in uscita
* USART configurata al baud rate richiesto, INTERRUPT A FINE RICEZIONE.
Ora, ad ogni passaggio per lo zero (INT0 routine) devi solo fare, alternativamente, 1023+(mVdesiderati/2.4), 1023-(mVdesiderati/2.4) e mettere il valore ottentuo nel registro hardware del TMR1 (OCR1x).
Dovresti ottenere un'onda quadra simmetrica duty 50-50 con frequenza 50Hz, sincrona con la rete, e che oscilla attorno a metà tensione di alimentazione.
Quando lo desideri chiedi al contatore remoto il dato di consumo tramite tramite seriale da una routine nel main, considera che bufferizzare un byte da trasmettere è roba da pochissimi cicli macchina, una volta caricato il dato si arrangia l'hardware del micro a fare tutto, poi quando il contatore/misuratore risponde il micro ti entra nella service interrupt dell'USART, li' prendi il dato, lo metti in un array che *processerai sempre nel main*.
Una volta che dalla seriale hai ricevuto il numero di bytes che ti aspetti, fai il parsing ed i calcoli nel MAIN.
Avendo il valore desiderato da mettere nel registro del contatore TMR1 aspetti la prox. chiamata della routine INT0, lo copi dentro OCR1x e lui si arrangia a crearti il duty cycle. | | | | joeled
| Inviato il: 08/04/2020 19:40:36
|
@emuland
Proverò con millis
@Piergsi
Interessante , mi documenterò..grazie
--------------- 595Wp 1 mono + 4 poli direzione 1 ovest - PCM 60 X MPPT - 2x SMA 12volt 105 Ah - inverter china 1000 Watt onda pura-Sistema 24 volt Sito realtime in versione beta...
| | | | | | | Claudio
| Inviato il: 10/04/2020 14:11:25
|
Non vorrei dire banalità ma se si beve amplificare un segnale a 50Hz non è più semplice usare un piccolo circuito amplificatore tarandolo in modo di avere all'uscita la tensione Ac desiderata sincronizzata con la rete?
Quanti miliVolt hai a 30 metri e quanti ne dovresti avere?
Modificato da Claudio - 10/04/2020, 14:14:48
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | joeled
| Inviato il: 10/04/2020 19:49:14
|
CITAZIONE (Claudio, 10/04/2020 14:11:25 ) 
Non vorrei dire banalità ma se si beve amplificare un segnale a 50Hz non è più semplice usare un piccolo circuito amplificatore tarandolo in modo di avere all'uscita la tensione Ac desiderata sincronizzata con la rete?
Quanti miliVolt hai a 30 metri e quanti ne dovresti avere?
Ciao , non è una banalità ,potrebbe funzionare amplificando il segnale del TA a livelli trasportabili..magari 5 volt e poi ridurlo all'arrivo per riportarlo all'origine.Quello che mi preoccupa con questo sistema sono i possibile disturbi a 50 hz che potrebbero entrare lungo il tragitto...Considerando che la risoluzione del gtil e' circa 1.2 millivolt per 12 watt...
--------------- 595Wp 1 mono + 4 poli direzione 1 ovest - PCM 60 X MPPT - 2x SMA 12volt 105 Ah - inverter china 1000 Watt onda pura-Sistema 24 volt Sito realtime in versione beta...
| | | | joeled
| Inviato il: 10/04/2020 19:51:54
|
CITAZIONE (PierGsi, 10/04/2020 11:55:55 ) 
Fatto progressi ? 
Yes..
Ho trovato cosa era l'inghippo ...
Per non scrivere 6 7 righe di codice in più ho messo questo:
Serial.parseInt()
Leggendo direttamente i byte dalla seriale problema risolto..
Avrei scritto stasera la risposta...
Modificato da joeled - 10/04/2020, 19:57:28
--------------- 595Wp 1 mono + 4 poli direzione 1 ovest - PCM 60 X MPPT - 2x SMA 12volt 105 Ah - inverter china 1000 Watt onda pura-Sistema 24 volt Sito realtime in versione beta...
| | | | | | | joeled
| Inviato il: 13/04/2020 19:49:17
|
Buonasera...
si prosegue qui..
LINK
--------------- 595Wp 1 mono + 4 poli direzione 1 ovest - PCM 60 X MPPT - 2x SMA 12volt 105 Ah - inverter china 1000 Watt onda pura-Sistema 24 volt Sito realtime in versione beta...
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|