PPTEA
problema con display

VISUALIZZA L'ALBUM

Pag: (3)   1   [2]   3    (Ultimo)


FinePagina

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 30/7/2012,14:01

ho visto che hai messo a fuoco il problema che ti ho esposto....
...aime con il c++ non posso aiutarti.
ciao eco



---------------



 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 30/7/2012,14:53

Dovremmo esserci...ho fatto la prova solo in modo teorico...devi effettuare 3 modifiche e dovrebbe andare tutto quanto. faccine/rolleyes.gif
Fai la prova quando vuoi/puoi.... faccine/smile.gif
Ciao
Bolle

1

CODICE
4650 bhj=sr/60 MOD 60
4651 LCDWRITE=RIGHT("0"&bhj,2)
4652 bhj=sr MOD 60
4653 LCDWRITE=":"&RIGHT("0"&bhj,2)


2
CODICE
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)&" "


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



Questo è il codice completo:

CODICE
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
4500 ss=INT(TIMER) 'secondi trascorsi
4550 sr=(time*60)-ss 'secondi rimanenti
4600 LCDPOS=&H1a
4650 bhj=sr/60 MOD 60
4651 LCDWRITE=RIGHT("0"&bhj,2)
4652 bhj=sr MOD 60
4653 LCDWRITE=":"&RIGHT("0"&bhj,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&":"
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)&" "
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.7001,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 :diminuisce
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 :diminuisce
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



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

 

PinoTux

Avatar
GigaWatt


AMMINISTRATORE
Msg:3509

Stato:



Inviato il: 30/7/2012,15:33

....."Meno male che ecologix c'è".... faccine/biggrin.gif

(...e pure Bolle... faccine/tongue.gif )



---------------
"Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza"

http://iv3gfn.al...

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 31/7/2012,08:12

Eco, lascia stare le prove di sopra...dovrei (condizionale d'obbligo) aver risolto tutto...sia il problema del float che lo stack sulle operazioni delle stringhe concatenate a iosa.
Avere delle indicazioni così precise aiuta molto e velocizza enormemente il lavoro. Ho riportato lo stack come nella versione 2.16c e quindi il tuo codice iniziale (postato nella prima pagina) non dovrebbe avere più problemi. Allego la versione 2.16q che devi inserire nel nuovo firmware....(la versione del compilatore 2.16p è compatibile) se mi dai l'ok , cioè se tutto funzica, ufficializziamo la consegna. Ciao e grazie. faccine/smile.gif

Per la cronaca ho risolto il problema della ftoa alzando la precisione fino a 7 cifre dopo la virgola e poi ho troncato l'ultimo carattere...inoltre la conversione in stringa ha sempre 8 caratteri...questo è il codice:

CODICE
void ftoa(float f, unsigned char *str)
{
char *cp;
unsigned long l;
cp=str;
if (f<0)
 {
 *cp++= '-'
 f=-f;
 }
l = (unsigned long)f; // PARTE INTERA
myltoa(l,cp);  

f-=(float)l;// PARTE DECIMALE
l= (unsigned long) (f*1e7); // ALZO LA PRECISIONE FINO ALLA 7 CIFRA...
l+=2;  // Arrotondo di 0.0000002
while(*cp)
cp++;
*cp='.'

*(cp+1)=Ɔ'
*(cp+2)=Ɔ'
*(cp+3)=Ɔ'
*(cp+4)=Ɔ'
*(cp+5)=Ɔ'
*(cp+6)=Ɔ'
*(cp+7)=Ɔ'
cp+=8;
myltoa(l,cp); // Calcolo solo la lunghezza...

myltoa(l,cp-strlen(cp)); // Barbatrucco ...sposto la stringa visto che so la sua lunghezza...lento ma risparmio spazio.

*(str+8)=0;  // Metto la lunghezza fissa del float
}

Bolle




Scarica allegato

PPTEA_2_16q.rar

( Numero download: 142 )



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

 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,16:38

ciao bolle,
faccio la prova e ti aggiorno

saluti eco



---------------



 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,17:16

purtroppo ho un problema...

hai scritto:

Allego la versione 2.16q che devi inserire nel nuovo firmware....(la versione del compilatore 2.16p è compatibile) se mi dai l'ok , cioè se tutto funzica, ufficializziamo la consegna. Ciao e grazie. faccine/smile.gif

hai allegato un nuovo firmware (2.16q), da inserire all'interno del pic, mentre come compilatore posso utilizzare quello 2.16p?

oppure ho interpretato male?

perche' io ho fatto questo, ma quando chiedo la versione del firmaware al compilatore mi risponde:

pptea 2.16r!
check error!
2.16p! <> 2.16r!

dove ho sbagliato?

ciao ecologix 1971





---------------



 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 31/7/2012,17:51

Mi sono spiegato malissimo: evita di fare il check!
Se ha risposto con la 2.16r hai caricato il firmware giusto....prova il tuo primo codice e dimmi se va tutto ok!
Ciao
Bolle



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

 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,18:30

infatti ho caricarato il codice senza problemi.
per quanto riguarda i float il problema e' risolto inserindo nei dati 13,7 oppure 11,7 i valori sul pptea non cambiano.
ma per il problema con lo stack delle stringhe, purtroppo ancora non ci siamo.
per non confonderci ho inserito il seguente codice, che e' leggermente diverso da quello iniziale....cambiano soltanto alcune funzioni dei tasti.

codice inserito con firmware 2.16q

100 '
150 ' h2-o transfer 1_2 31-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/visualizza potenza totale
500 ' bit4 =inp diminuisce/visualizza parametri
550 ' bit5 =inp conferma/reset potenza
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 '
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.2 31.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
3150 volt=v*0.01606 ' <---- fattore moltiplicatore
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
3810 IF INPBIT(3)=1 THEN :visualizza_potenza
3850 IF INPBIT(4)=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)

