Está en la página 1de 14

ESCUELA POLITÉCNICA NACIONAL

CONTROL EMBEBIDO

Nombre: Roberto Pineda

Tarea Nro. 6

Tema: Microcontrolador en modo extendido

Periodo: 2021A

i. Escribir un enunciado para usar todo el hardware usado en el ejemplo de la clase de


microcontrolador en modo extendido.
ii. Realizar el diagrama de flujo y el programa de control del enunciado anterior
iii. Para validar el funcionamiento del programa adjuntar al deber las simulaciones
correspondientes.
iv. Subir en archivo comprimido, diagrama de proteus, carpeta de proyecto de Atmel
Studio y programa de LabView

i. Para el control de nivel de un tanque de pasteurización se le asigna a un operador un


computador con comunicación serial y una clave asignada, donde este podrá
visualizar el nivel de un tanque tanto en valores digitales como en la animación
gráfica. En campo el sensor analógico de nivel se encuentra enviando información al
microcontrolador a través de uno de sus puertos, el operador deberá ingresar su
clave en campo a través de 8 Sw´s para poder supervisar la información desde el
HMI, además se encontrará un visualizador montado al equipo como display de 7
segmentos además de indicadores de nivel de liquido discretos acoplados a cada una
de las alturas del tanque, también se requiere dejar 8 bits libres como consideración
de diseño.
ii. Diagrama de flujo del programa

Fig.1 Diagrama de flujo de algoritmo a desarrollar

Diseño:

Periférico In Out Bits


8 Sw´s X 8
8 Leds X 8
4 display 7 seg. X 11
Sensor de nivel X 1
Comunicación X X 2
Bits libres X X 8
TOTAL 38
Fig.2 Análisis de periféricos y bits a usar
Periférico In Out Bits Latch Buffer No uso
8 Sw´s X 8 1 0
8 Leds X 8 1 0
4 display 7 seg. X 11 1 1
Sensor de nivel X 1 - - -
Comunicación X X 2 - - -
Bits libres X X 8 - - -
TOTAL 38
Fig.3 Diseño con CI´s para trabajo de modo extendido

Directos al microcontrolador:

8 Bits de datos

4 Pines para 74LS138

3 Bits para activación display 7 seg.

2 Bits comunicación serial

8 Bits libres

1 Conversor AD

Fig.4 Bits directos del microcontrolador

Asignación de recursos:

Puerto B:

8 bits de datos

Puerto D:

PD0 RXD

PD1 TXD

PD2-PD7 6 bits libres

Puerto A:

PA0 Conversor AD

PA1 Activación 7 seg.


PA2 Activación 7 seg.

PA3 Activación 7 seg.

PA4-PA7 4 bits libres

Puerto C:

PC0-PC4: Control 74138

- Diseño del Hardware:

Fig.5 Hardware para uso del microcontrolador en modo extendido


- HMI

Panel frontal de la pantalla de supervisión

Fig.6 Interfaz de visualización del usuario


- Panel de bloques

Fig.7 Diagrama de bloques de LABview para interfaz hombre maquina


iii. Simulaciones
- Si la contraseña es incorrecta:

Fig.8 Operación de sistema con clave incorrecta

Fig.9 Operación de interfaz con clave incorrecta


- Si la contraseña es correcta:

Fig.10 Operación de interfaz con clave correcta

Fig.11 Establecimiento de valores y clave correcta


- Pruebas de nivel en tanque:

Fig.12 Nivel bajo de nivel de tanque

Fig.13 Nivel alto de nivel de tanque


ANEXOS
Código implementado
/*
* GccApplication38.cpp
*
* Created: 04/07/2021 3:16:07
* Author : Roberto Pineda
*/

#define F_CPU 8000000UL


#include <avr/io.h>
#include <util/delay.h>
int cambio(int num);
void display(int);
void salida();
void entrada();
void envio_p(unsigned char);
int FAD();
void leds(int);

