Arduino Forum

International => Italiano => Megatopic => Topic started by: leo72 on Nov 03, 2012, 07:30 pm

Title: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 03, 2012, 07:30 pm
Oggi vi presento analogComp, una libreria che potete usare per gestire il comparatore analogico integrato nei microcontrollori Atmel. Un comparatore analogico è sostanzialmente un amplificatore operazionale utilizzato in modalità comparatore di tensione che imposta su High la sua uscita quando la tensione presente sull'ingresso non invertente supera quella presente sull'ingresso invertente. Gli ingressi possono essere due pin esterni ai quali far pervenire le tensioni da comparare.

La libreria, che supporta una buona quantità di chip, permette sia di gestire una singola comparazione sia di richiamare una funzione tramite un interrupt ogni qual volta si manifesta una particolare condizione.

Metodi ed utilizzo

Come al solito, scaricate il pacchetto presente nell'articolo linkato info a questo post e scompattatelo, fatto questo copiate la cartella /analogComp che avete ottenuto all'interno della cartella /libraries contenuta nella vostra cartella degli sketch.

Per poter utilizzare la libreria, dovete prima includerla con

Code: [Select]
#include "analogComp.h"

Adesso potete impostare ciò che deve essere connesso agli ingressi invertente (AIN-) e non invertente (AIN+) del comparatore analogico. Generalmente, AIN+ è connesso al piedino AIN0 ed AIN- è connesso al piedino AIN1. Per sapere a quali pin corrispondono AIN0 e AIN1 fate riferimento alla mappatura dei pin del microcontrollore in uso. Per l'Atmega328, quindi per l'Arduino UNO, il pin AIN0 è il pin D6 mentre AIN1 è il pin D7.AIN+ può essere anche connesso alla tensione di riferimento interna (1,1V) mentre AIN- può anche essere connesso ad uno degli ingressi analogici del microcontrollore (vedi "Microcontrollori supportati" per alcune limitazioni specifiche).

Per scegliere gli ingressi del comparatore analogico si usa il metodo setOn():

Code: [Select]
analogComparator.setOn(AIN+, AIN-);

Le scelte per AIN+ sono le seguenti:


Per AIN- potete scegliere fra le seguenti voci:



AIN+ e AIN- sono opzionali, nel caso in cui non fossero passati verranno selezionati AIN0 e AIN1.

Si può attivare un interrupt in modo che esso esegua una routine al verificarsi di un evento:

Code: [Select]
analogComparator.enableInterrupt(miaFunzione[, evento]);

miaFunzione è la funzione che deve essere chiamata quando si verifica l'evento. evento può essere:



evento è opzionale, se non è specificato viene scelto CHANGE di default.

Si può anche disabilitare un interrupt precedentemente attivato:

Code: [Select]
analogComparator.disableInterrupt();

Si può anche attendere per un certo tempo che si verifichi la condizione che AIN+ diventi maggiore di AIN-:

Code: [Select]
analogComparator.waitComp([timeout]);

timeout è opzionale e rappresenta il numero di millisecondi da aspettare prima di ritornare al punto di chiamata (il valore di default è 5000). Questo metodo restituisce false (0) se la tensione su AIN- rimane maggiore di quella presente su AIN+ per tutto il periodo indicato da timeout; restituisce true (1) se AIN+ diventa maggiore di AIN- durante l'intervallo specificato.

Se il comparatore analogico non è stato impostato prima di chiamare il metodo waitComp, di default la liberia imposta come ingressi AIN0 e AIN1.

Per spengere il comparatore analogico e disattivare l'eventuale interrupt basta chiamare il metodo setOff():

Code: [Select]
analogComparator.setOff();

Microcontrollori supportati

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

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

Limitazioni specifiche



L'articolo aggiornato e l'ultima versione della libreria è disponibile qui:
http://www.leonardomiliani.com/?p=630

