/******************************************************************************
/******************************************************************************
IRQ7_4.CPP: (Emplea la interrupción IRQ7 para leer el ADC)
IRQ7_4.CPP: (Emplea la interrupción IRQ7 para leer el ADC)
Este programa muestrea a intervalos de 2 seg. un voltaje analógico (0V-5V) de un
Este programa muestrea a intervalos de 2 seg. un voltaje analógico (0V-5V) de un
potenciómetro y lo imprime en la pantalla, además envía el dato en binario al
potenciómetro y lo imprime en la pantalla, además envía el dato en binario al
PortA (puede ser B o C) del PPI para que se vea en los 8 leds.
PortA (puede ser B o C) del PPI para que se vea en los 8 leds.
El retardo de DOS segundos se genera llamando a la función delay.
El retardo de DOS segundos se genera llamando a la función delay.
El programa termina cuando se pulse ESC(escape)
El programa termina cuando se pulse ESC(escape)
Descripción:
Descripción:
a) Implemente un circuito con un potenciómetro entre 0 y 5V.
a) Implemente un circuito con un potenciómetro entre 0 y 5V.
b) El punto central de éste conéctelo al terminal (VI+) de la bornera azul o al
b) El punto central de éste conéctelo al terminal (VI+) de la bornera azul o al
molex.
molex.
c) El terminal VI-, conéctelo a tierra.
c) El terminal VI-, conéctelo a tierra.
d) El terminal AGND conéctelo a tierra.
d) El terminal AGND conéctelo a tierra.
e) El terminal VREF puede conectarse a otro potenciómetro con un voltaje de
e) El terminal VREF puede conectarse a otro potenciómetro con un voltaje de
salida aproximado de 2.5 voltios. Con esto se consigue mayor exactitud en la
salida aproximado de 2.5 voltios. Con esto se consigue mayor exactitud en la
toma de muestras.
toma de muestras.
f) Cargue el programa Turbo C++ 3.0 y abra el programa ADC_5, luego compile con
f) Cargue el programa Turbo C++ 3.0 y abra el programa ADC_5, luego compile con
ALT+F9, y ejecute el programa con CTRL+F9.
ALT+F9, y ejecute el programa con CTRL+F9.
Autor: Ing. Javier Barriga Hoyle
Autor: Ing. Javier Barriga Hoyle
******************************************************************************/
******************************************************************************/
#include
#include <dos.h> <dos.h> // Librería DOS para el Turbo C++// Librería DOS para el Turbo C++
#include
#include <conio.h> <conio.h> #include
#include <stdio.h> <stdio.h> #include
#include "BymDOS.h" "BymDOS.h" // Librería para la tarjeta LPT V2.0// Librería para la tarjeta LPT V2.0
int
int Base = 0x378; Base = 0x378; // Dirección base del puerto paralelo// Dirección base del puerto paralelo
#ifdef
#ifdef __cplusplus __cplusplus #define
#define __CPPARGS ... __CPPARGS ... #else
#else
#define
#define __CPPARGS __CPPARGS #endif
#endif
/* Prototipos */
/* Prototipos */
void
void interrupt (*old_adc)(...); interrupt (*old_adc)(...); // Vector antiguo// Vector antiguo
void
void interrupt new_adc(...); interrupt new_adc(...); // Nueva RSI// Nueva RSI
void
void instala_imr_vector( instala_imr_vector(voidvoid);); void
void restaura_imr_vector( restaura_imr_vector(voidvoid);); /* Variables globales */
/* Variables globales */
unsigned
unsigned charchar oldimr, newimr, datolisto, car, dato_adc; oldimr, newimr, datolisto, car, dato_adc; int
int muestras, Fin; muestras, Fin; float
float voltios; voltios; void
void main( main(voidvoid)) {
{
clrscr();
clrscr(); // Borra pantalla// Borra pantalla
inicio_tarjeta();
inicio_tarjeta(); // Inicializa tarjeta de interfase LPT V2.0// Inicializa tarjeta de interfase LPT V2.0
xout(0x7B,0x80);
xout(0x7B,0x80); // Configura PPI como PA = PB = PC = outs// Configura PPI como PA = PB = PC = outs
instala_imr_vector();
instala_imr_vector(); // Modifica IMR e instala vector de IRQ7// Modifica IMR e instala vector de IRQ7
/* Habilita la IRQ_EN del puerto paralelo, poniendo en UNO el bit 4 del puerto
/* Habilita la IRQ_EN del puerto paralelo, poniendo en UNO el bit 4 del puerto
0x37A (base+2) */
0x37A (base+2) */
outportb(0x37A, inportb(0x37A) | 0x10);
outportb(0x37A, inportb(0x37A) | 0x10); // IRQ_EN = 1// IRQ_EN = 1
printf("\n"); printf("\n");
printf("\t*********************************************************\n"); printf("\t*********************************************************\n"); printf("\t*
printf("\t* PROGRAMA QPROGRAMA QUE CAPTURA UE CAPTURA SEÑALES SEÑALES ANALOGICAS ANALOGICAS PROVENIENTES PROVENIENTES *\n");*\n"); printf("\t*
printf("\t* DE DE UN UN POTENCIOMETRO, POTENCIOMETRO, USANDO USANDO LA LA INTERRUPCION INTERRUPCION IRQ7 IRQ7 *\n");*\n");
printf("\t* *\n");
printf("\t* *\n");
printf("\t*
printf("\t* El El valor valor obtenido obtenido se se envía envía a a la la pantalla pantalla y y al al PortA PortA *\n");*\n"); printf("\t*
printf("\t* del del PPI. PPI. Las Las muestras muestras se se realizan realizan cada cada 2 2 segundos. segundos. *\n");*\n"); printf("\t*
printf("\t* Para Para salir salir del del programa, programa, pulse pulse ESC(escape). ESC(escape). *\n");*\n"); printf("\t*********************************************************\n\n"); printf("\t*********************************************************\n\n"); Fin = 0;
muestras = 0; muestras = 0; while
while(!Fin)(!Fin) // El programa termina cuando se pulse ESC// El programa termina cuando se pulse ESC
{ {
xout(0x6C, 0x00);
xout(0x6C, 0x00); // Inicia conversión del ADC// Inicia conversión del ADC
if
if(datolisto == 1)(datolisto == 1) // ¿Terminó conversión INT = 0?// ¿Terminó conversión INT = 0?
{ {
dato_adc = xin(0x6C);
dato_adc = xin(0x6C); // SI, procede a leerse el dato// SI, procede a leerse el dato
xout(0x78, dato_adc);
xout(0x78, dato_adc); // Envía dato leído al PortA del PPI// Envía dato leído al PortA del PPI
voltios = (
voltios = (floatfloat)dato_adc * 5 / 255;)dato_adc * 5 / 255; // Convierte a flotante// Convierte a flotante
gotoxy(22,12); gotoxy(22,12);
printf("lectura ADC(%d) = %0.4f voltios",muestras,voltios);
printf("lectura ADC(%d) = %0.4f voltios",muestras,voltios); //4 decimales//4 decimales
datolisto = 0;
datolisto = 0; // Borra flag para otra interrupción// Borra flag para otra interrupción
delay(2000);
delay(2000); // Retardo de 2 segundos// Retardo de 2 segundos
if
if(kbhit())(kbhit()) // ¿Se activó alguna tecla?// ¿Se activó alguna tecla?
{ {
car = getch();
car = getch(); // SI, entonces se lee la tecla y si es ESC// SI, entonces se lee la tecla y si es ESC
if
if(car == 27) Fin=1;(car == 27) Fin=1; // salir del programa// salir del programa
} } } } } } restaura_imr_vector();
restaura_imr_vector(); /* Termina el programa, recupera la máscara/* Termina el programa, recupera la máscara
y el vector original */
y el vector original */
}
} // Fin de main// Fin de main
void
void interrupt new_adc(...) interrupt new_adc(...) // Rutina de servicio de interrupción// Rutina de servicio de interrupción
{ {
old_adc();
old_adc(); // Llama al vector original// Llama al vector original
datolisto = 1;
datolisto = 1; // Flag, indica que se activó interrupción// Flag, indica que se activó interrupción
muestras++;
muestras++; // Incrementa número de muestras// Incrementa número de muestras
outportb(0x20,0x20);
outportb(0x20,0x20); // Envía el EOI// Envía el EOI
} } void
void instala_imr_vector( instala_imr_vector(voidvoid)) {
{
disable();
disable(); // Deshabilita interrupciones// Deshabilita interrupciones
oldimr = inportb(0x21);
oldimr = inportb(0x21); // Lee la máscara IMR// Lee la máscara IMR
newimr = 0x7F & oldimr;
newimr = 0x7F & oldimr; // Activa IRQ7 = 0111 1111// Activa IRQ7 = 0111 1111
outportb(0x21,newimr);
outportb(0x21,newimr); // Envía nueva IMR al PIC// Envía nueva IMR al PIC
old_adc = getvect(0x0F);
old_adc = getvect(0x0F); // Lee vector original// Lee vector original
setvect(0x0F,new_adc);
setvect(0x0F,new_adc); // Instala nuevo vector// Instala nuevo vector
enable();
enable(); // Habilita interrupciones// Habilita interrupciones
} } void
void restaura_imr_vector( restaura_imr_vector(voidvoid)) {
{
disable();
disable(); // Deshabilita interrupciones// Deshabilita interrupciones
setvect(0x0F,old_adc);
setvect(0x0F,old_adc); // Restaura vector original// Restaura vector original
outportb(0x21,oldimr);
outportb(0x21,oldimr); // Restaura IMR original// Restaura IMR original
enable();
enable(); // Habilita interrupciones// Habilita interrupciones
} }
Programa 13.8
Programa 13.8::
(IRQ7_5.CPP) Uso de las interrupciones IRQ7 (ADC) e IRQ0 (TIMER de la (IRQ7_5.CPP) Uso de las interrupciones IRQ7 (ADC) e IRQ0 (TIMER de la PC).PC).
Utilice el circuito
Utilice el circuito del programa IRQ7_4.CPPdel programa IRQ7_4.CPP
/******************************************************************************
/******************************************************************************
IRQ7_5.CPP: (Emplea las interrupciones IRQ0 y IRQ7)
IRQ7_5.CPP: (Emplea las interrupciones IRQ0 y IRQ7)
Este programa muestrea a intervalos de 1 seg. un voltaje analógico (0V-5V) de un
Este programa muestrea a intervalos de 1 seg. un voltaje analógico (0V-5V) de un
potenciómetro y lo imprime en la pantalla, además envía el dato en binario al
potenciómetro y lo imprime en la pantalla, además envía el dato en binario al
PortA (puede ser B o C) del PPI para que se vea en los 8 leds.
PortA (puede ser B o C) del PPI para que se vea en los 8 leds.
El retardo de 1 segundo se genera programando la interrupción IRQ0.
El retardo de 1 segundo se genera programando la interrupción IRQ0.
La línea INTR del ADC se conecta a la interrupción IRQ7.
La línea INTR del ADC se conecta a la interrupción IRQ7.
El programa termina cuando se pulse ESC(escape).
El programa termina cuando se pulse ESC(escape).
Descripción:
Descripción:
a) Implemente un circuito con un potenciómetro entre 0 y 5V.
a) Implemente un circuito con un potenciómetro entre 0 y 5V.
b) El punto central de éste conéctelo al terminal (VI+) de la bornera azul o al
b) El punto central de éste conéctelo al terminal (VI+) de la bornera azul o al
molex;
molex;
c) El terminal VI-, conéctelo a tierra.
c) El terminal VI-, conéctelo a tierra.
d) El terminal AGND conéctelo a tierra.
d) El terminal AGND conéctelo a tierra.
e) El terminal VREF puede conectarse a otro potenciómetro con un voltaje de
e) El terminal VREF puede conectarse a otro potenciómetro con un voltaje de
salida aproximado de 2.5 voltios. Con esto se consigue mayor exactitud en la
salida aproximado de 2.5 voltios. Con esto se consigue mayor exactitud en la
toma de muestras.
toma de muestras.
Autor: Ing. Javier Barriga Hoyle
Autor: Ing. Javier Barriga Hoyle
******************************************************************************/
******************************************************************************/
##include
##include <dos.h> <dos.h> // Librería DOS para el Turbo C++// Librería DOS para el Turbo C++
#include
#include <conio.h> <conio.h> #include
#include <stdio.h> <stdio.h> #include
#include "BymDOS.h" "BymDOS.h" // Librería para la tarjeta LPT V2.0// Librería para la tarjeta LPT V2.0
int
int Base = 0x378; Base = 0x378; // Dirección base del puerto paralelo// Dirección base del puerto paralelo
#ifdef
#ifdef __cplusplus __cplusplus #define
#define __CPPARGS ... __CPPARGS ... #else
#else
#define
#define __CPPARGS __CPPARGS #endif
#endif
/* Prototipos */
/* Prototipos */
void
void interrupt (*old_adc)(...); interrupt (*old_adc)(...); // Vector antiguo IRQ7// Vector antiguo IRQ7
void
void interrupt new_adc(...); interrupt new_adc(...); // Nueva RSI// Nueva RSI
void
void interrupt (*old_timer)(...); interrupt (*old_timer)(...); // Vector antiguo IRQ0// Vector antiguo IRQ0
void
void interrupt new_timer(...); interrupt new_timer(...); // Nueva RSI// Nueva RSI
void
void instala_imr_vector( instala_imr_vector(voidvoid);); void
void restaura_imr_vector( restaura_imr_vector(voidvoid);); /* Variables globales */
/* Variables globales */
unsigned
unsigned charchar oldimr, newimr, datolisto, car, dato_adc; oldimr, newimr, datolisto, car, dato_adc; int
int Fin, num_int, muestras; Fin, num_int, muestras; float
float voltios; voltios; void
void main( main(voidvoid)) // Inicia programa principal// Inicia programa principal
{ {
clrscr();
clrscr(); // Borra pantalla// Borra pantalla
inicio_tarjeta();
inicio_tarjeta(); // Inicializa tarjeta de interfase LPT V2.0// Inicializa tarjeta de interfase LPT V2.0
instala_imr_vector();
instala_imr_vector(); // Modifica IMR e instala el vector de IRQ7// Modifica IMR e instala el vector de IRQ7
xout(0x7B,0x80);
xout(0x7B,0x80); // Configura PPI como PA = PB = PC = out// Configura PPI como PA = PB = PC = out
/* Habilita la IRQ_EN del puerto paralelo, poniendo en UNO el bit 4 del puerto
/* Habilita la IRQ_EN del puerto paralelo, poniendo en UNO el bit 4 del puerto
0x37A (base+2) */
0x37A (base+2) */
outportb(0x37A, inportb(0x37A) | 0x10);
outportb(0x37A, inportb(0x37A) | 0x10); // IRQ_EN = 1// IRQ_EN = 1
printf("\n"); printf("\n");
printf("\t*********************************************************\n"); printf("\t*********************************************************\n"); printf("\t*
printf("\t* PROGRAMA PROGRAMA QUE CAPTURA QUE CAPTURA SEÑALES SEÑALES ANALOGICAS ANALOGICAS PROVENIENTES PROVENIENTES *\n");*\n"); printf("\t* DE UN POTENCIOMETRO, USANDO LAS INTERRUPCIONES IRQ0-7 *\n"); printf("\t* DE UN POTENCIOMETRO, USANDO LAS INTERRUPCIONES IRQ0-7 *\n");
printf("\t* *\n");
printf("\t* El valor obtenido se envía a la pantalla y al PortA *\n"); printf("\t* del PPI. Las muestras se realizan cada 1 segundo. *\n"); printf("\t* Para salir del programa, pulse ESC(escape). *\n"); printf("\t*********************************************************\n\n");
muestras = 0; // Inicia contador de muestras en cero
num_int = 0; // Inicia Contador de interrupciones a cero
Fin = 0; // Flag de fin
xout(0x6C, 0x00); // Inicia conversión del ADC en t = 0 seg
while(!Fin) // Programa continua hasta que se pulse ESC
{
if(datolisto == 1) // ¿Terminó conversión INTR = 0?
{
dato_adc = xin(0x6C); // SI, procede a leerse el dato
xout(0x78, dato_adc); // Envía dato leído al PortA del PPI
voltios = (float)dato_adc * 5 / 255; // Convierte a flotante gotoxy(22,12);
printf("lectura ADC(%d) = %0.4f voltios",muestras,voltios); //4 decimales
datolisto = 0; // Borra flag para otra interrupción
if(kbhit()) // ¿Se activó alguna tecla?
{
car = getch(); // SI, entonces se lee la tecla
if(car == 27) Fin=1; // Salir del programa
} } }
restaura_imr_vector(); /* Termina el programa, recupera la mascara
y el vector original */ } // Fin de main
void interrupt new_timer(...) // Rutina de servicio de interrupción {
old_timer(); // Llama al vector original
num_int++; // Incrementa número de interrupciones
if(num_int == 18) // ¿Pasó 1 segundo?
{
num_int = 0; // Reinicia contador de interrupciones
xout(0x6C, 0x00); // Inicia conversión del ADC
muestras++; // Incrementa número de muestras
}
outportb(0x20,0x20); // Envía el EOI
}
void interrupt new_adc(...) // Rutina de servicio de interrupción
{
old_adc(); // Llama al vector original
datolisto = 1; // Flag que indica que termino conversión
outportb(0x20,0x20); // Envía el EOI
}
void instala_imr_vector(void) {
disable(); // Deshabilita interrupciones
oldimr = inportb(0x21); // Lee la máscara IMR
newimr = oldimr & 0x7E; // Activa IRQ7 e IRQ0 (0111 1110)
outportb(0x21,newimr); // Envía nueva IMR al PIC
old_timer = getvect(0x08); // Lee vector 8 original
setvect(0x08,new_timer); // Instala nuevo vector
old_adc = getvect(0x0F); // Lee vector 15 original
setvect(0x0F,new_adc); // Instala nuevo vector
enable(); // Habilita interrupciones
}
void restaura_imr_vector(void) {
disable(); // Deshabilita interrupciones
setvect(0x08,old_timer); // Restaura vector 8 original
setvect(0x0F,old_adc); // Restaura vector 15 original
outportb(0x21,oldimr); // Restaura IMR original
enable(); // Habilita interrupciones
}
Programa 13.9:
(IRQ7_6.CPP) Uso de las interrupciones IRQ7 (ADC) e IRQ0 (TIMER de la PC).
Los datos muestreados serán almacenados en un archivo “muestreo.txt”. Utilice el circuito del
programa IRQ7_4.CPP
/****************************************************************************** IRQ7_6.CPP: (Emplea las interrupciones IRQ0 y IRQ7)
Este programa muestrea a intervalos de 1/2 seg un voltaje analógico (0V-5V) de un potenciómetro y lo imprime en la pantalla, además envía el dato en binario al PORT A (puede ser B o C) del PPI para que se vea en los 8 leds.
El retardo de 1/2 segundo se genera programando la interrupción IRQ0. La línea INT del ADC se conecta a la interrupción IRQ7.
El programa termina cuando se alcance las 200 muestras. Los datos se almacenan en el archivo “muestreo.txt”.
Descripción:
a) Implemente un circuito con un potenciómetro entre 0 y 5V.
b) El punto central de éste conéctelo al terminal (VI+) de la bornera azul o al molex;
c) El terminal VI-, conéctelo a tierra. d) El terminal AGND conéctelo a tierra.
e) El terminal VREF puede conectarse a otro potenciómetro con un voltaje de
salida aproximado de 2.5 voltios. Con esto se consigue mayor exactitud en la toma de muestras.
Autor: Ing. Javier Barriga Hoyle
******************************************************************************/
#include <dos.h> // Librería DOS para el Turbo C++
#include <conio.h> #include <stdio.h>
#include "BymDOS.h" // Librería para la tarjeta LPT V2.0
int Base = 0x378; // Dirección base del puerto paralelo
#ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif /* Prototipos */
void interrupt (*old_adc)(...); // Vector antiguo IRQ7
void interrupt new_adc(...); // Nueva RSI
void interrupt (*old_timer) (...); // Vector antiguo IRQ0
void interrupt new_timer(...); // Nueva RSI
void instala_imr_vector(void); void restaura_imr_vector(void);
/* Declaración de variables globales */
unsigned char oldimr, newimr, datolisto, car, dato_adc; int Fin, num_int, muestras;
float voltios;
void main(void) // Inicia programa principal
{
FILE *archivo;
clrscr(); // Borra pantalla
inicio_tarjeta(); // Inicializa tarjeta LPT V2.0
printf("\n");
printf("\t**********************************************************\n"); printf("\t* PROGRAMA QUE CAPTURA SEÑALES ANALOGICAS PROVENIENTES *\n"); printf("\t* DE UN POTENCIOMETRO, USANDO LAS INTERRUPCIONES IRQ0-7 *\n");
printf("\t* *\n");
printf("\t* El valor obtenido se envia a la pantalla y al PortA *\n"); printf("\t* del PPI. Ademas, cada muestra se guarda en un archivo. *\n”);
printf(“\t* Las muestras se realizan cada 1/2 segundo. *\n");
printf("\t* El programa termina cuando se pulse ESC(escape) o *\n");
printf("\t* cuando se alcance las 200 muestras. *\n");
printf("\t**********************************************************\n\n");
instala_imr_vector(); // Modifica IMR e instala el vector de IRQ7
/* Habilita la IRQ_EN del puerto paralelo, poniendo en UNO el bit 4 del puerto 0x37A (base+2) */
outportb(0x37A, inportb(0x37A) | 0x10); // IRQ_EN = 1
muestras = 0; // Inicia contador de muestras en cero
num_int = 0; // Inicia Contador de interrupciones a cero
Fin = 0; // Flag de fin
archivo = fopen("d:\\tc\\destino\\muestreo.txt","w+"); // Crea archivo
xout(0x6C,0x00); // Inicia conversión del ADC en t = 0
while(muestras <= 200) /* Programa continúa hasta que se pulse ESC ó cuando se alcance 200 muestras */ {
if(datolisto == 1) // ¿Terminó conversión INTR = 0?
{
dato_adc = xin(0x6C); // SI, procede a leerse el dato
xout(0x78, dato_adc); // Envía dato leído al PortA del PPI
voltios = (float)dato_adc * 5 / 255; // Convierte a flotante
fprintf(archivo,"%f\n",voltios); // Almacena dato en el archivo gotoxy(22,12);
printf("lectura ADC(%d) = %0.4f voltios",muestras,voltios); //4 decimales
datolisto = 0; // Borra flag para otra interrupción
if(kbhit()) // ¿Se activó alguna tecla?
{
car = getch(); // SI, entonces se lee la tecla
if(car == 27) Fin=1; // Salir del programa
} } }
fclose(archivo); // Cierra archivo “muestreo.txt”
restaura_imr_vector(); /* Termina el programa, recupera la mascara
y el vector original */ } // Fin de main
void interrupt new_timer(...) // Rutina de servicio de interrupción {
old_timer(); // Llama al vector original
num_int++; // Incrementa número de interrupciones
if(num_int == 9){ // ¿Pasó 1/2 segundo?
num_int = 0; // SI, reinicio contador de interrupciones
xout(0x6C,0x00); // Captura dato del ADC e inicia conversión
muestras++; // Incrementa número de muestras
}
outportb(0x20,0x20); // Envía el EOI
}
void interrupt new_adc(...) // Rutina de servicio de interrupción
{
old_adc(); // Llama al vector original
datolisto = 1; // Flag que indica que termino conversión
outportb(0x20,0x20); // Envía el EOI
void instala_imr_vector(void) {
disable(); // Deshabilita interrupciones
oldimr = inportb(0x21); // Lee la máscara IMR
newimr = oldimr & 0x7E; // Activa IRQ7 e IRQ0 (0111 1110)
outportb(0x21,newimr); // Envía nueva IMR al PIC
old_timer = getvect(0x08); // Lee vector 8 original
setvect(0x08,new_timer); // Instala nuevo vector
old_adc = getvect(0x0F); // Lee vector 15 original
setvect(0x0F,new_adc); // Instala nuevo vector
enable(); // Habilita interrupciones
}
void restaura_imr_vector(void) {
disable(); // Deshabilita interrupciones
setvect(0x08,old_timer); // Restaura vector 8 original
setvect(0x0F,old_adc); // Restaura vector 15 original
outportb(0x21,oldimr); // Restaura IMR original
enable(); // Habilita interrupciones
14.
Aplicaciones del DAC 0830
Programa 14.1: (DAC_1.CPP) Programa de prueba del DAC. Se le envía datos binarios para
obtener voltajes de salida entre 0V hasta +5V. Realice la siguiente conexión.
ADC0804 L P T D B 2 5 DAC0830 P P I 8 2 C 5 5 TIMER 82C54 P A P B P C G 2 G 1 C L K 2 C L K 1 O U T 2 O U T 1 G 2 G 1 C L K 2 C L K 1 V I + V I - V R E F A G N D V R E F A G N D R F B O U T 2 O U T 1 IRQ7 LIBRE ADC J10 3 2 1 + 5 V G N D 8 MHZ Power E/S Timer SW Timer + - + - +5V 3 2 10K 10K Inversor +V -V
El esquemático completo puede verlo en la figura E8, del apéndice E.
LM741
LM741