int main(void)
{
DDRA=0b11111110;
DDRC=255;
DDRC=255;

//------------Comunicación------------------------
UBRR0=51;
UCSR0A=0;
UCSR0B=152;
UCSR0C=6;

//------------ADconver----------------------------

ADMUX=0b01100000;
DIDR0=0b00000001;

//--------------Variables-------------------------
int tempo=0;
int contra=0;
int Ntank=0;
int cero=0;
while (1)
{
Ntank=FAD();
leds(Ntank);

tempo=0b11111010;
PORTC=tempo;
entrada();
tempo=0b11110010;
PORTC=tempo;
contra=PINB;
tempo=0b11111011;
PORTC=tempo;
tempo=0b11111001;
PORTC=tempo;
salida ();
display(Ntank);
tempo=0b11111001;
PORTC=tempo;

if(contra==255) //--------------CLAVE ACTUAL-------------------------


{
envio_p(Ntank);
}else
{
envio_p(cero);
}
}
}
//--------------CASTING-------------------------
void display (int origi)
{
int uni,dece,cente,tempo,unidades,decenas,centenas;
if((origi>=100))
{
tempo=origi/10;
uni=origi%10;
cente=tempo/10;
dece=tempo%10;
}
else
{
cente=0;
dece=origi/10;
uni=origi%10;
}
unidades=cambio(uni);
decenas=cambio(dece);
centenas=cambio(cente);
PORTB=centenas;
tempo=0b11110001;
PORTC=tempo;
tempo=0b11111100;
PORTA=tempo;
PORTB=centenas;
_delay_ms(10);
tempo=0b11111110;
PORTA=tempo;
tempo=0b11110001;
PORTC=tempo;
tempo=0b11110001;
PORTC=tempo;
PORTB=decenas;
tempo=0b11111010;
PORTA=tempo;
_delay_ms(10);
tempo=0b11110001;
PORTC=tempo;
tempo=0b11111110;
PORTA=tempo;
tempo=0b11110001;
PORTC=tempo;
PORTB=unidades;
tempo=0b11110110;
PORTA=tempo;
_delay_ms(20);
tempo=0b11110001;
PORTC=tempo;
tempo=0b11111110;
PORTA=tempo;
}
void entrada ()
{
DDRB=0;
}
void salida ()
{
DDRB=255;
}

//--------------Transmisión-------------------------
void envio_p(unsigned char dato)
{
while(!(UCSR0A&(1<<5)));
UDR0 = dato;
}

int cambio(int num){


int valax=0;
switch (num){
case 0: valax= 0b10111111;
break;
case 1: valax= 0b10000110;
break;
case 2: valax=0b11011011;
break;
case 3: valax=0b11001111;
break;
case 4: valax= 0b11100110;
break;
case 5: valax=0b11101101;
break;
case 6: valax=0b11111101;
break;
case 7: valax=0b10000111;
break;
case 8: valax=0b11111111;
break;
case 9: valax=0b11100111;
break;
}
return valax;
}

//--------------ConversorAD-------------------------
int FAD()
{
int tempo56;
ADCSRA=0b11000110;
_delay_ms(5);
tempo56=ADCH;
return tempo56;
}

//-----------Leds_del_tanque-------------------------
void leds(int Ntank)
{
int tempo=0;
int valh=0;
if (Ntank<=33)
{
tempo=1;
}
if (Ntank<=64)
{
if(Ntank>33)
{
tempo=2;
}
}
if (Ntank<=97)
{
if(Ntank>64)
{
tempo=3;
}
}
if (Ntank<=125)
{
if(Ntank>97)
{
tempo=4;
}
}
if (Ntank<=161)
{
if(Ntank>125)
{
tempo=5;
}
}
if (Ntank<=192)
{
if(Ntank>161)
{
tempo=6;
}
}
if (Ntank<=225)
{
if(Ntank>192)
{
tempo=7;
}
}
if (Ntank<=255)
{
if(Ntank>225)
{tempo=8;
}
}
switch (tempo){
case 1: valh=0B01111111;
break;
case 2: valh=0B00111111;
break;
case 3: valh= 0B00011111;
break;
case 4: valh=0B00001111;
break;
case 5: valh=0B00000111;
break;
case 6: valh=0B00000011;
break;
case 7: valh=0B00000001;
break;
case 8: valh=0B00000000;
break;
}
tempo=0b11111000;
PORTC=tempo;
salida();
PORTB=valh;
tempo=0b11110000;
PORTC=tempo;
tempo=0b11111000;
PORTC=tempo;
}

También podría gustarte