Pages: 1 2 3 [4] 5 6   Go Down
Author Topic: analogComp, una libreria per gestire il comparatore analogico  (Read 7781 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21668
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho capito cosa vuoi dire.
Logged


Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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) smiley
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21668
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Compilando per ATTiny85

Code:
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?
« Last Edit: March 04, 2013, 08:13:54 am by flz47655 » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21668
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ora verifico...
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21668
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: March 04, 2013, 10:02:52 am by leo72 » Logged


Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Col seguente codice

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

Purtroppo sembra non chiamare MiaFunzione..
« Last Edit: March 07, 2013, 07:22:10 pm by flz47655 » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21668
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Col seguente codice

Code:
  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:
analogComparator.enableInterrupt(MiaFunzione, CHANGE);
Puoi usare anche FALLING o RISING
Logged


Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: March 08, 2013, 07:39:34 am by flz47655 » Logged

Parma
Online Online
Edison Member
*
Karma: 19
Posts: 2324
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Maledetto simulatore! Su un device reale il semplice codice funziona  smiley-twist

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  smiley-wink

Se vuoi sistemarla la modifica è immediata

Ciao
Logged

Pages: 1 2 3 [4] 5 6   Go Up
Jump to: