BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   pic, una domanda su una VARIABILE (https://www.baronerosso.it/forum/circuiti-elettronici/224239-pic-una-domanda-su-una-variabile.html)

elicottero78 23 settembre 11 12:56

pic, una domanda su una VARIABILE
 
ciao a tutti,ho ripreso in mano il mondo dei pic.....e con mikrobasic,mikroc,picbasic,picgenius........incomi ncio a farmi il mio bagaglio di conoscenze....dove non ho capito una cosa l ho imparata dan un altra parte......e via dicendo

ma la mia domanda che ho sempre avuto in testa da sempre era:

mettiamo una variabile:TEMPERATURA....byte...quindi da 0 a 255

io vorrei che so un esempio....controllare la temperatura di un motore,un tubo,un radiatore...non so un esempio

io con una variabille vista sul display senza fare i calcoli,posso vedere il valore che va da 0 a 255

ed ecco la mia domanda

io vorrei che la temperatura mentre sale da 0 al valore 100....faccia suonare un cicalino di continuo

ma mentre da 100 arriva a valore 70..deve suonare intermittente

da 70 a 140 suonare continuo e cosi via

ciò dall ultimo valore QUALSIASI se sale suona se scende suona intermittente

cè un metoto preciso x fare ciò o devo salvare ogni volta l utimo dato in una epron?

spero di essere stato chiaro,grazie

marcosinatti 23 settembre 11 13:20

Ti faccio un esempio in picbasic
LetturaTemperatura è la tua routine che aggiorna la variabile Temperatura
Il pause 300 definisce il tempo di intermittenza e di campionamento

LoopTemperatura:
gosub LetturaTemperatura
if Temperatura>TemperaturaOld then FlagSalita=1
if Temperatura<TemperaturaOld then FlagSalita=0
If FlagSalita=1 then
High Buzzer
else
Toggle Buzzer
Endif
Pause 300
TemperaturaOld=Temperatura
Goto LoopTemperatura

romoloman 23 settembre 11 15:03

Citazione:

Originalmente inviato da elicottero78 (Messaggio 2784956)
ciao a tutti,ho ripreso in mano il mondo dei pic.....e con mikrobasic,mikroc,picbasic,picgenius........incomi ncio a farmi il mio bagaglio di conoscenze....dove non ho capito una cosa l ho imparata dan un altra parte......e via dicendo

ma la mia domanda che ho sempre avuto in testa da sempre era:

mettiamo una variabile:TEMPERATURA....byte...quindi da 0 a 255

io vorrei che so un esempio....controllare la temperatura di un motore,un tubo,un radiatore...non so un esempio

io con una variabille vista sul display senza fare i calcoli,posso vedere il valore che va da 0 a 255

ed ecco la mia domanda

io vorrei che la temperatura mentre sale da 0 al valore 100....faccia suonare un cicalino di continuo

ma mentre da 100 arriva a valore 70..deve suonare intermittente

da 70 a 140 suonare continuo e cosi via

ciò dall ultimo valore QUALSIASI se sale suona se scende suona intermittente

cè un metoto preciso x fare ciò o devo salvare ogni volta l utimo dato in una epron?

spero di essere stato chiaro,grazie

Per sapere se sale o se scende devi avere il valore precedente, quindi è chiaro che devi dichiarare un'altra variabile dove memorizzare il valore al termine del loop.

Tuttavia se memorizzi il valore istantaneo avrai delle false segnalazioni quando il valore è stabile (tenderà a rimbalzare fra due letture) quindi è opportuno in questi casi fare delle medie o introdurre dei filtri, tipo se per 10 letture consecutive il valore è inferiore al valore precedente, allora memorizza il nuovo valore e considera l'andamento in discesa altrimenti consideralo stabile, ed eventualmente la stessa cosa per il maggiore, in pratica ti servono almeno altre due variabili per i contatori del filtro...

elicottero78 23 settembre 11 18:41

pensavo che dovevo girare il mondo x riuscire a scrivere il programma,ma voi me lo fate sembrare facile.....stasera faccio 2 prove......grazie a tutti e due,molto gentili

marcosinatti 23 settembre 11 20:58

Per evitare false commutazioni in maniera semplice e senza l'utilizzo di altre variabili, può bastare introdurre un pò di insteresi.
La commutazione avviene solo se dall'ultima volta c'è stato uno scostamento di almeno 2 punti.

LoopTemperatura:
gosub LetturaTemperatura
if Temperatura>TemperaturaOld+2 then
FlagSalita=1
TemperaturaOld=Temperatura
endif
if Temperatura<TemperaturaOld-2 then
FlagSalita=0
TemperaturaOld=Temperatura
endif
If FlagSalita=1 then
High Buzzer
else
Toggle Buzzer
Endif
Pause 300

Goto LoopTemperatura

romoloman 23 settembre 11 21:48

Citazione:

Originalmente inviato da marcosinatti (Messaggio 2785772)
Per evitare false commutazioni in maniera semplice e senza l'utilizzo di altre variabili, può bastare introdurre un pò di insteresi.
La commutazione avviene solo se dall'ultima volta c'è stato uno scostamento di almeno 2 punti.

LoopTemperatura:
gosub LetturaTemperatura
if Temperatura>TemperaturaOld+2 then
FlagSalita=1
TemperaturaOld=Temperatura
endif
if Temperatura<TemperaturaOld-2 then
FlagSalita=0
TemperaturaOld=Temperatura
endif
If FlagSalita=1 then
High Buzzer
else
Toggle Buzzer
Endif
Pause 300

Goto LoopTemperatura


Preferisco sempre non basarmi sull'steresi ma su letture ripetute....

LoopTemperatura:
gosub LetturaTemperatura
if Temperatura>TemperaturaOld then
if FlagSalita<5 then
FlagSalita=FlagSalita+1
endif
else
FlagSalita=0
endif
if Temperatura<TemperaturaOld then
if Flagdiscesa<5 then
FlagDiscesa=FlagDiscesa+1
endif
else
FlagDiscesa=0
endif
If FlagSalita=5 then
TemperaturaOld=Temperatura
FlagBuzzer=2
else if FlagDiscesa=5 then
FlagBuzzer=1
TemperaturaOld=Temperatura
else
FlagBuzzer=0
Endif
Pause 200
If FlagBuzzer=2 then
High Buzzer
else if FlagBuzzer=1 then
Toggle Buzzer
else
Low Buzzer
endif
Goto LoopTemperatura

Più complesso ma sicuramente rimbalza meno sulle temperature stabili...

HappyFly 23 settembre 11 23:27

Un'altro piccolo suggerimento ...
 
Non usare "mai" la eeprom per memorizzare in tempo reale valori di variabili, specie se come nel tuo caso non ti interessa assolutamente trovarle salvate dopo uno spegnimento e riaccensione del dispositivo.

Le eeprom per quanto alto hanno un numero massimo di cicli di scrittura per cui se te le bruci al ritmo di migliaia al secondo fai presto ... al massimo se ti serve di memorizzare un valore che cambia in tempo reale molto repentinamente chiediti se basterebbe per esempio memorizzarlo una volta al minuto (oppure il più alto o il più basso o l'ultimo ... dipende da cosa devi fare ...) e così riduci drasticamente ad un numero accettabile i cicli ...


Tutti gli orari sono GMT +2. Adesso sono le 15:06.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002