Si attendono commenti, critiche e scoperte di bug  ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 03, 2012, 07:47 pm
Ottimo Leo, come sempre, se dovesse servire questa specifica funzione in un circuito si risparmia un operazionale. Domanda: qual'è la tensione minima applicabile ad AIN+?
Sto lavorando con segnali che spaziano tra 100 e 600mV, ma che in alcuni casi possono arrivare a 5V; secondo te posso applicare una tensione di 90mV su AIN+ ed impostare come azione che un pin vada su HIGH ogni volta che su AIN- ho un valore >=100mV?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: lestofante on Nov 03, 2012, 10:43 pm
Code: [Select]
analogComparato.setOff();
typo?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 03, 2012, 10:51 pm
@Mike:
Il datasheet riporta pochi dati, ma penso che il range sia comunque quello dell'Atmega, ossia 0-5V. Il datasheet poi riporta la tensione di offset (10 mV).
Sul fatto di poter attivare un led non ci sono problemi, l'esempio allegato fa proprio questo.

@lesto:
sì, manca una "r", ora la aggiungo  :smiley-sweat:
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 03, 2012, 11:02 pm

@Mike:
Il datasheet riporta pochi dati, ma penso che il range sia comunque quello dell'Atmega, ossia 0-5V. Il datasheet poi riporta la tensione di offset (10 mV).
Sul fatto di poter attivare un led non ci sono problemi, l'esempio allegato fa proprio questo.

io non ho parlato di LED, non mi serve, comunque ok :D
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 12:36 am

io non ho parlato di LED, non mi serve, comunque ok :D

Scusa, stavo pensando all'esempio che ti citavo, che accende un led per un istante. Ovviamente equivale a mettere High un pin  ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 11:33 am
Qualcuno l'ha provata?  :smiley-sweat:
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 04, 2012, 11:46 am
Test1:
Non superato
Compatibilita' dichiarata con Atmega8 non superata.

Protocollo di test:
Win7-64bit
IDE: Arduino 1.0.1
Board: Arduino NG (board ufficiale presente in Tools-Board)

Argomentazioni:
Non e' necessario avere fisicamente la board in questione in quanto l'errore appare in fase di compilazione.
Code: [Select]
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp: In member function 'uint8_t analogComp::setOn(uint8_t, uint8_t)':
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:52: error: 'ADCSRB' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:54: error: 'ADCSRB' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:56: error: 'DIDR1' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:56: error: 'AIN1D' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:56: error: 'AIN0D' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp: In member function 'void analogComp::setOff()':
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:109: error: 'DIDR1' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:109: error: 'AIN1D' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:109: error: 'AIN0D' was not declared in this scope
D:\arduino-1.0.1\libraries\analogComp\analogComp.cpp:110: error: 'ADCSRB' was not declared in this scope



Si procedera' a test reali su Atmega8A successivamente

Tanto era dovuto,
porgo distinti saluti.


Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 12:43 pm
minc, sembri uno delle Poste e Telegrafi :smiley-yell:
Leuccio, sono alle prese con un migliaio di prove da fare al laboratorio, se riesco ad arrivare a milleuna ci metto pure la tua lib; se vuoi agevolarmi preparami un mini-sketch semplice semplice con cui io possa applicare ad un pin una tensione di riferimento fissa, all'altro pin il segnale variabile e sul terzo pin possa tirare fuori una bella onda quadra a 5V costruita così: la parte LOW quando il segnale di misura è sotto livello, la parte HIGH quando il segnale di misura è sopra livello.
Per le prove userò Arduino, alle 14 vado al lab ed inizio le altre prove importanti, ma tengo sott'occhio il Forum, se riesci a scrivermi le righe vedo di buttarle su Arduino e provarle al volo :smiley-sweat:
Scusa, non è per pappa pronta, anche perché sei stato chiarissimo, come sempre, nella spiegazione, ma è proprio che non ho un secondo di tempo. In cambio ti posto le foto del DSO ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 04:02 pm

Tanto era dovuto,
porgo distinti saluti.


La ringraziamo per il Suo interessamento al nostro prodotto e, nel salutarLa, Le porgiamo i nostri più Distinti Saluti.

Leonardo Miliani
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 04:16 pm

minc, sembri uno delle Poste e Telegrafi :smiley-yell:
Leuccio, sono alle prese con un migliaio di prove da fare al laboratorio, se riesco ad arrivare a milleuna ci metto pure la tua lib; se vuoi agevolarmi preparami un mini-sketch semplice semplice con cui io possa applicare ad un pin una tensione di riferimento fissa, all'altro pin il segnale variabile e sul terzo pin possa tirare fuori una bella onda quadra a 5V costruita così: la parte LOW quando il segnale di misura è sotto livello, la parte HIGH quando il segnale di misura è sopra livello.
Per le prove userò Arduino, alle 14 vado al lab ed inizio le altre prove importanti, ma tengo sott'occhio il Forum, se riesci a scrivermi le righe vedo di buttarle su Arduino e provarle al volo :smiley-sweat:
Scusa, non è per pappa pronta, anche perché sei stato chiarissimo, come sempre, nella spiegazione, ma è proprio che non ho un secondo di tempo. In cambio ti posto le foto del DSO ;)

