Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Parcial][RESUELTO][Informática II]
Autor Mensaje
Feer Sin conexión
Presidente del CEIT
Ing. Electrónico
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.672
Agradecimientos dados: 601
Agradecimientos: 2.972 en 451 posts
Registro en: Apr 2010
Mensaje: #1
[Parcial][RESUELTO][Informática II] Parciales Informática II (Electrónica)
Hola les dejo el enunciado que tomaron en ese curso y una posible resolución, saludos.


Consigna:
Se pide desarrollar el equipo de control para un lavarropas, una vez seleccionado el tiempo de funcionamiento con la perilla y presionado el pulsador ON/OFF. Comienza a llenarse el tanque por medio de una bomba de agua (P0.1) hasta que un sensor detecte que el mismo este lleno (P3.1).
Una vez que el tanque este lleno comienza a centrifugar el tiempo seleccionado con la perilla. Mientras se centrifuga el motor debe girar 1 segundo para cada lado, eso se controla por medio de los pines (P0.2 y P0.3).
El desarrollo debe contar con 2 display’s (7 segmentos, cátodo común) donde se mostrara el tiempo en minutos que falta para que termine el proceso de lavado. (El display se puede conectar en cualquiera de los puertos libres).
Una vez terminado el lavado se debe sacar el agua, para ello se enciende otra bomba(P0.4) hasta que el sensor de tanque vacío se active(P3.2).
Se pide realizar las siguientes funciones:
• Realizar la función main.
• Realizar la función de firmware de barrido de display.
• Realizar la función primitiva DISPLAY
• Realizar la función TimerTick ( ya configurado el TIMER0 cada 1KHz)
• Realizar todas las funciones de la máquina de estados que controle la maquina.
Se considera que ya están hechas las funciones de timer por software y de anti-rebote de la perilla.
Para leer el valor de la perilla se debe usar la función “unsigned char Leer_Perilla(void)”

   




//Defines

#define cuenta = 1000
#define segundos = 60
#define ON = 1
#define OFF = 0
#define FIN = 0

//Declaración puertos del micro.

sbit derecha = P0^2;
sbit izquierda = P0^3;
sbit bomba = P0^1;
sbit pulsador = P3^3;
sbit sensor_bomba_agua = P3^1;
sfr display_digito = 0xA0;

//Variables para manejar los display 7 segmentos.

unsigned char digito_display[digitos];
unsigned char code tabla_bcd[]={0x7E, 0x30,0x6D,0x79,0x33,0x5b,0x5F,0x70,0x7F,0x73};

void main(void){
Inicializar_timmer(); //Lo programo un ingeniero.
Inicializar_variables();
while(1){
Maquina_estados();
}
}


void Maquina_estados(void){

switch(Estado){

case 0:

if(Pulsador == OK){
tiempo = Leer_perilla(); //Leer perilla la hizo otro ingeniero.
Bomba = ON;
Estado = 1;
}
break;

case 1:

if(Sensor_Bomba_Agua == OK){
Timmer_Encender(tiempo);
Bomba = OFF;
Estado = 2;
}
if(Pulsador == OK){
Bomba_vaciado = ON;
Estado = 3;
}
break;

case 2:

if((Tiempo = Fin) || (Pulsador = OK)){
Timer_Apagar(0);
Bomba_Vaciado = ON;
Estado = 3;
}
break;

case 3:

if(Sensor_Vaciado == OK){
Bomba_Vaciado = OFF;
Estado = 0;
}
break;
}
}
}

void Display(unsigned int numero){

unsigned char i;

for(i=digitos; i; i--){
digito_display[i] = tabla_bdd[numero%10];
numero /= 10;
}
}

void Barrido_Display(void){

static unsigned char indice;
Dig_0 = 0;
Dig_1 = 0;

Auxiliar = digito_display[indice];
Segmento_a = auxiliar & 0x01;
Segmento_b = auxiliar &(0x01 >> 1);
Segmento_c = auxiliar &(0x01 >> 2);
Segmento_d = auxiliar &(0x01 >> 3);
Segmento_e = auxiliar &(0x01 >> 4);
Segmento_f = auxiliar &(0x01 >> 5);
Segmento_g = auxiliar &(0x01 >> 6);
Segmento_sp = auxiliar &(0x01 >> 7);

switch(indice){

case 0:
Dig_0 = 1;
break;

case 1:
Dig_1 = 1;
break;

default:
break;
}
indice ++;

if(indice >= digitos){
indice = 0;
}
}

void Timer_Encender(unsigned int timepo_prog){

Tiempo = tiempo_prog;
TR0 = 1;

}

void Timer_Apagar(unsigned int timer_prog){

Tiempo = tiempo_prog;
TR0 = 0;

}

void Timer_Tick(void) interrupt(0){

EA = 0;
TH0 = 0;
TLO = ... + TH0; //El timmer lo programo algún ingeniero.
EA = 1;

Barrido_Display();
--cuenta;
if(!cuenta){
cuenta = CUENTA;
if(derecha == ON){
derecha = OFF;
izquierda = ON;
}
else{
izquierda = OFF;
derecha = ON;
}
--segundos;
if(!segundos){
segundos = SEGUNDOS;
tiempo --;
display(tiempo);
if(tiempo==0){
tiempo = FIN;
}
}
}
}



