Se sei già registrato           oppure    

Orario: 28/04/2024 20:13:21  

 

Energia Alternativa ed Energia Fai Da Te > PPTEA

VISUALIZZA L'ALBUM

Pagine: (3)   [1]   2   3    (Ultimo Msg)


problema con display
FinePagina

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,11:17

ciao a tutti.

mentre effetuavo una modifica ad un codice elaborato qualche giorno fa, con una versione un po' obsoleta del compilatore e firmware, la 2.16c, ho avuto necessita', in quanto avevo bisogno di vettori tipo float, di aggiornare il tutto (firmware e compilatore) all'ultima versione ossia la 2.16p.

premetto che il vecchio codice meno sofisticato, girava tranquillamente con la 2.16c, sia con un display a 16 che a 20 caratteri.

sviluppato il nuovo codice, l'ho provato con il debugg del compilatore ed e' perfattamente funzionante, mentre facendolo girare sul pic, ho riscontrato qualche problema riguardo il display.

per esattezza, ci sono dei caratteri che non corrispondono, mentre ad esempio un contatore che fa parte del codice non parte subito ma dopo qualche minuto. un altro contatore da' i numeri a lotto.

ho controllato la versione del firmware e risulta 2.16p.


vi allego il codice in questione che e' basato su quello postato nel thread "h2-o transfer", con la possibilita' pero' di poter modificare i vari parametri direttamente dal pic

