Está en la página 1de 16

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA


Y ELECTRÓNICA

LABORATORIO DE
CONTROL CON MICROPROCESADORES

TRABAJO PREPARATORIO

Práctica No: 03

Tema: CIRCUITOS AUXILIARES

Grupo: GR-6

Realizado por: Sebástian Sánchez

Fecha de Entrega: 26/06/2020


Semestre 2020A
Trabajo preparatorio:
1. Consultar 2 circuitos que sirvan para realizar respaldo de alimentación. No usar los que se vio
en clase teórica.

Fig. 1. Circuito fuente UPS de respaldo.

Este es un circuito de respaldo de alimentación comercial, cuando existe un corte en la


alimentación principal, la batería pasa a tomar el control, sin introducir picos por la conmutación
del cambio.

Fig. 2. Circuito de alimentación de respaldo.

Este circuito es una fuente de alimentación de 6V, que brinda un voltaje de salida estable
mientras este activa la alimentación principal, en caso de que esta falle, se utiliza una batería
como alimentación secundaria.
2. Consultar la Subrutina (lenguaje ensamblador y lenguaje C) para escribir y leer en la memoria
EEPROM (datos) de un microcontrolador.
Fig. 3. Subrutina en lenguaje ensamblador para escribir y leer la memoria EEPROM.

Fig. 4. Subrutina en lenguaje C para escribir y leer la memoria EEPROM.

3. Realizar el circuito completo con respaldo de alimentación y el programa de control que