// Tabla de conversion bcd a 7 segmentos
// Codigo bcd a b c d e f g dp
// 0 1 1 1 1 1 1 0 0
// 1 0 1 1 0 0 0 0
// 2 1 1 0 1 1 0 1
// 3 1 1 1 1 0 0 1
// 4 0 1 1 0 0 1 1
// 5 1 0 1 1 0 1 1
// 6 0 0 1 1 1 1 1
// 7 1 1 1 0 0 0 0
// 8 1 1 1 1 1 1 1
// 9 1 1 1 0 0 1 1



Otros adjuntos en este tema
.rar  Resolucion.rar ( 45,32 KB / 106) por Vauda

[Imagen: digitalizartransparent.png]
(Este mensaje fue modificado por última vez en: 08-08-2012 17:39 por Feer.)
08-08-2012 17:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Feer recibio 7 Gracias por este post
JulianD (08-08-2012), matyary (14-10-2012), rockstiff (16-02-2013), ezee (17-02-2013), Santi Aguito (01-07-2014), claudianatali (25-07-2014), fnliendomolina (03-08-2016)
marian99 Sin conexión
Secretario de la SAE
.-
******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 480
Agradecimientos dados: 34
Agradecimientos: 180 en 84 posts
Registro en: Mar 2009
Mensaje: #2
RE: [Parcial][RESUELTO][Informática II]
Como extraño esta programacion, que bosta que es lo de D2!
08-08-2012 21:57
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
Ing. Electrónico
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.672
Agradecimientos dados: 601
Agradecimientos: 2.972 en 451 posts
Registro en: Apr 2010
Mensaje: #3
RE: [Parcial][RESUELTO][Informática II]
No es lo mismo?
Convengamos que acá es 5 o 6 funciones, diagramita de estados y un switch XD

[Imagen: digitalizartransparent.png]
08-08-2012 22:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
goncar87 Sin conexión
Secretario de la SAE
Y... es fisica cuantica!
******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 404
Agradecimientos dados: 41
Agradecimientos: 361 en 70 posts
Registro en: Feb 2012
Mensaje: #4
RE: [Parcial][RESUELTO][Informática II]
Bien feer!
09-08-2012 09:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Vauda Sin conexión
Empleado del buffet
Ahrequenosequeponer
*

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 8
Agradecimientos dados: 12
Agradecimientos: 1 en 1 posts
Registro en: Jul 2012
Mensaje: #5
RE: [Parcial][RESUELTO][Informática II]
Aca subo una resolucion en keil que hice de tu parcial Fernanduchis :$

Guarda que en tu resolucion falta tener en cuenta algunas cosillas y algunas otras estan medio mal
(tipo

for(i=digitos; i ; i--){ //Aca tendria que ser a lo sumo for (i = digitos-1; i > -1; i-- )
083 digito_display[i] = tabla_bdd[numero%10]; // Esto ya esta bien
084 numero /= 10;


Archivo(s) adjuntos
.rar  Resolucion.rar (Tamaño: 45,32 KB / Descargas: 106)
(Este mensaje fue modificado por última vez en: 15-02-2013 19:46 por Vauda.)
15-02-2013 18:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Vauda recibio 1 Gracias por este post
Feer (15-02-2013)
Santi Aguito Sin conexión
Presidente del CEIT
Newtoniano
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.240
Agradecimientos dados: 246
Agradecimientos: 680 en 341 posts
Registro en: Oct 2012
Mensaje: #6
RE: [Parcial][RESUELTO][Informática II]
Ufff si hubiera visto esto antes..! Rindo en unas horas.

Se agradece!!!. Lo único que le pude ver al código es en la parte del barrido del display:


Auxiliar = digito_display[indice];
Segmento_a = auxiliar & 0x01;
Segmento_b = auxiliar &(0x01 >> 1);
Segmento_c = auxiliar &(0x01 >> 2);
Segmento_d = auxiliar &(0x01 >> 3);
Segmento_e = auxiliar &(0x01 >> 4);
Segmento_f = auxiliar &(0x01 >> 5);
Segmento_g = auxiliar &(0x01 >> 6);
Segmento_sp = auxiliar &(0x01 >> 7);


Ojo...hay que desplazar al 0x01 para la izquierda, o a "auxiliar" para la derecha.

Por ejemplo en el segmento b seria:


Segmento_b = auxiliar & (0x01 << 1); // una manera
Segmento_b = (auxiliar >> 1) & (0x01); // otra manera


Busca la excelencia, el éxito llegará
(Este mensaje fue modificado por última vez en: 01-07-2014 00:43 por Santi Aguito.)
01-07-2014 00:42
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
claudianatali Sin conexión
Empleado del buffet
:)
*

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 2
Agradecimientos dados: 5
Agradecimientos: 0 en 0 posts
Registro en: Feb 2012
Mensaje: #7
RE: [Parcial][RESUELTO][Informática II]
thumbup3love
29-07-2014 11:27
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)