Prima di passarti il codice vorrei chiarirti però che si può agganciare 1 solo interrupt al comparatore analogico per cui si può misurare un solo evento, CHANGE, RISING o FALLING. Quindi quando la situazione tra AIN+ e AIN- cambia (sia che AIN+ diventi maggiore di AIN- che viceversa), che AIN+ diventi maggiore di AIN- oppure che AIN+ diventi minore di AIN-.
Quindi per far accendere un led a seconda che AIN+ sia maggiore o minore di AIN- servirebbero 2 interrupt, uno per monitorare l'evento RISING ed uno per monitorare l'evento FALLING.
Si può provare ad ovviare usando l'evento CHANGE, cambiando di stato ad una variabile ogni volta che la comparazione fra i 2 ingressi cambia.

Code: [Select]
#include "analogComp.h"

const byte OUTPUT_PIN = 9;
byte pinSignal = 0;

void setup() {
    pinMode(OUTPUT_PIN, OUTPUT);
    analogComparator.setOn(AIN0, AIN1); //metti su D7 la tensione di riferimento e su D6 la tensione da comparare
    analogComparator.enableInterrupt(changeStatus, CHANGE);
}

void loop() {
    digitalWrite(OUTPUT_PIN, pinSignal);
    delay(200);
}

//interrupt
void changeStatus() {
    pinSignal ^= 1;
}

Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 05:38 pm
@Testato:
ho aggiornato la lib, la versione 1.0.1 compila senza errori su Atmega8 (Arduino NG)
http://www.leonardomiliani.com/?p=630
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 04, 2012, 05:39 pm
cosi' presto ?
diavolo, ora devo per forza fare l'altro test promesso  :smiley-yell:
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 05:58 pm

cosi' presto ?
diavolo, ora devo per forza fare l'altro test promesso  :smiley-yell:


:P

Ho anche perso tempo perché la toolchain aggiornata che sto usando mi ha sollevato un errore su alcune costanti di vettori di interrupt deprecati che ci sono nel file HardwareSerial.cpp e che ho dovuto sistemare prima di poter sistemare poi gli errori che mi avevi segnalato  :smiley-sweat:
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 06:33 pm
Io devo fare un test di sostituzione del tipico op amp usato come squadratore, quindi ad un ingresso metto la tensione di soglia, all'altro applico un segnale sinusoidale a frequenza ed ampiezza variabile, mi aspetto sull'uscita un bel segnale digitale a 5V, non è questo che fa la tua libreria?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 06:50 pm
La mia libreria si limita a dare all'utente gli strumenti per gestire il comparatore analogico, il comparatore ha delle funzionalità limitate soprattutto nella gestione degli eventi.
Quanto ho pubblicato dovrebbe fare al caso tuo, sempre che non si parli di frequenze non gestibili dall'Atmega e dal core di Arduino.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 07:20 pm
Ovviamente no, siamo massimo a 5-6MHz, vediamo se riesco a fare la prova. A dopo
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: astrobeed on Nov 04, 2012, 07:32 pm

Ovviamente no, siamo massimo a 5-6MHz, vediamo se riesco a fare la prova. A dopo


Attenzione che il comparatore degli ATmega è si più veloce del ADC, ma non arriva a valori elevati di frequenza, se non mi ricordo male siamo a poco meno di 1 MHz.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 07:34 pm
Leo mi dà errore il download, il download mi scarica una cartella compressa analogComp-1.0.0.zip, se la apro con zip mi dà errore se la rinomino in rar mi estrae un file analogComp-1.0.0 senza estensione, anche rinominandolo analogComp.h, mettendolo in una cartella analogComp in libraries la compilazione mi dà errore proprio per la lib, che succede?

Per la frequenza se è così non serve ai miei scopi ma ormai la prova la faccio lo stesso
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: astrobeed on Nov 04, 2012, 07:45 pm

