#include <16LF1936.h>
#use fast_io(A)
#byte PORTA=0X00C
void main (void)
{
setup_oscillator(OSC_31KHZ|OSC_INTRC|OSC_PLL_OFF); //reloj interno a 31KHz
// Salidas
set_tris_A(0);
//Iniciamos el bucle infinito
for (;;)
{
PORTA=255;
}
}
List p=16LF1936
include "P16LF1936.INC"
__CONFIG _CONFIG1,_FOSC_INTOSC & _WDTE_OFF &_MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2,_WRT_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_19 & _LVP_OFF
org 0X00
goto Inicio
org 0x05
Inicio ;Configuramos el reloj interno
Banksel OSCCON ;seleccionamos el banco del OSCCON
movlw b'00000010' ;Pll disable, Frecuencia LF 31KHz, reloj interno
MOVWF OSCCON
;Configuracion I/O
movlw b'00000000' ;RA0 como entrada
movwf TRISA
Banksel ANSELA ;seleccionamos el banco del ANSELA
movlw b'00000000' ;Todos los pines como digitales
movwf ANSELA
Banksel PORTA
Bucle
MOVLW .255
MOVWF PORTA
goto Bucle
end
#include <16LF1936.h>
#fuses INTRC_IO,WDT_SW,NOPROTECT,PUT,NOBROWNOUT,NOLVP,MCLR,NOCPD,NOCLKOUT,NOIESO,NOFCMEN,NOWRT,STVREN,BORV19,PLL_SW
#use fast_io(A)
#byte PORTA=0X00C
void main (void)
{
setup_oscillator(OSC_31KHZ|OSC_INTRC|OSC_PLL_OFF); //reloj interno a 31KHz
// Salidas
set_tris_A(0);
//Iniciamos el bucle infinito
for (;;)
{
PORTA=255;
}
}
Perdon por la tardanza en responder pero es que he estado de viaje...
Al final como no me simulaba bien de ninguna manera, lo simule con el proteus y funciono perfectamente.
No se el motivo, pero voy a suponer que el código estaba bien.
Muchas gracias rivale y ppyote por la ayuda!
Hola KILLERJC, gracias por responder. La verdad que no comprendo bien los fuses, ese inicio lo copié de otro circuito que usa entradas analógicas. Soy nuevo en lo que es programación.Código: C
setup_adc_ports(sAN0); // entrada RA0 como análoga setup_adc_ports(sAN1); // entrada RA0 como análoga setup_adc(ADC_CLOCK_INTERNAL); // reloj del conversor set_adc_channel(0); // selecciona canal para conversión set_adc_channel(1); // selecciona canal para conversión
En resumen, solo usas AN1, el pin que seria AN0 queda como digital y no se usa para nada.Código: C
#fuses noprotect, nowdt, nobrownout, noput, nolvp
No esta configurado el oscilador, aunque el proteus no le da importancia a esto, pero necesitas configurarlo.
----------------
Respecto al circuito no se que valores poseen las resistencias, pero recorda que el pin de ese PIC puede entregar maximo de 25mA, el cual nunca deberias acercarte al maximo, y como ves esto es poca corriente como para tantos leds.
----------------
Es correcto, que si yo posee un nivel de 600 por ejemplo tenga que entrar a todos los ifs ?
Cómo configuro el oscilador?
#FUSES INTRC_IO, NOBROWNOUT, NOCPD, NOWRT, NODEBUG, NOPROTECT, FCMEN, NOLVP, PUT, IESO
---Qué otra técnica se podría usar :rolleyes:?
typedef struct {int8 umbral,lb,la;} MLEDS ;
// Umbral portB portA
// ------ ----- -----
MLEDS mled[16]={ 0, 0xFF , 0x00 ,
60, 0xFE , 0x84 ,
85, 0xFD , 0x84 ,
104, 0xFB , 0x84 ,
120, 0xF7 , 0x84 ,
134, 0xEF , 0x84 ,
147, 0xBF , 0x84 ,
159, 0xDF , 0x84 ,
170, 0x7F , 0x84 ,
180, 0xFE , 0x48 ,
190, 0xFD , 0x48 ,
199, 0xFB , 0x48 ,
208, 0xF7 , 0x48 ,
216, 0xEF , 0x48 ,
224, 0xBF , 0x48 ,
232, 0xDF , 0x48
};
while(true)
{
delay_ms(100);
nivel = read_adc();
for(k=0 ; k<15 && nivel>mled[k].umbral ; k++) ;
output_b(mled[k].lb) ;
output_a(mled[k].la) ;
}
Hay forma de corregir estos errores, sin tener que cambiar la computadora ;-)?