4651 'bhj=0&sr/60 MOD 60
4652 'LCDWRITE=RIGHT(bhj,2)
4653 'LCDWRITE=:
4655 'bhj=0& sr MOD 60
4656 'LCDWRITE=RIGHT(bhj,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)&" "

4903 'message=ON &stt/86400 MOD 9999&":"
4905 'bhj=0&stt/3600 MOD 24
4910 'message =message & RIGHT(bhj,2)&":"
4914 'bhj=0&stt/60 MOD 60
4918 'message=message &RIGHT(bhj,2)
4922 'bhj=0&stt MOD 60
4926 'message=message &":"&RIGHT(bhj,2)&" "


4950 'GOTO 5150
5000 w=0.0083*stt
5050 strw=LEFT(w,5)
5100 'message=POWER = &strw&" W "
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 '
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
9130 FOR w=1 TO 100
9140 IF INPBIT(5)=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
10000 '
10050 :visualizza_potenza
10100 '
10200 LCDCLEAR
10250 LCDPOS=&h13
10300 LCDWRITE="TOTAL POWER"
10350 LCDPOS=&h21
10400 LCDWRITE="W = "&strw
10500 FOR w=1 TO 100
10550 IF INPBIT(5)=1 THEN :reset_power
10600 NEXT w
10610 '
10650 GOTO 2600
11000 '
11050 :reset_power
11100 '
11200 PWMDC=0
11250 stt=0
11260 strw="0"
11300 st=0
11350 WAITS 1
11400 GOTO 2600

ps: le modifiche che mi avevi postato inizialmente le ho lasciate apostrofate

ciao eco



---------------



 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 31/7/2012,20:20

faccine/crash.gif



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

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 31/7/2012,21:03

Ho fatto girare parte del tuo codice sul PPTEA ...e funzica! Me lo puoi provare tu?
Quando ho tempo metto in piedi il tuo circuito e testo tutto il tuo ultimo codice...voglio capire quale è l'anomalia! faccine/crash.gif
Ciao
Bolle

CODICE
100 '
150 ' h2-o transfer 0_4 25-07-2012
160 ' by ecologix 1971
200 '
250 ' bit0 =cads1 tensione batteria
300 ' bit1 =inp livello max serbatoio up
350 ' bit2 =inp livello min serbatoio down
360 ' bit3 =out led serbatoio up pieno
370 ' bit4 =out led serbatoio down vuoto
380 ' bit5 =out led low battery
400 ' bit15=out pompa h2-o 12 volts
450 '
500 PRAGMA EXTERNAL_EEPROM
550 SETIO=7
600 OUT=0
650 CADS=1
700 ' vok=0 vbat<vmax mentre vok=1 vbat>vmax
750 '
800 '
850 'goto 1450
900 '
950 'presentazione
1000 '
1050 LCDCLEAR
1100 LCDPOS=&h12
1150 LCDWRITE="H2-O transfer"
1200 LCDPOS=&h21
1250 LCDWRITE="By ecologix 1971"
1300 LCDPOS=&h35
1350 LCDWRITE="vers. 0.4 25.07.12"
1400 WAITS 3
1450 '
1500 '
1550 ' costanti
1600 '
1650 CONSTANT vmax=13.7 ' soglia tensione massima
1700 CONSTANT vmin=11.8 ' soglia tensione minima
1760 CONSTANT m=15 ' minuti attivazione pompa

2250 LCDCLEAR

2255 'PRINT "0"