100 '
150 ' h2-o transfer 1_1 27-07-2012
200 ' by ecologix 1971
220 ' versione display 16 chrs
250 '
300 ' bit0 =cads1 tensione batteria
350 ' bit1 =inp livello max serbatoio up
400 ' bit2 =inp livello min serbatoio down
450 ' bit3 =inp aumenta
500 ' bit4 =inp diminuisce
550 ' bit5 =inp conferma
600 ' bit15=out pompa h2-o 12 volts
650 '
700 PRAGMA EXTERNAL_EEPROM
750 SETIO=63
800 'OUT=0
850 CADS=1
860 DIM valore(3) AS FLOAT
900 ' vok=0 vbat<von mentre vok=1 vbat>von
950 '
1000 '
1050 'goto 1450
1100 '
1150 'presentazione
1200 '
1250 LCDCLEAR
1300 LCDPOS=&h12
1350 LCDWRITE="H2-O TRANSFER"
1400 LCDPOS=&h21
1450 LCDWRITE="By ecologix 1971"
1500 WAITS 2
1510 LCDPOS=&h21
1550 LCDWRITE="V. 1.1 27.07.12"
1600 WAITS 3
1650 '
1700 OUTBIT(15)=0
1720 GOSUB 8000
2050 '
2100 '
2150 '
2200 '
2250 '
2300 :prestart
2350 '
2400 IF vok=0 THEN 2500
2450 st+=ss
2500 WAITS 1
2550 vok=0
2600 LCDCLEAR
2650 '
2700 :start
2750 '
2800 LCDPOS=&h21
2850 WAITMS 250
2900 '
2950 '
3000 '
3050 v=CADS1
3100 volt=v*0.01623266131 ' <---- fattore moltiplicatore
3150 '
3200 '
3250 '
3300 LCDPOS=&h11
3350 strvolt=LEFT(volt,5)
3400 LCDWRITE="V= "&RIGHT(" "&strvolt,5)
3450 LCDPOS=&h21
3500 LCDWRITE=message
3550 OUTBIT(15)=vok
3600 '
3650 '
3700 '
3750 IF INPBIT(1)=1 THEN :serbatoio_up_pieno
3800 IF INPBIT(2)=0 THEN :serbatoio_down_vuoto
3850 IF INPBIT(5)=1 THEN :visualizza_parametri
3900 '
3950 IF vok=1 THEN 4150
4000 IF volt>von THEN :tensione_raggiunta
4050 IF volt>voff THEN :tensione_intermedia
4100 IF vok=0 THEN :start
4150 '
4200 IF volt<voff THEN :tensione_insufficiente
4250 '
4300 '
4350 ' counter
4400 '
4450 'st+=ss
4500 ss=INT(TIMER) 'secondi trascorsi
4550 sr=(time*60)-ss 'secondi rimanenti
4600 LCDPOS=&H1a
4650 LCDWRITE=RIGHT("0"&sr/60 MOD 60,2)&":"&RIGHT("0"&sr MOD 60,2)
4700 stt=st+ss
4750 LCDPOS=&h25
4800 a=(a+1) MOD 10
4850 IF a=0 THEN 5000
4900 message=ON &stt/86400 MOD 9999&":"&RIGHT("0"&stt/3600 MOD 24,2)&":"&RIGHT("0"&stt/60 MOD 60,2)&":"&RIGHT("0"&stt MOD 60,2)&" "
4950 GOTO 5150
5000 w=0.0083*stt
5050 strw=LEFT(w,5)
5100 message=POWER = &strw&" "
5150 IF sr>0 THEN :start
5200 PWMDC=0
5250 :tempo_esaurito
5300 '
5350 message=" TIME END "
5400 GOTO :prestart
5450 '
5500 :tensione_raggiunta
5550 '
5600 vok=1
5650 message="ON "
5700 PWMDC=0
5750 GOTO :start
5800 '
5850 GOTO :prestart
5900 '
5950 :tensione_insufficiente
6000 '
6050 message=" LOW BAT "
6100 '
6150 GOTO :prestart
6200 '
6250 :tensione_intermedia
6300 '
6350 message=" "&LEFT(DATE,14)
6400 '
6450 GOTO :start
6500 '
6550 :serbatoio_up_pieno
6600 '
6650 message="TANK UP FULL "
6700 '
6750 GOTO :prestart
6800 '
6850 :serbatoio_down_vuoto
6900 '
6950 message="TANK DOWN EMPTY"
7000 '
7050 GOTO :prestart
8000 '
8060 :settaggio_parametri
8080 '
8100 LCDCLEAR
8110 WAITS 1
8120 LCDPOS=&h14
8130 LCDWRITE="SET RANGE"
8140 WAITS 3
8160 LCDCLEAR
8180 DATA "Von",13.7,0.1,14.2,12.5
8200 DATA "Voff",11.8,0.1,12.1,11.6
8220 DATA "time",15,1,60,1
8240 READ scritta,a,k,amax,amin
8260 '
8280 :start1
8300 '
8320 stra=RIGHT("0"&a,2)&":00"
8340 IF j=2 THEN 8380
8360 stra=LEFT(" "&a,5)
8380 LCDPOS=&h13
8400 LCDWRITE=""&scritta&"= "&stra
8420 '
8440 IF INPBIT(3)=1 THEN :aumenta
8460 IF INPBIT(4)=1 THEN iminuisce
8480 IF INPBIT(5)=1 THEN :conferma
8500 GOTO :start1
8520 '
8540 :aumenta
8560 '
8580 IF a>=amax THEN :start1
8600 a=a+k
8620 GOTO :start1
8640 '
8660 iminuisce
8680 '
8700 IF a<=amin THEN :start1
8720 a=a-k
8740 GOTO :start1
8760 '
8780 :conferma
8800 '
8820 LCDCLEAR
8840 j++
8860 valore(j)=a
8880 IF j=3 THEN 9250
8900 READ scritta,a,k,amax,amin
8920 GOTO :start1
8925 '
8927 :visualizza_parametri
8930 :
8940 LCDCLEAR
8950 FOR w=1 TO 20
8960 strvon=LEFT(" "&valore(1),5)
8980 strvoff=LEFT(" "&valore(2),5)
9000 strtime=INT(valore(3))&":00"
9020 LCDPOS=&h11
9040 LCDWRITE="on"&strvon
9060 LCDPOS=&h19
9080 LCDWRITE="off"&strvoff
9100 LCDPOS=&h23
9120 LCDWRITE="time = "&strtime
9140 IF INPBIT(3)=1 AND INPBIT(4)=1 THEN 1700
9190 NEXT w
9200 '
9205 LCDCLEAR
9210 GOTO :start
9250 '
9300 j=0
9310 RESTORE
9320 '
9350 von=valore(1)
9400 voff=valore(2)
9450 time=valore(3)
9455 LCDCLEAR
9460 LCDPOS=&h13
9470 LCDWRITE="Successfully!"
9480 WAITS 3
9500 RETURN



http://www.energialternativa.info/Public/NewForum/ForumEA/6/7/2/5/6/4/5/t/1343383356.jpg