permite contar el número de cajas de dos tamaños que pasan por una banda transportadora
utilizando sensores ópticos:
• El sistema debe contar el número de cajas que pasan por la banda transportadora
(simular los sensores ópticos con dos pulsadores) para cajas pequeñas y grandes.
• El sistema debe mostrar siempre el número total de cajas que han pasado por la banda
transportadora en 3 displays de 7 segmentos.
• El sistema cuenta con un HMI en el PC en el cual permite visualizar la cuenta del
número de cajas de cada tamaño.
• Los contadores de cajas se deben encerar si se reinicia el microcontrolador de manera
manual, pero el dato de cuenta es almacenado en memoria no volátil.
• El sistema debe contabilizar el número de veces que se ha reiniciado manualmente y
mostrarlo en el HMI del PC.
• Al finalizar el día el administrador del sistema puede visualizar en el PC: el contador
total del número de cajas de cada tamaño, número de resets manuales, además debe
permitir encerar cada uno de los contadores de manera individual.
• Los contadores no se deben borrar si el microcontrolador está sin alimentación
principal (se debe implementar un sistema de respaldo de alimentación y datos).
Código:
#include <avr/io.h> while(EECR & inicio_micro();
#include <avr/interrupt.h> (1<<EEPE));
#include <util/delay.h> EEAR=uiAddress; // llamo a
#define F_CPU 8000000UL EEDR=ucData; subrutina de inicio
EECR|=(1<<EEMPE); USART_Init(51);
// CONFIGURACION INICIAL EECR|=(1<<EEPE);
void inicio_micro(void) } //
{ unsigned char configuracion serial
DDRB=DDRC=DDRA=255 EEPROM_read(unsigned int while(1)
; // uiAddress) {
PORTB Y PORTC COMO SALIDAS {
PORTB=PORTC=PORTA= conta_total=conta_
0; while(EECR & peque+conta_grande;
DDRD=0b00000010; (1<<EEPE));
PORTD=~DDRD; EEAR = uiAddress; barrido(conta_tota
EECR |= (1<<EERE); l);
// CONFIGURACION return EEDR; }
INTERRUPCIONES EXTERNAS. } }
EICRA=0b00001010; void barrido (int numero);
EIMSK=0b00000011; //VARIABLES //////////////////////////
EIFR=255; int conta_reset; //////////////////////////
//MODO CAPTURA //int cont_desco; /////////////////////////
TIMER 1 int leer_caja_g;
TCCR1A=0; int leer_caja_p; // INTERRUPCION POR
TCCR1B=0b11000011; int conta_grande; COMUNICACION
TIMSK1=0b00100000; int conta_peque; ISR(USART0_RX_vect)
sei(); int conta_total; {
// //variables comunicación dato=usart_getchar
HABILITO INTERRUPCIONES unsigned char dato; (); //
GLOBALES unsigned char cajas_g; se recibe dato
} unsigned char cajas_p;
// CONFIGURACION unsigned char reset_tx; if(dato==1)
COMUNICACION SERIAL //unsigned char {
void USART_Init(unsigned desconexion_tx;
int ubrr) char aux; cajas_g=EEPROM_rea
{ char d(5); // se lee
UBRR0=0; displays[10]={0xC0,0xF9,0x dato de EEPROM
UCSR0B|=(1<<RXCIE0 A4,0xB0,0x99,0x92,0x82,0xF
)|(1<<RXEN0)|(1<<TXEN0); 8,0x80,0x90}; usart_putchar(caja
UCSR0C|=(3<<1); s_g); //
UBRR0=ubrr; Transmisión de dato
sei(); ////////////////////////// }
////////////////////////// else if(dato==2)
} ///////////////////////// {
unsigned char int main(void)
usart_getchar(void) { cajas_p=EEPROM_rea
{ if(MCUSR d(2);
while(!(UCSR0A&(1< &(1<<EXTRF))
<RXC0))); // // Observo usart_putchar(caja
espera, mientras no este banderas para ver si se s_p);
limpio el buffer reseteo el micro }
return UDR0; { else if(dato==4)
{
//Retornar dato conta_reset=EEPROM
} _read(9); // reset_tx=EEPROM_re
void lectura del contador de ad(9);
usart_putchar(unsigned reset
char data) usart_putchar(rese
{ conta_reset++; t_tx);
while(!(UCSR0A&(1< }
<UDRE0))); //Espero, que // incremento de else if(dato==8)
este limpio el buffer reset {
UDR0=data;
EEPROM_write(9,con EEPROM_write(5,0);
//transmisión de ta_reset); // guardar //
dato en EEPROM el cont_reset ENCERO CONTADOR CAJAS
} MCUSR GRANDES
// FUNCIONES DE EEPROM &=~(1<<EXTRF); }
void EEPROM_write(unsigned // pongo cero en else if(dato==16)
int uiAddress, unsigned extrf {
char ucData) }
{ EEPROM_write(2,0);
// //comparo para unsigned short C;
ENCERO CONTADOR CAJAS saber que fuente usa
PEQUENAS { //Variable
} //fuente para guardar las centenas.
else if(dato==32) principal unsigned short UM;
{ //
PORTA=PINA|0b00000 //Variable
EEPROM_write(9,0); 001; para guardar las unidades
// // de mil
ENCERO CONTADOR DE RESETS PORTA=PINA&0b11111 UM = numero/1000;
} 101;
else if(dato==0) PORTA=1; //Cálculo
{ de las unidades de mil.
//_delay_ms(100); C = (numero-
usart_putchar(0); TCNT1=0; UM*1000)/100;
} //Cálculo de las
// Encero contador centenas.
} timer1 D = (numero-
// INTERRUPCIONES EXTERNAS } UM*1000-C*100)/10;
ISR(INT0_vect) else //Cálculo de las
{ { decenas.
leer_caja_g=EEPROM // U = (numero-
_read(5); // cont_desco++; UM*1000-C*100-D*10);
lectura de EEPROM //Cálculo de las
leer_caja_g++; //contador de unidades.
fuente
// incremento de // PORTC=0;
variable EEPROM_write(2,con PORTB=displays[U];
conta_grande++; t_desco); PORTC=0b00000001;
EEPROM_write(5,lee // _delay_us(1000);
r_caja_g); // guerdar PORTA=PINA|0b00000 PORTC=0;
en EEPROM 010;
} // PORTB=displays[D];
ISR(INT1_vect) PORTA=PINA&0b11111 PORTC=0b00000010;
{ 110; _delay_us(1000);
leer_caja_p=EEPROM PORTA=2; PORTC=0;
_read(2); //
lectura de EEPROM //_delay_ms(100); PORTB=displays[C];
leer_caja_p++; TCNT1=0; PORTC=0b00000100;
} _delay_us(1000);
// incremento de } PORTC=0;
variable // BARRIDO
conta_peque++; void barrido(int numero) PORTB=displays[UM]
EEPROM_write(2,lee { ;
r_caja_p); // guerdar unsigned short U; PORTC=0b00001000;
en EEPROM _delay_us(1000);
} //Variable PORTC=0;
// INTERRUPCION TIMER1 para guardar las unidades.
ISR(TIMER1_CAPT_vect) unsigned short D; }
{
if(ICR1>1000 && //Variable
ICR1<11250) para guardar las decenas.
Diagrama de flujo:

Fig. 5. Diagrama de flujo del programa.

Fig. 6. Programa en LabVIEW.


Evidencias:

Fig. 7. Evidencia Funcionamiento.

En las primeras dos imágenes se puede ver que cuando se pulsa el botón de CAJAS GRANDES, el
contador aumenta, también se puede ver en la parte derecha que en el LabVIEW está pulsado
el botón “cajas grandes” cuando esto ocurre se puede ver el conteo solamente de las cajas
grandes, para este caso es el mismo que el del micro, porque aun no se ha presionado otro botón
diferente.

Fig. 8. Evidencia Funcionamiento.

En esta imagen se ve que al presionar el botón CAJAS PEQUEÑAS, el contador en el micro


aumenta el valor en 1, pero del lado del LabVIEW sigue pulsado el botón que muestra el conteo
de las cajas grandes, y su valor no ah cambiado con respecto al anterior.
Fig. 9. Evidencia Funcionamiento.

En estas dos imágenes, primero se cambio el pulsador del LabVIEW, ahora esta pulsado el botón
de mostrar el contador de CAJAS PEQUEÑAS, el contador esta en 1 por la anterior vez que se
pulso el botón de CAJAS PEQUEÑAS en el micro, luego podemos ver que en el micro se pulsa el
botón de CAJAS PEQUEÑAS, y otra vez incrementa el contador en el micro, cabe recalcar que el
display del micro muestra el numero de cajas totales que hayan pasado la banda transportadora
(hasta ahora van 4), seguidamente en la parte derecha se ve que el conteo de cajas pequeñas
en el LabVIEW aumento en 1 también.

Fig. 10. Evidencia Funcionamiento.

En esta imagen se ve que por parte del LabVIEW se está pulsado el botón de ver el numero de
resets en el micro, como hasta el momento no ha surgido ningún reset manual ese contador
sigue en cero.
Fig. 11. Evidencia Funcionamiento.

En estas imágenes se ve como se pulsa el botón de reset en el micro, volviendo el contador de


cajas totales a cero, mientras que en el LabVIEW se puede ver que el contador de resets aumento
en 1.

Fig. 12. Evidencia Funcionamiento.


Aquí se puede ver que, aunque se haya pulsado el botón de reset y el contador total este en
cero, en el LabVIEW sigue almacenado el conteo de cajas individualmente, como se vio en
imágenes anteriores el contador de cajas grandes y pequeñas habían contado 2 cajas
respectivamente, ese mismo número se puede seguir viendo en el PC.

Fig. 13. Evidencia Funcionamiento.

Para comprobar el funcionamiento de las anteriores imágenes, aquí se pulso el botón CAJAS
GRANDES en el micro, el valor en el display es 1 ya que es la primera vez que se lo pulsa después
del reset anteriormente hecho, en el lado del LabVIEW el contador de cajas grandes aumento
en 1 y ahora esta en 3, ya que anteriormente estaba en 2.

Fig. 14. Evidencia Funcionamiento.


En estas imágenes se observa que primeramente en LabVIEW se presionó el botón de ENCERAR
CAJAS GRANDES, esto hace que el contador individual de cajas grandes en el PC se ponga en
cero, esto no afecta al numero de cajas que registra el micro como se ve en las imágenes.

Fig. 15. Evidencia Funcionamiento.

En estas dos imágenes se ve que al pulsar ENCERAR CAJAS GRANDES no afecta a los contadores
de cajas pequeñas ni al contador de reset en el PC, ya que estos conservan sus valores anteriores.

Fig. 16. Evidencia Funcionamiento.


En estas imágenes se observa que en LabVIEW se presionó el botón de ENCERAR CAJAS
PEQUEÑAS, esto hace que el contador individual de cajas pequeñas en el PC se ponga en cero,
esto no afecta al número de cajas que registra el micro como se ve en las imágenes.

Fig. 17. Evidencia Funcionamiento.

En estas dos imágenes se ve que al pulsar ENCERAR CAJAS PEQUEÑAS no afecta a los contadores
de cajas grandes ni al contador de reset en el PC, ya que estos conservan sus valores anteriores,
el contador de cajas grandes esta en cero ya que previamente se lo encero.
Fig. 18. Evidencia Funcionamiento.

En estas imágenes se observa que en LabVIEW se presionó el botón de ENCERAR RESET, esto
hace que el contador de reset en el PC se ponga en cero, esto no afecta al número de cajas que
registra el micro como se ve en las imágenes.

Fig. 19. Evidencia Funcionamiento.

En estas dos imágenes se ve que al pulsar ENCERAR RESET no afecta al contador de cajas grandes
ni al contador de cajas pequeñas en el PC, ya que estos conservan sus valores anteriores, el
contador de cajas grandes y el contador de cajas pequeñas están en cero ya que previamente
se los encero.
Fig. 20. Evidencia Funcionamiento.

Finalmente en estas imágenes se ve el funcionamiento del circuito respaldo de alimentación,


ya que cuando se desconecta la alimentación principal, enseguida se activa la alimentación
secundaria (batería), al mismo tiempo se ve que con alimentación principal se activa un led
verde notificando al usuario que esta conectado a red, y al momento de la desconexión de la
alimentación principal se activa un led rojo que notifica que se esta alimentando con una
batería externa.

Referencias:

[1] Atmel. Datasheet ATmega164P.

[2] Una Fuente UPS Básica [Online], Available:


http://elrincondeloscircuitos.blogspot.com/2011/01/una-fuente-upsbasica.html

[3] AVR programación en C – 15 Lectura y escritura en la Memoria EEPROM de los AVR[Online],


Available: https://vidaembebida.wordpress.com/2018/04/20/avr-programacion-en-c-15-
lectura-y-escritura-en-la-memoria-eeprom-de-los-avr/#reg
D1 BAT1
DIODE 9V
SW2

A1
SW3 TR1 BR1 SW-SPST U3
SW-SPST 7805
+85.1
SW1
AC Volts +25.8 1 VI VO 3
SW-SPST

GND
AC Volts

C3
2W01G +16.8 C1 C2 0.1uF +5.01

2
Volts 220uF 1uF Volts

B1
TRAN-2P3S

BR2 A1
R3
R2 U2 1.5k RESPALDO DE ALIMENTACION
10k 1 A C 4 Vout

B1 2 3
K E
2W01G PC817

VISUALIZADOR ALIMETACION PRINCIPAL


U1 D2
40 37
R1 220
1 PB0/XCK0/T0/PCINT8 PA0/ADC0/PCINT0
2 41 PB1/T1/CLKO/PCINT9 PA1/ADC1/PCINT1 36
3 42 PB2/AIN0/INT2/PCINT10 PA2/ADC2/PCINT2 35 R4 220
4 43 PB3/AIN1/OC0A/PCINT11 PA3/ADC3/PCINT3 34
5 44 PB4/SS/OC0B/PCINT12 PA4/ADC4/PCINT4 33
1 32 ALIMENTACION SECEUNDARIA
6
2
PB5/MOSI/PCINT13 PA5/ADC5/PCINT5
31 D3
7 PB6/MISO/PCINT14 PA6/ADC6/PCINT6
8 3 PB7/SCK/PCINT15 PA7/ADC7/PCINT7 30
P1 DCD 1
RX 9 PD0/RXD0/PCINT24 PC0/SCL/PCINT16 19 A DSR 6
TX 10 PD1/TXD0/PCINT25 PC1/SDA/PCINT17 20 B RXD 2 RX
INT0 11 PD2/INT0/RXD1/PCINT26 PC2/TCK/PCINT18 21 C RTS 7
INT1 12 PD3/INT1/TXD1/PCINT27 PC3/TMS/PCINT19 22 D TXD 3 TX
13 PD4/OC1B/XCK1/PCINT28 PC4/TDO/PCINT20 23 CTS 8
14 24 4
B
A
D
C

PD5/OC1A/PCINT29 PC5/TDI/PCINT21 DTR


15 25 9
1
2
3
4
5
6
7
8

Vout PD6/ICP/OC2B/PCINT30 PC6/TOSC1/PCINT22 RI


16 PD7/OC2A/PCINT31 PC7/TOSC2/PCINT23 26
BOTONES 29 8
AREF XTAL1 ERROR
27 AVCC XTAL2 7
RESET 4 RESET COMPIM
R5 R7 R6
ATMEGA164P
1k 1k 1k MICROCONTROLADOR
INT0 INT1 RESET

0.1nF 0.1nF 0.1nF

CAJAS GRANDES CAJAS PEQUENAS RESET

También podría gustarte