Leo mi dà errore il download, il download mi scarica una cartella compressa analogComp-1.0.0.zip, se la apro con zip


Ho provato a scaricarla, la scompatto con winrar e ottengo la directory, con dentro i vari file, da inserire nelle librerie, mi compila senza problemi i due esempi allegati.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 07:47 pm
niente da fare a me tira fuori una cartella con un file aventi i nomi che ho detto, puoi gentilmente appenderla qui scompattata?
Fa niente, ormai devo andare via, bisogna approfondire questa cosa della frequenza.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: astrobeed on Nov 04, 2012, 07:56 pm

puoi gentilmente appenderla qui scompattata?


Il forum consente solo allegati in formato pdf, immagine e compressi, non posso allegare file normali.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 04, 2012, 08:43 pm
mike, te l'ho spedita via mail, anche per me non ci sono rpoblemi di download.

Leo hai dimenticato di rinominare il file .zip, si chiama ancora 1.0.0
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 04, 2012, 09:08 pm
ricevuta e verificata, grazie :) ma ormai sono a casa, la provo la prossima volta.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 04, 2012, 10:04 pm
E' da ieri che sto avendo dei problemi di rallentamento con il server che ospita il mio sito. Presumo che, essendo negli USA, da loro ci sia molta congestione del traffico per le imminenti elezioni.

EDIT:
il file era marcato ancora come 1.0.0 ma in realtà era già la versione 1.0.1. Comunque per scrupolo ho ricontrollato ed il download funziona correttamente.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: PaoloP on Nov 04, 2012, 10:21 pm
x iscrizione
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: erpomata on Nov 05, 2012, 05:55 am
Interessante libreria. Grazie Leo.



x iscrizione


Vorrei segnalare che non c'è bisogno di aggiungere un post per ricevere gli aggiornamenti. C'è il bellissimo tasto "Notify", a fianco di "Reply" che fa esattamente quello che si farebbe aggiungendo un post, senza aggiungerlo ovviamente.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: dab77 on Nov 05, 2012, 09:16 am
Leo sei una fornace di idee!
Complimenti, bella libreria.

@ erpomata, mi pare che alcuni usano scrivere un post, in modo da ritrovarselo nella lista dei topic risposti... comunque meglio scrivere almeno un "Grazie Leo, ti seguo!" piuttosto di un freddo "x iscrizione", non trovi Paolo?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: erpomata on Nov 05, 2012, 09:19 am
@dab77
Si sono pienamente d'accordo  con te, ma il pulsante fa esattamente questo.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: lestofante on Nov 05, 2012, 10:28 am
allora è una modifica nuova, prima inviava una mail ad ogni risposta
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: erpomata on Nov 05, 2012, 10:28 am
Perchè scusa "x iscrizione" cosa fa?
Allora non ho capito.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: lestofante on Nov 05, 2012, 10:33 am
non ti arriva la mail ad ogni risposta, ma se clicchi in lto a destra su "replies" ti compare l'elenco delle discussioni a cui hai scritto almeno un messaggio e che hanno ricevuto nuovi messaggi dall'utima volta che hai letto la discussione.
In pratica ti avvisa delle risposte senza inondarti di e-mail
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: PaoloP on Nov 05, 2012, 11:39 am
esatto.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: erpomata on Nov 05, 2012, 11:46 am
Allora scusate non la sapevo questa cosa.
Io ho sempre fatto come ho detto.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 05, 2012, 02:21 pm

Interessante libreria. Grazie Leo.

Grazie  ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 05, 2012, 02:22 pm

Leo sei una fornace di idee!
Complimenti, bella libreria.

Cerco di aiutare dove posso, siccome lato software sono più a mio agio, contribuisco alla comunità in questo modo  XD
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: Madwriter on Nov 05, 2012, 05:08 pm
"Grazie Leo, ti seguo!"
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: brainbooster on Nov 07, 2012, 10:06 am
Leo che impedenza in entrata ha il comparatore del 328?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 07, 2012, 10:30 am

Leo che impedenza in entrata ha il comparatore del 328?