ad esempio in questo caso, il contatore in alto a dx visualizza 66:00, quando io ho invece settato 01:00 e poi non funziona, il contatore in basso parte invece con qualche minuto di ritardo

http://www.energialternativa.info/Public/NewForum/ForumEA/6/7/2/5/6/4/5/t/1343383358.jpg

qui ad esempio segna zero. ma in realta' sono impostati 15 minuti.
il contatore in realta' funziona anche perche' scaduto il tempo il carico viene disinserito.

avete qualche idea da che cosa puo' dipendere...


grazie a tutti ecologix1971


 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 27/7/2012,12:18

Ciao eco,
faccio un controllo veloce...se compili lo stesso codice dovrebbe fungere in modo identico in entrambe le versioni del firmware. Una cosa che mi viene in mente è quelle di tenere sotto controllo le stringhe...cioè quando si effettuano operazioni di concatenazione (esempio la riga 4900) si potrebbe sfondare lo stack del PPTEA...e a quel punto si potrebbero verificare problemi. Hai fato bene a segnalare il problema...gli do un'occhiata e cerco di capire...sempre se non si tratti di un problema a livello sw.

Fai questa prova al volo se puoi...spezza in 2 le istruzioni 4650 e 4900 cioè :

4650 LCDWRITE=RIGHT("0"&sr/60 MOD 60,2)
4655 LCDWRITE=":" & RIGHT("0"&sr MOD 60,2)

4900 message="ON "&stt/86400 MOD 9999&":"&RIGHT("0"&stt/3600 MOD 24,2)&":"
4905 message=message &RIGHT("0"&stt/60 MOD 60,2)&":"&RIGHT("0"&stt MOD 60,2)&" "

e vedi se il problema rimane.
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,12:55


intendi che se compilo il codice con il firmware 2.15 (stesso della 2.16c), dovrebbe andar bene?
io sono arrivato alla conclusione di aggiornarlo in quando il comando dim con la 2.16c non mi accettava la variante float che ho utilizzato nel codice

quello che ho notato e' che sembra che nei primi minuti di funzionamento, dopo il settaggio dei parametri che si puo' effetuare all'inizio, non funzioni correttamente, tant'e' che anche altre opzioni del codice non vengono accettate

ciao eco

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,13:33

ti aggiorno.

ho fatto le modifiche che mi hai consigliato.
il contatore sotto ora funziona da subito non piu' dopo un paio di minuti, quindi e' ok, mentre per quanto riguarda quello in alto a dx, continua a fare a modo suo:
i secondi sono sempre a 00, mentre i minuti si alternano tra 00 - 33 - 66 - 99.

ciao eco

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 27/7/2012,14:18

Cerchiamo di arginare il problema...puoi farlo girare con il PC connesso sulla porta USB?
Dammi 10 minuti che cerco di capire il codice...

Mizzeca...hai fatto una cosa cazzutella.
Inserisci queste 4 linee e dimmi cosa accade:

4650 bhj=sr/60 mod 60
4652 LCDWRITE=RIGHT("0"&bhj,2)
4653 bhj=sr mod 60
4655 LCDWRITE=":"
4656 LCDWRITE=RIGHT("0"&bhj,2)