2260 '
2300 :start
2310 '
2350 LCDPOS=&h21
2400 'WAITMS 250
2450 '
2550 '


2600 v=CADS1
2650 volt=v*0.01623266131 ' <---- fattore moltiplicatore
2700 '
2950 LCDPOS=&h11
3000 strvolt=LEFT(volt,5)
3050 LCDWRITE="v= "&RIGHT(" "&strvolt,5)

3100 LCDPOS=&h21
3150 LCDWRITE=message
3200 'PRINT message
3565 ss=INT(TIMER) 'secondi trascorsi
3570 sr=(m*60)-ss 'secondi rimanenti


3575 LCDPOS=&H1a
3580 LCDWRITE=RIGHT("0"&sr/60 MOD 60,2)&":"&RIGHT("0"&sr MOD 60,2)
3585 'PRINT "2"

3592 stt=st+ss
3594 LCDPOS=&h25
3596 a=(a+1) MOD 10

3597 'PRINT "2a"
3598 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)&" "

5594 WAITMS 250
5600 GOTO 2300



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

 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,21:39

ho appena provato il codice che hai postato....
.....cosi' funzica pure a me faccine/biggrin.gif
....entrambi i contatori funzionano senza imperfezioni.....
....mistero faccine/ph34r.gif
ciao eco



---------------



 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 31/7/2012,21:41

faccine/crash.gif



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

 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,21:53

se puo' essere d'aiuto ho appena provato la prima versione del codice, un po' piu 'completa di quella che hai riportato e funziona perfettamente.
il problema e' nato con l'ultima versione , praticamente dove ci sono i settaggi dei parametri.....
.....che dici li togliamo faccine/biggrin.gif
questo e' il codice (prima versione) senza settaggi in cui i contatori sono perfetti.

100 '
150 ' h2-o transfer 0_5 26-07-2012
160 ' by ecologix 1971
200 '
250 ' bit0 =cads1 tensione batteria
300 ' bit1 =inp livello max serbatoio up
350 ' bit2 =inp livello min serbatoio down
360 ' bit3 =out led serbatoio up pieno
370 ' bit4 =out led serbatoio down vuoto
380 ' bit5 =out led low battery
400 ' bit15=out pompa h2-o 12 volts
450 '
500 PRAGMA EXTERNAL_EEPROM
550 SETIO=7
600 OUT=0
650 CADS=1
700 ' vok=0 vbat<vmax mentre vok=1 vbat>vmax
750 '
800 '
850 'goto 1450
900 '
950 'presentazione
1000 '
1050 LCDCLEAR
1100 LCDPOS=&h12
1150 LCDWRITE="H2-O transfer"
1200 LCDPOS=&h21
1250 LCDWRITE="By ecologix 1971"
1300 LCDPOS=&h35
1350 LCDWRITE="vers. 0.5 26.07.12"
1400 WAITS 3
1450 '
1500 '
1550 ' costanti
1600 '
1650 CONSTANT vmax=13.7 ' soglia tensione massima
1700 CONSTANT vmin=11.8 ' soglia tensione minima
1760 CONSTANT m=15 ' minuti attivazione pompa
1800 '
1850 '
1900 '
1950 '
2000 '
2050 '
2100 :prestart
2110 '
2115 IF vok=0 THEN 2150
2120 st+=ss
2150 WAITS 1
2200 vok=0
2250 LCDCLEAR
2260 '
2300 :start
2310 '
2350 LCDPOS=&h21
2400 WAITMS 250
2450 '
2500 '
2550 '
2600 v=CADS1
2650 volt=v*0.01623266131 ' <---- fattore moltiplicatore
2700 '
2850 '
2900 '
2950 LCDPOS=&h11
3000 strvolt=LEFT(volt,5)
3050 LCDWRITE="v= "&RIGHT(" "&strvolt,5)
3100 LCDPOS=&h21
3150 LCDWRITE=message
3200 OUTBIT(15)=vok
3210 OUTBIT(3)=state1
3220 OUTBIT(4)=state2
3230 OUTBIT(5)=state3
3250 IF INPBIT(1)=1 THEN :serbatoio_up_pieno
3270 IF INPBIT(2)=0 THEN :serbatoio_down_vuoto
3275 state1=0
3280 state2=0
3300 IF vok=1 THEN 3500
3350 IF volt>vmax THEN :tensione_raggiunta
3400 IF volt>vmin THEN :tensione_intermedia
3450 IF vok=0 THEN :start
3500 '
3550 IF volt<vmin THEN :tensione_insufficiente
3552 state3=0
3555 '
3556 ' counter
3557 '
3560 'st+=ss
3565 ss=INT(TIMER) 'secondi trascorsi
3570 sr=(m*60)-ss 'secondi rimanenti
3575 LCDPOS=&H1a
3580 LCDWRITE=RIGHT("0"&sr/60 MOD 60,2)&":"&RIGHT("0"&sr MOD 60,2)
3582 stt=st+ss