Non lo so, non ho trovato il dato sul datasheet.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 07, 2012, 11:09 am
Leo, ti avevo promesso le prove ma ho dovuto mandare il DSO in assistenza per una verifica. Ieri sera sono passato un paio d'ore al lab ed ho implementato nel mio Capacimetro il cambio portata automatico, la prossima volta metto l'autoreset, vorrei saper programmare quanto so maneggiare le logiche TTL/CMOS :)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 07, 2012, 11:27 am

Leo, ti avevo promesso le prove ma ho dovuto mandare il DSO in assistenza per una verifica. Ieri sera sono passato un paio d'ore al lab ed ho implementato nel mio Capacimetro il cambio portata automatico, la prossima volta metto l'autoreset, vorrei saper programmare quanto so maneggiare le logiche TTL/CMOS :)

Ed io vorrei capirci di elettronica quanto so programmare  ;)
L'erba del vicino è sempre più verde, mettiamola così  XD
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Nov 07, 2012, 11:42 am
basta togliere la siepe e fare un giardino unico  :) ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 07, 2012, 02:24 pm

basta togliere la siepe e fare un giardino unico  :) ;)

Tu mi capisci  ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 07, 2012, 07:43 pm


Leo che impedenza in entrata ha il comparatore del 328?

Non lo so, non ho trovato il dato sul datasheet.

Credo non ci sia perche' dipende da quali ingressi si usano.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 07, 2012, 10:33 pm



Leo che impedenza in entrata ha il comparatore del 328?

Non lo so, non ho trovato il dato sul datasheet.

Credo non ci sia perche' dipende da quali ingressi si usano.

Ma internamente c'è sempre e comunque un op-amp, questo avrà delle caratteristiche tecniche, no?  ;)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 07, 2012, 10:45 pm
certo, ma non potendo accedere direttamente ai pin di ingresso del componente, l'impedenza di ingresso sara' influenzata dai pin e dalla configurazione che usi. Se connetti i pin del componente agli Analogpin avrai una certa impedenza di ingresso, se ci attivi la pullup cambiera', se scegli l'aref come pin sara' ancora diverso
Cioe' se anche volendo si puo' indicare il valore richiesto, il componente pero' e' chiuso in una scatola che e' raggiungibile solo attraverso altri componenti. E' un dato inutile da dare secondo me
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 07, 2012, 10:50 pm
Ho capito cosa vuoi dire.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: brainbooster on Nov 08, 2012, 07:46 am
Testato, non condivido quello che dici, perchè al massimo l'impedenza di entrata di un opamp usato come comparatore analogico è il  punto dipartenza dei calcoli necessari alla progettazione della rete esterna di polarizzazione e delle correnti in gioco no?
perchè dici che è un dato inutile?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Nov 08, 2012, 10:14 pm
non sto' dicendo che e' inutile dare questo valore per un OAmp in generale, ma per un Oamp che e' "nascosto" dietro ad altri ingressi diventa un dato fuorviante.
Il nostro OA non ha accesso diretto a due pin esterni, ma arriva all'esterno tramite diversi pin, a scelta del programmatore, i quali pin avranno proprie caratteristiche. A questo punto si dovrebbe dare l'impedenza di ingresso di ogni modalita' di connessione, perche' di certo se usi Aref come pin Rispetto ad A0, ci sara' un'impedenza diversa

Tu come la vedi ?  (cit.: Quelo) :)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: brainbooster on Nov 09, 2012, 09:14 am
Credo che sia giusto quello che dici, ma alla fine puoi giocare con uno solo dei due ain che può essere connesso ad aref oppure ad uno qualsiasi degli ingressi multiplexati dall'adc (sbaglio Leo?) quindi le impedenze  da conoscere sarebbero due.
Considerazione  collaterale...
ma se l'impedenza è diversa a seconda del collegamento,avremo misure differenti usando pin differenti?!
c'è grossa crisi (cit.: Quelo) smiley
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Nov 09, 2012, 09:22 am

Credo che sia giusto quello che dici, ma alla fine puoi giocare con uno solo dei due ain che può essere connesso ad aref oppure ad uno qualsiasi degli ingressi multiplexati dall'adc (sbaglio Leo?) quindi le impedenze  da conoscere sarebbero due.

AIN+ si può collegare sia al pin AIN0 che alla tensione interna di riferimento, mentre AIN- si può collegare sia al pin AIN1 sia ad uno degli ingressi analogici (non AREF).
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 04, 2013, 02:03 pm
Compilando per ATTiny85

