Microcontrolador de 8 pines

#22
Analizando bien, todo lo que se ha hecho me parece que si, es aqui donde se aplica la ventaja de usar ensamblador. Lo intentare al cabo que en CCS hay opciones para usar ensamblador.


Saludos
 
#23
Jaja yo si ando bien perdido, no logro hacer que el 12f509 me active el puerto como salidas o entradas digitales, me gustaría saber si alguien tiene un ejemplo en ensamblador por que de verdad que ando mal.

Saludos
 
#25
Saludos, te agradezco mucho tu ayuda pero ya lo había resuelto, de todas formas muchas gracias. Es bueno saber que alguien responde los mensajes jeje
 
#26
Buen dia, en esta ocacion y despues de mucho tiempo de inactividad regresamos,
ahora con otra aplicacion sencilla de estos mini-PIC, en este caso es un control de temperatura donde un ventilador se activa cuando la temperatura se eleva de cierto nivel y se apaga cuando este es inferior a otro valor(ambos ajustados por el usuario).

Para comenzar, el sensor de temperatura sugerido es el lm 35, datasheet: http://www.national.com/ds/LM/LM35.pdf

La salida que el sensor de temperatura se le resta el voltaje ajustado en el pin no inversor de los Op-Amp, estos son alimentados con +/- 15v. Para acondicionar la señal se dispone de un divisro de voltaje y para bloquear el voltaje de saturacion negativa se dispone de un diodo en serie con la salida de los Op-Amp. En cuanto a la parte del microcontrolador, sucede lo siguiente:

Low_level High_level FAN
0 0 OFF
0 1 ambiguous
1 0 OFF
1 1 ON

El ventilador solo se enciende cuando el indicador de nivel alto esta encendido, eso indica que hay temperatura que tiene que ser regulada, el estado de error es cuando este indicador es "1" y el indicador de bajo nivel es "0", cuando eso sucede el PIC hara que los LED's indicadores de nivel parpadeen alternadamente a frecuencia aproximada a 1Hz.


Programa en C:

PHP:
#include <12f509.h>
#fuses INTRC, NOWDT, NOPROTECT, NOMCLR
#use delay(clock=4000000)
#use fast_io(B)
void active_fan()
{
output_low(PIN_B0);
output_high(PIN_B4);
output_high(PIN_B1);
delay_ms(25);
}
void desactive_fan()
{
output_low(PIN_B4);
output_low(PIN_B1);
output_high(PIN_B0);
delay_ms(25);
}
void diagnostic()
{
output_high(PIN_B4);
output_low(PIN_B0);
delay_ms(500);
output_high(PIN_B0);
output_low(PIN_B4);
delay_ms(500);
}
void main()
{
SET_TRIS_B(0x2C);
do
{
if((input(PIN_B5))&&(!input(PIN_B3)))
{
diagnostic();
}
else
{
if(input(PIN_B5))
{
active_fan();
}
 
if(!input(PIN_B3))
{
desactive_fan();
}
}
}
while(1);
}
 

Adjuntos

Última edición por un moderador:
Arriba