analogComp, una libreria per gestire il comparatore analogico

minc, sembri uno delle Poste e Telegrafi :stuck_out_tongue_closed_eyes:
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 :sweat_smile:
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 :wink:

Testato:
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

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.

#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; 
}

@Testato:
ho aggiornato la lib, la versione 1.0.1 compila senza errori su Atmega8 (Arduino NG)
http://www.leonardomiliani.com/?p=630

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

Testato:
cosi' presto ?
diavolo, ora devo per forza fare l'altro test promesso :stuck_out_tongue_closed_eyes:

:stuck_out_tongue:

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 :sweat_smile:

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?

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.

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.

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

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.

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.

Il forum consente solo allegati in formato pdf, immagine e compressi, non posso allegare file normali.

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

ricevuta e verificata, grazie :slight_smile: ma ormai sono a casa, la provo la prossima volta.

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.

x iscrizione

Interessante libreria. Grazie Leo.

PaoloP:
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.

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?