3584 LCDPOS=&h25
3586 a=(a+1) MOD 10
3588 IF a=0 THEN 3595
3592 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)&" "
3594 GOTO 3650
3595 w=0.0083*stt
3600 strw=LEFT(w,5)
3610 message=POWER = &strw&" "
3650 IF sr>0 THEN :start
3700 PWMDC=0
3800 :tempo_esaurito
3810 '
3820 message=" TIME END "
3850 GOTO :prestart
3900 '
3950 :tensione_raggiunta
4000 '
4050 vok=1
4100 message="ON "
4150 PWMDC=0
4200 GOTO :start
4250 '
4450 GOTO :prestart
4500 '
4550 :tensione_insufficiente
4600 '
4650 message=" LOW BAT "
4660 state3=1
4700 GOTO :prestart
4750 '
4800 :tensione_intermedia
4850 '
4900 message=" "&LEFT(DATE,14)
4905 '
4950 GOTO :start
5000 '
5050 :serbatoio_up_pieno
5100 '
5200 message="TANK UP FULL "
5210 state2=1
5250 GOTO :prestart
6000 '
6050 :serbatoio_down_vuoto
6100 '
6150 message="TANK DOWN EMPTY"
6160 state1=1
6200 GOTO :prestart


ciao eco



---------------



 

ecologix1971

Avatar
GigaWatt


MODERATORE
Msg:4165

Stato:



Inviato il: 31/7/2012,23:11

facendo il debugg con entrambi i codici e visualizzando nella finestra watch, i valori delle variabili ss (secondi trascorsi) ed sr (secondi rimanenti), ho notato che mentre nella prima versione del codice (senza settaggi dei parametri), le due variabili vengono identificate come intere, nel secondo codice (quello con i settaggi), la variabile ss e' un intero, mentre la variabile sr e' un float faccine/wacko.gif

4500 ss=INT(TIMER)

4550 sr=(time*60)-ss

e quindi la visualizzazione sul display, data dalla linea:

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

rappresentava le ultime cifre decimali, alterando cosi' la visualizzazione del contatore.

ho risolto inserendo la funzione int anche alla linea 4550 facendo divenire cosi intera anche la variabile sr.

4550 sr=INT((time*60)-ss)

.....non ho capito pero' perche' c'e' questa differenza tra un codice e l'altro.....

ciao a tutti ecologix1971



---------------



 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 1/8/2012,06:42

Meno male mi hai dato un'ottima notizia...
Dirò delle cose che probabilmente già sai...ma vale la pena soffermarci due minuti...per gli altri utenti.
La tipologia dei dati dipende dai dati stessi ...cioè il PPTEA alza o abbassa in modo automatico la 'precisione' ma tutto dipende dalla tipologia dei dati.
Nel discorso in questione la tipologia di sr ( cioè se intero o a virgola mobile) visto che ss è un intero, dipende esclusivamente dalla variabile time:
sr=(time*60)-ss.

Se time è un float (cioè un valore in virgola mobile) il pptea imposta sr come un valore in virgola mobile. Il metodo che il PPTEA adotta è semplice e può essere sintetizzato in: se c'è una sola variabile o costante in virgola mobile il risultato e la tipologia del risultato viene espresso in virgola mobile.
Facciamo un esempio dove time=4 e ss= 5:

sr= (time*60)-ss sr->Intero con valore sr=235

se time =4.0 e ss=5

sr= (time*60)-ss sr->Float con valore sr=235.000000

Tutto questo per dire che se time è un float allora effettuando un cast (cioè facendo diventare tutto un intero nell'istruzione 4550) sr diventa per forza un intero. Però possiamo anche verificare questo trasformando in intero l'unica variabile che potrebbe essere float,cioè solo esclusivamente la variabile time:

4550 sr=(INT(time)*60)-ss

Ora non ho verificato il tuo codice ma se mi confermi questo possiamo dire che il problema è risolto...e possiamo formalizzare la consegna...se invece rimane qualche problema si deve risolvere faccine/construction.gif...ma spero che sia tutto ok!
Ciao
Bolle
PS:Quando mi fai venire a casa tua per vedere il tutto? Sono molllllto interessato a quello che hai fatto.




Modificato da NonSoloBolleDiAcqua - 1/8/2012, 08:00


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

 
 InizioPagina
 

Pag: (3)   1   [2]   3    (Ultimo)

Versione Completa!

Home page     TOP100-SOLAR    Home page forum