Code: [Select]

In file included from C:\arduino-1.0.3\hardware\tiny\cores\tiny/Stream.h:24,
                from C:\arduino-1.0.3\hardware\tiny\cores\tiny/TinyDebugSerial.h:31,
                from C:\arduino-1.0.3\hardware\tiny\cores\tiny/WProgram.h:18,
                from C:\arduino-1.0.3\hardware\tiny\cores\tiny/Arduino.h:4,
                from C:\arduino-1.0.3\libraries\analogComp\/analogComp.h:32,
                from C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp:7:
C:\arduino-1.0.3\hardware\tiny\cores\tiny/Print.h:37:1: warning: "BIN" redefined
In file included from c:/arduino-1.0.3/hardware/tools/avr/lib/gcc/../../avr/include/avr/iotn85.h:38,
                from c:/arduino-1.0.3/hardware/tools/avr/lib/gcc/../../avr/include/avr/io.h:284,
                from c:/arduino-1.0.3/hardware/tools/avr/lib/gcc/../../avr/include/avr/interrupt.h:38,
                from C:\arduino-1.0.3\hardware\tiny\cores\tiny/WProgram.h:8,
                from C:\arduino-1.0.3\hardware\tiny\cores\tiny/Arduino.h:4,
                from C:\arduino-1.0.3\libraries\analogComp\/analogComp.h:32,
                from C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp:7:
c:/arduino-1.0.3/hardware/tools/avr/lib/gcc/../../avr/include/avr/iotnx5.h:55:1: warning: this is the location of the previous definition
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp: In member function 'uint8_t analogComp::setOn(uint8_t, uint8_t)':
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp:57: error: 'DIDR1' was not declared in this scope
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp: In member function 'void analogComp::setOff()':
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp:112: error: 'DIDR1' was not declared in this scope
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp: At global scope:
C:\arduino-1.0.3\libraries\analogComp\analogComp.cpp:159: warning: 'ANALOG_COMP_vect' appears to be a misspelled signal handler


E' previsto un aggiornamento della libreria per correggere questo errore che previene la compilazione?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Mar 04, 2013, 03:01 pm
Ora verifico...
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Mar 04, 2013, 03:45 pm
Ho scritto un controllo troppo semplicistico relativamente alla parte in cui provvedo a disattivare gli input digitali sui pin AIN0/1 quando vengono usati come ingressi per il comparatore.
Ho corretto mettendo un check più complesso.

Però ho trovato un altro problemino, appena ho terminato la correzione metto online la nuova versione.

EDIT.
è online la versione 1.1.0
provala e fammi sapere, non ho potuto verificarla in pratica se sulla Tiny85 funziona (la compilazione comunque va) perché non ho possibilità di farlo.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 05, 2013, 10:08 am
Ti ringrazio, appena posso la provo sul Tiny85, per il momento ha compilato con successo
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 08, 2013, 01:18 am
Col seguente codice

Code: [Select]
 analogComparator.setOn(INTERNAL_REFERENCE, A3);
 analogComparator.enableInterrupt(MiaFunzione);


Purtroppo sembra non chiamare MiaFunzione..
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Mar 08, 2013, 11:00 am

Col seguente codice

Code: [Select]
  analogComparator.setOn(INTERNAL_REFERENCE, A3);
  analogComparator.enableInterrupt(MiaFunzione);


Al metodo enableInterrupt devi passare sia la funzione da attivare sia il tipo di confronto:
Esempio:
Code: [Select]
analogComparator.enableInterrupt(MiaFunzione, CHANGE);
Puoi usare anche FALLING o RISING
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 08, 2013, 11:32 am
Se non specificato di default viene passato CHANGE
Comunque ho già provato ma sembra non chiamare mai la funzione.. deve esserci qualcos'altro che non va mi sa..
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 08, 2013, 12:17 pm
Per capirci qualcosa ho scritto un semplice codice per utilizzare direttamente il comparatore ma.. cambiando il pin PB0 e PB1 non viene chiamato l'interrupt con il simulatore di atmel studio, puoi darmi qualche dritta?

Code: [Select]

#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

