Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Come realizzare un trigger di schmitt software?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Come realizzare un trigger di schmitt software?

Messaggioda Foto Utenteedgar » 21 giu 2020, 21:15

Buongiorno a tutti,
Oggi, inseguendo l'idea di usare un piccolo micro per sostituire un comparatore analogico, risparmiando una serie di resistenze, trimmer e quant'altro, mi è sorto il dubbio su come realizzare una funzione trigger di schmitt via software usando l'ADC del micro. Sono un programmatore molto, ma molto limitato. Posso ipotizzare di stabilire una soglia inferiore e una superiore e un flag che mi indichi l'ultima soglia raggiunta che si aggiorni solo al raggiungimento della soglia opposta.
Sono fuori strada?
Grazie
Avatar utente
Foto Utenteedgar
6.477 3 5 8
Master
Master
 
Messaggi: 3283
Iscritto il: 15 set 2012, 22:59

0
voti

[2] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto UtenteMarcoD » 21 giu 2020, 21:54

Sei sulla strada quasi giusta.
Devi immedesimarti nella uscita:
se è bassa cosa la fa commutare in alta?
Se è alta quale evento la fa commutare in bassa?
E' facile
Avatar utente
Foto UtenteMarcoD
7.431 4 8 13
Master EY
Master EY
 
Messaggi: 3276
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[3] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto Utentegvee » 21 giu 2020, 22:47

La funzionalità che cerchi esiste e si chiama Analog Watchdog. Vedi p.e. gli ADC dei micro ST.

O_/
Avatar utente
Foto Utentegvee
720 2 6
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 11 feb 2018, 20:34

0
voti

[4] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto Utenteelfo » 21 giu 2020, 23:02

Prima di guardare il SW (i "very" programmatori ti hanno gia' risposto / ti risponderanno) guarda questo HW:

Domanda:

all'accensione (start up) quanto vale Vout?

(il triangolo e' un comparatore ideale la cui uscita puo' variare tra V+ e V- ; l'ingresso "-" e' "ancorato a 0 V tramite Ri)
Avatar utente
Foto Utenteelfo
3.599 2 5 7
Master
Master
 
Messaggi: 1539
Iscritto il: 15 lug 2016, 13:27

0
voti

[5] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto UtenteSandroCalligaro » 21 giu 2020, 23:26

gvee ha scritto:La funzionalità che cerchi esiste e si chiama Analog Watchdog. Vedi p.e. gli ADC dei micro ST.
Credo che Foto Utenteedgar cerchi un modo per implementare quella funzionalità senza una periferica dedicata, ma vediamo cosa dice lui. :-)

Io intanto gli faccio qualche domanda...
- Che banda ha il segnale da processare con il trigger? Ci metterai un filtro passa-basso prima dell'ingresso dell'ADC?
- Che precisione/risoluzione devono avere le soglie dell'isteresi?
- Quanto è il ritardo massimo (e la precisione di quel ritardo) che accetti tra il momento in cui la soglia viene oltrepassata e la variazione dell'uscita?
- Che micro (o che tipo di micro) vorresti usare?
Considera che alcuni micro hanno DAC e comparatori interni...

elfo ha scritto:all'accensione (start up) quanto vale Vout?
In un comparatore ideale, il problema è mal posto... :-)
Avatar utente
Foto UtenteSandroCalligaro
2.325 4 5
Master EY
Master EY
 
Messaggi: 979
Iscritto il: 6 ago 2015, 19:25

0
voti

[6] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto Utenteedgar » 21 giu 2020, 23:49

Non ho praticamente nessuna esigenza stretta di tempi, precisione e risoluzione, devo giusto far commutare un relè sopra i 15 volt con 1/1,5 volt di isteresi. Un opamp, 5/6 resistenze ed un transistor basterebbero.
Però ho un Attiny85 che giace da tempo nel cassetto, me la caverei con meno componenti e imparerei qualcosa.
Credo di aver capito il meccanismo, domani se ho tempo butto giù due righe.
Grazie per gli interventi
Avatar utente
Foto Utenteedgar
6.477 3 5 8
Master
Master
 
Messaggi: 3283
Iscritto il: 15 set 2012, 22:59

1
voti

[7] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto UtenteMarcoD » 22 giu 2020, 6:49

..provo a scrivere il codice nello pseudo C+ di arduino:

if( OUT == low)
{ if ( INPUT > soglialta){ OUT= high;} }
else
{ if ( INPUT < sogliabassa){ OUT= low;}}

sono anni che non programmo e forse non ricordo più la sintassi..

Divagazioni :-)

Puntualizzazione etimologica:
Schmitt negli anni 30 ? aveva inventato il circuito di un comparatore con isteresi con due triodi.
Il circuito è un amplificatore differenziale con reazione positiva, realizzato poi con transistor
e poi con un operazionale come indicato nel messaggio precedente.

Nel 1918 due inglesi Eccles e Jordan avevano brevettato o il circuito bistabile con due triodi, poi chiamato flip-flop chi sa perché ? In inglese flip-flp sono le ciabattine da spiaggia che a ogni passo battono sul tallone, producendo il suono onomatopeico?


O_/
Avatar utente
Foto UtenteMarcoD
7.431 4 8 13
Master EY
Master EY
 
Messaggi: 3276
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[8] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto Utenteedgar » 22 giu 2020, 10:48

MarcoD ha scritto:sono anni che non programmo e forse non ricordo più la sintassi..

Non ti preoccupare, tanto io programmo in Basic :mrgreen: :mrgreen:
In effetti è più o meno come lo avevo pensato.
Appena ho un attimo vedo come va.
Grazie
O_/
Avatar utente
Foto Utenteedgar
6.477 3 5 8
Master
Master
 
Messaggi: 3283
Iscritto il: 15 set 2012, 22:59

0
voti

[9] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto Utenteedgar » 22 giu 2020, 16:23

Alla fine mi ero impegolato in contorcimenti mentali inutili, bastavano le due righe banali
Codice: Seleziona tutto
If count >= Hi_limit then set Relay
If count <= Lo_limit then reset Relay

Grazie Foto UtenteMarcoD
Avatar utente
Foto Utenteedgar
6.477 3 5 8
Master
Master
 
Messaggi: 3283
Iscritto il: 15 set 2012, 22:59

0
voti

[10] Re: Come realizzare un trigger di schmitt software?

Messaggioda Foto UtenteSandroCalligaro » 22 giu 2020, 22:07

Rimane da impostare il valore iniziale di Relay, nel caso si sia tra le due soglie...
Ovviamente non c'è una scelta giusta né una sbagliata,in quel caso, ma si può fare, spesso, una scelta basata sull'applicazione (ad esempio, qual è la condizione più "sicura"?).

Una considerazione ovvia: Relay è l'uscita, ma è anche una variabile di stato (memoria), per cui deve "persistere" tra un'esecuzione e l'altra.

edgar ha scritto:Non ti preoccupare, tanto io programmo in Basic
E invece mi preoccupo io: come mai in Basic?! :D

PS: Foto UtenteMarcoD, il codice mi sembra giusto, anche se ci sono degli if non necessari (anzi, a pensarci bene dannosi, se la condizione iniziale dovesse essere impostata male).

Per convenzione, di solito, si usano le maiuscole per le costanti (#define) e le minuscole per le variabili.
Avatar utente
Foto UtenteSandroCalligaro
2.325 4 5
Master EY
Master EY
 
Messaggi: 979
Iscritto il: 6 ago 2015, 19:25

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite