Go Down

Topic: analogComp, una libreria per gestire il comparatore analogico (Read 11 times) previous topic - next topic

leo72


Se non specificato di default viene passato CHANGE

Che vergogna, non ricordarsi neanche cosa fanno le proprie librerie  :smiley-sweat: :smiley-sweat:
E' vero, di default prende CHANGE  ;)


Il problema nella libreria è l'ISR che è chiamata sui Tiny e su altri micro ANA_COMP_vect mentre nell'ATmega328P ed in altri è chiamata ANALOG_COMP_vect

Grazie della segnalazione. Ho corretto il codice, adesso seleziona il vettore in base al micro.
Il file cpp corretto te lo allego qui sotto. Poi metterò tutto online sul mio sito (ho l'host in manutenzione).

DanRek



Attualmente la libreria lavora con una buona quantità di microcontrollori Atmel e schede Arduino:

  • Attiny2313/4313

  • Attiny24/44/84

  • Attiny25/45/85

  • Atmega344/644/1284

  • Atmega8

  • Atmega48/88/168/328 (Arduino UNO)

  • Atmega640/1280/1281/2560/2561 (Arduino MEGA)

  • Atmega32U4* (Arduino Leonardo)


*il supporto di alcuni di essi è solo "su carta", vanno materialmente provati

Limitazioni specifiche


  • Attiny2313/4313: a causa del fatto che queste MCU non hanno un ADC integrato, per AIN- è possibile selezionare solo AIN1

  • Atmega32U4: l'AIN- dell'Atmega32U4 può essere connesso solo ad un ingresso analogico a causa del fatto che esso non ha un pin AIN1.






Scusa, che tu sappia, questa libreria è supportata anche dal Atmel SAM3X8E ARM Cortex-M3 di Arduino Due? Grazie.

lesto

assolutamente no, il chip è troppo differente, a meno che leo non si sia preso una due la vedo dura
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

La Due ce l'ho ma non ho portato la lib per il Sam3x per il semplice fatto che questo chip non ha un comparatore analogico integrato.

DanRek


La Due ce l'ho ma non ho portato la lib per il Sam3x per il semplice fatto che questo chip non ha un comparatore analogico integrato.

Ah ok grazie ... Premetto che sono alle prime armi ... ma per la mia tesi avrei bisogno di sapere se per realizzare il comparatore analogico mi basta introdurre qualche 'if' nello sketch, oppure se c'è un modo più efficiente ... Grazie ancora.

leo72

Il comparatore è un vero e proprio amplificatore operazionale integrato in alcuni chip. Quasi tutti gli AVR8 ce l'hanno.
In pratica è l'op-amp stesso che fa il lavoro, tu a livello di codice non devi far altro che gestire l'interrupt che genera l'op-amp quando si verifica la condizione impostata.

Puoi anche realizzarlo a livello software, usando un ingresso analogico ed una routine che controlla periodicamente se il valore dell'ingresso è superiore o inferiore ad una predeterminata soglia ma non avrai mai la precisione di un op-amp né la stessa velocità (una lettura analogica è lenta). Potresti replicare la funzione usando un op-amp esterno con uscita collegata ad un pin interrupt del chip, in modo che se l'op-amp "scatta" ti attiva l'interrupt, che intercetti da codice.


DanRek

Scusa una cosa però ... Dato che quello che mi serve è l'integrazione stessa di un multivibratore astabile, se devo utilizzare dei comparatori esterni è inutile comprare Arduino Due ... o sbaglio?

leo72

Quello che stai facendo lo sai tu, mica posso leggerti nel pensiero  ;)
Perciò non so se la Due ti serve per un qualche motivo oppure no.

DanRek

XD Certo  :D ... Difatti la mia era una sorta di richiesta di conferma sull'utilizzo di Arduino Due per l'integrazione di un multivibratojavascript:void(0);re astabile  :)

Testato

la questione non e' "la uno, la due o la tre", la questione e' se un implementazione sw, con tutte le lentezze che ne derivano, basta per la tua applicazione
e questo lo puoi sapere solo tu  :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

nid69ita


Il comparatore è un vero e proprio amplificatore operazionale integrato in alcuni chip. Quasi tutti gli AVR8 ce l'hanno.
In pratica è l'op-amp stesso che fa il lavoro, tu a livello di codice non devi far altro che gestire l'interrupt che genera l'op-amp quando si verifica la condizione impostata.
Puoi anche realizzarlo a livello software, usando un ingresso analogico ed una routine che controlla periodicamente se il valore dell'ingresso è superiore o inferiore ad una predeterminata soglia ma non avrai mai la precisione di un op-amp né la stessa velocità (una lettura analogica è lenta). Potresti replicare la funzione usando un op-amp esterno con uscita collegata ad un pin interrupt del chip, in modo che se l'op-amp "scatta" ti attiva l'interrupt, che intercetti da codice.


Forse non ho letto bene qui nel thread e sul manuale Atmel 328.
Mi pare di aver letto che se per AIN-  si utilizza un pin analogico, allora l'ADC non può essere utilizzato, viene disabilitato. Dico una bestialità ?
my name is IGOR, not AIGOR

leo72

Sì, è giusto.
Se attivi uno degli ingressi dell'ADC come pin AIN-, l'ADC viene disattivato.
Ma non è obbligatorio usare un pin analogico come ingresso invertente, il 328 ha uno specifico pin denominato AIN1, che è il piedino PD7, basta attaccare la tensione lì e l'ADC non viene toccato.

nid69ita


Sì, è giusto.
Se attivi uno degli ingressi dell'ADC come pin AIN-, l'ADC viene disattivato.
Ma non è obbligatorio usare un pin analogico come ingresso invertente, il 328 ha uno specifico pin denominato AIN1, che è il piedino PD7, basta attaccare la tensione lì e l'ADC non viene toccato.


Grazie per la risposta.
In un altro topic ti ho posto una domanda, posso riproporla qui?
Scusa l'ignoranza, ho letto anche il datasheet del 328 ma c'e' solo una paginetta.
Non mi è chiaro. In quel caso proponi ad un utente di usare il comparatore per verificare se una pila da 1,5V scende sotto i 1,3V (almeno questo vuole fare l'utente).
Perciò in AIN1 (AIN-) colleghi il positivo della pila e in AIN+ a cosa lo colleghi per avere un riferimento?  Se AIN+ è analog_reference okay ma è solo a 1,1V giusto?
my name is IGOR, not AIGOR

Testato

ma la pila e' un elemento da controllare esterno o e' l'alimentazione stessa ?
se e' un componente esterno, cioe' ad esempio se il tizzio vuole fare un tester di batterie, su un capo del comparatore metti la batteria da misurare e sull'altro un partitore che a partire dalla tensione di alimentazione ti crea il riferimento di 1,3V
Vedilo come un normale OAmp
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up