AAAAOOOOOOOOO.....sto guardando il codice e meno male che eri alle prime armi, manca solo la scrittura su eeprom del dato che imposti ( in modo che quando riparte, sempre se riparte, riprende l'ultimo valore)...hai fatto un gioiello...nemmeno io saprei fare una cosa del genere faccine/crash.gif faccine/crash.gif faccine/crash.gif



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,14:24

collegato alla usb non lo posso provare , perche' l'alimentazione al pic deriva dalla fonte che viene misurata.

comunque ho aggiunto/sostituito le 4 linee che mi hai detto , ma non e' cambiato nulla.


ciao eco

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 27/7/2012,14:31

Mi sono espresso male devi modificare tutte queste linee dal codice che hai postato:
4650 bhj=sr/60 mod 60
4652 LCDWRITE=RIGHT("0"&bhj,2)
4653 bhj=sr mod 60
4655 LCDWRITE=":"
4656 LCDWRITE=RIGHT("0"&bhj,2)

4900 message="ON "&stt/86400 MOD 9999&":"&RIGHT("0"&stt/3600 MOD 24,2)&":"
4905 message=message &RIGHT("0"&stt/60 MOD 60,2)&":"&RIGHT("0"&stt MOD 60,2)&" "



CITAZIONE (ecologix1971 @ 27/7/2012, 15:24)
collegato alla usb non lo posso provare , perche' l'alimentazione al pic deriva dalla fonte che viene misurata.

C'è la possibilità di agganciare la usb del PC anche con alimentazione esterna...agganci solo 3 cavi su 4 della usb ( il positivo della usb non lo colleghi...guarda la configurazione PPTEA MINI HYBRID sul manuale).

Cmq se non visualizza bene quel valore (il problema è solo in visualizzazione giusto?)... è solo questione di tempo...il problema lo troviamo...ma occorre perderci tempo...da domenica in poi lo studio bene.
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,14:35


grazie per il giogliellino,
l'ho buttato giu' stanotte....
....comunque mi ritengo sempre alle prime armi,
tant'e' vero che la scrittura su eeprom non ho minimamente idea di come funziona.

la versione senza settaggi andava alla grande (2.16c), il problema mi e' sorto nell'utilizzare i vettori decimali per il settaggio.
questa e' l'idea che mi e' balenata.
ciao eco

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 27/7/2012,14:40

Si si ...alle prime armi!
Cmq fai un uso molto spinto delle stringhe...li il povero pptea lavora con lo stack e utilizzando anche i vettori float ...potrebbe sfondare lo stack...ma ora non sono in grado di capirlo...se puoi aiutarmi a capire il problema dovresti caricare il tuo vecchio codice in eabasic scritto per la versione 2.16c e lo dovresti compilare e far girare nell'ultima 2.16p e verificare se si comporta allo stesso modo...cioè deve andare come la 2.16c.
Puoi farmi questa prova?
Ciao
Bolle
PS:Ci vediamo domani sera...avremo modo di parlarne meglio.



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,14:48

faccio subito la prova e ti riferisco

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 27/7/2012,16:10

mi dispiace se ci ho messo troppo tempo,

ma non riuscivo piu' a far rilevare il pptea al pc, poi ho avuto problemi nel trasferire i codici, nel senso che durante il trasferimento mi segnalava tra i vari OK,OK,OK, anche dei MSG ERR e quando andavo ad avviare il programma non partiva.

alla fine a forza di provare ci sono riuscito ed il risultato e' questo:

con la prima versione che avevo fatto per la 2.16, presa di sana pianta, funziona correttamente il contatore in alto, mentre quello in basso e' bloccato.

se invece sostituisco le linee riguardanti il contatore in basso con quelle che mi hai postato, funzionano entrambi.

a domani
ciao eco



 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 27/7/2012,18:43

Se ti va, se hai tempo e se puoi...potresti farmi questa ulteriore prova con il tuo ultimo codice:

4650 bhj="0"&sr/60 mod 60
4652 LCDWRITE=RIGHT(bhj,2)
4653 LCDWRITE=":"
4655 bhj="0"& sr mod 60
4656 LCDWRITE=RIGHT(bhj,2)

4900 message="ON "&stt/86400 MOD 9999&":"
4901 bhj="0"&stt/3600 MOD 24
4902 message =message & RIGHT(bhj,2)&":"
4903 bhj="0"&stt/60 MOD 60
4904 message=message &RIGHT(bhj,2)
4905 bhj="0"&stt MOD 60
4906 message=message &":"&RIGHT(bhj,2)&" "

In questo modo lo stack viene alleggerito molto.
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 28/7/2012,17:10

ciao bolle,

ho appena inserito le linee di codice che hai postato, ma purtroppo il risultato e' sempre lo stesso.

il contatore inferiore funziona perfettamente, mentre quello in alto ha i secondi bloccati a 00 e i minuti passano da 00,33,66,99.....

poi c'e' un altro particolare...telo dico poi a voce.

ps: comunque non e' un problema e' soltanto la visualizzazione del contatore che non va', il contatore di per se e' ok, dopo il tempo trascorso il carico si stacca.

....certo cosi' e' brutto....tutt' al piu' lo elemino faccine/sad.gif

ciao eco


 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 30/7/2012,07:12

Nell'incontro del GEB avvenuto il 28 luglio ecologix mi ha parlato di una cosa strana...una anomalia che avviene nel pptea...nella linea 8360 del codice da lui scritto effettua una visualizzazione del valore 13.7...ma il pptea sul display visualizza 13.6.
Dopo una verifica ho constatato che il problema si verifica e l'ho riprodotto in modo circoscritto:

CODICE
05 ' TEST 13.7 Ecologic 28.07.2012 PROG_1
10 A=13.7
25 PRINT "A=" & A
35 GOTO 35


PPTEA: A=13.699999
DEBUG: A=13.700000

Questa per me è stata una sorpresa ....non è un vero problema ma ... cmq sono rimasto sorpreso...e ho iniziato ad indagare quindi Ecologix nel suo codice, andando a prendere 4 caratteri visualizza 13.6 invece che 13.7...quindi tutto chiaro ma occorre capire la problematica dov'è!

Va detto che da un punto di vista matematico non c'è molta differenza...ma se gestiamo il valore come stringa ( il PPTEA effettua una conversione da valore in virgola mobile (float) a stringa(ascii))...li sorge il problema.

Vediamo i test che ho fatto mediante lo stesso PPTEA:

CODICE
05 '<b> TEST 1</b> Ecologic 28.07.2012
10 A=13.7
20 B= 7/10.0 '---> 0.7 ...lo faccio fare matematicamente
22 C=A-B
25 PRINT "A=" & A & " B="& B & " C=" & C
35 GOTO 35


PPTEA : A=13.699999 B=0.700000 C=13.000000
DEBUG : A=13.700000 B=0.700000 C=13.000000


CODICE
05 ' <b>TEST 2</b> Ecologic 28.07.2012
10 A=13.0
20 B=0.7 ' 7/10.0 '---> 0.7
21 A=A+B
22 C=A-B
25 PRINT "A=" & A & " B="& B & " C=" & C
35 GOTO 35


PPTEA: A=13.699999 B=0.700000 C=13.000000
DEBUG : A=13.700000 B=0.700000 C=13.000000

Quindi matematicamente il PPTEA fa il suo lavoro ...ma quando deve convertire il valore da float a stringa...non è dei più precisi.
Ho iniziato ad andare a fondo e ho scoperto un'altra sorpresa...hehehe!

Ho scritto i valori da 13.0 a 13.9...e c'è un altro valore che è impreciso ed è il 13.2, cioè abbiamo:

13.1 -> 13.1
13.2 -> 13.19999
13.3 -> 13.3
13.4 -> 13.4
13.5 -> 13.5
13.6 -> 13.6
13.7 -> 13.69999
13.8 -> 13.8
13.9 -> 13.9

La funzione incriminata è la ftoa...ovviamente non ho utilizzato la funzione di sistema per problema di spazio...l'ho rifatta molto molto più corta ed evidentemente pecca di precisione.L'ho scritta in C ...posto il codice...devo ancora analizzare dove è l'inghippo...se qualcuno vuole aiutarmi ...è il benvenuto. la myltoa è la ltoa ( long to ascii).


CODICE
void ftoa(float f, unsigned char *str)
{
char *cp;
unsigned long l, rem;
cp=str;
if (f<0)
 {
 *cp++= '-';
 f=-f;
 }
l = (unsigned long)f;
f-=(float)l;
rem= (unsigned long) (f*1e6);
myltoa(l,cp);
while(*cp)
cp++;

*cp='.';

//
*(cp+1)='0';
*(cp+2)='0';
*(cp+3)='0';
*(cp+4)='0';
*(cp+5)='0';
*(cp+6)='0';
cp+=7;
myltoa(rem,cp);

l=strlen(cp);
myltoa(rem,cp-l);

}


Un saluto
Bolle




Modificato da NonSoloBolleDiAcqua - 30/7/2012, 08:32


---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 30/7/2012,13:46

Ho trovato la soluzione che agira questo ultimo problema:

CODICE
8180 DATA "Von",13.7001,0.1,14.2,12.5


dovrebbe fungere.
faccine/rolleyes.gif
Quanto prima vedo l'altro problema. faccine/smile.gif
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 
 InizioPagina
 

Pagine: (3)   [1]   2   3    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum