Go Down

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

Testato

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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72


BrainBooster

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?

Testato

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) :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

BrainBooster

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

leo72


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).

flz47655

#51
Mar 04, 2013, 02:03 pm Last Edit: Mar 04, 2013, 02:13 pm by flz47655 Reason: 1
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?


leo72

#53
Mar 04, 2013, 03:45 pm Last Edit: Mar 04, 2013, 04:02 pm by leo72 Reason: 1
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.

flz47655

Ti ringrazio, appena posso la provo sul Tiny85, per il momento ha compilato con successo

flz47655

#55
Mar 08, 2013, 01:18 am Last Edit: Mar 08, 2013, 01:22 am by flz47655 Reason: 1
Col seguente codice

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


Purtroppo sembra non chiamare MiaFunzione..

leo72


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

flz47655

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

flz47655

#58
Mar 08, 2013, 12:17 pm Last Edit: Mar 08, 2013, 01:39 pm by flz47655 Reason: 1
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

flz47655

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  ;)

Se vuoi sistemarla la modifica è immediata

Ciao

Go Up