volatile int x = 0;
ISR(ANA_COMP_vect)
{
x--;
if (bit_is_set(ACSR, ACO))       //Check for rising or falling edge
{
PORTB |= _BV(PB4); // Turn led on
}
else
{
PORTB &= ~(_BV(PB4)); // Turn led off
}
}
int main(void)
{
// ACSR (Analog Comparator Setting Register)
// ACIE (Analog Comparator Interrupt Enable)
ACSR |= _BV(ACIE);
DDRB |= _BV(PB4); // PB4 output

sei(); // Enable global interrupt

   while(1)
   {
x++;
   }
}


EDIT: Avevo provato analogComp su un device fisico, il problema col mio codice penso sia legato al simulatore che non emula bene la periferica
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: tazzo on Mar 08, 2013, 02:05 pm
Maledetto simulatore! Su un device reale il semplice codice funziona  ]:D

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 http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html (http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html)  ;)

Se vuoi sistemarla la modifica è immediata

Ciao
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Mar 08, 2013, 03:26 pm

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).
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: DanRek on Dec 02, 2013, 12:45 pm


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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: lestofante on Dec 02, 2013, 10:00 pm
assolutamente no, il chip è troppo differente, a meno che leo non si sia preso una due la vedo dura
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Dec 03, 2013, 08:48 am
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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: DanRek on Dec 03, 2013, 09:51 am

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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Dec 03, 2013, 10:41 am
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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: DanRek on Dec 03, 2013, 08:03 pm
Grazie mille!
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: DanRek on Dec 03, 2013, 08:06 pm
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?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Dec 03, 2013, 10:01 pm
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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: DanRek on Dec 03, 2013, 11:05 pm
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  :)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Dec 03, 2013, 11:17 pm
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  :)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: nid69ita on Dec 31, 2013, 12:56 pm

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à ?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Jan 02, 2014, 10:42 am
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.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: nid69ita on Jan 02, 2014, 11:39 am

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?
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Jan 02, 2014, 11:52 am
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
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: nid69ita on Jan 02, 2014, 12:13 pm
ok, grazie, non ci avevo pensato!! In elettronica sono ancora una capra  :smiley-red:
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Jan 02, 2014, 12:54 pm
figurati, mai quanto me con il sw  :)
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: leo72 on Jan 02, 2014, 02:35 pm

un partitore che a partire dalla tensione di alimentazione ti crea il riferimento di 1,3V

Serve però una tensione bella stabile perché l'AC interno è sensibile, se ti fluttua l'alimentazione, ti fluttua anche il riferimento e quindi anche l'intervento dell'AC stesso. Meglio nei casi in cui serve precisione usare il riferimento interno a 1,1V oppure un riferimento esterno fatto da un integrato atto allo scopo.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: testato on Jan 02, 2014, 02:37 pm
in questo caso dove si parla di batteria, di valori di decimi di Volt da monitorare, grandezza enorme, il semplice regolatore della uno va piu' che bene
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: gpb01 on Jan 02, 2014, 02:41 pm

... oppure un riferimento esterno fatto da un integrato atto allo scopo.


Suggerisco il MAX6043 (http://datasheets.maximintegrated.com/en/ds/MAX6043.pdf) ... costa poco e mi sembra molto adatto (visto i valori di tensione disponibili) all'uso con Arduino ;)

Guglielmo
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: menniti on Jan 02, 2014, 02:47 pm
Attenzione minima anche al riferimento di tensione interna, ha una tolleranza verificata con strumentazione idonea di ±0,02V, quindi può variare nel range 1,08÷1,12V. La variazione dipende dalla tolleranza del regolatore interno ed è indipendente dall'alimentazione esterna, per cui è stabile per ogni micro, quindi è sufficiente misurare una tantum il valore preciso sull'Aref e tenerne conto nelle formule di conversione.
Title: Re: analogComp, una libreria per gestire il comparatore analogico
Post by: nid69ita on Jan 02, 2014, 03:26 pm


... oppure un riferimento esterno fatto da un integrato atto allo scopo.

Suggerisco il MAX6043 (http://datasheets.maximintegrated.com/en/ds/MAX6043.pdf) ... costa poco e mi sembra molto adatto (visto i valori di tensione disponibili) all'uso con Arduino ;)
Guglielmo

Grazie, @Guglielmo.  E' un IC per smd vero? Sai se c'e' qualcosa in DIP ?

EDIT: forse questo, sempre maxim, REF03GP   input da 4.5V a 18V  e in uscita 2.5V ±0.6%