Muy buenas tardes gente, le comento, tenía corriendo el código que coloco debajo en un 16f1503, el cual funciona perfecto.
La idea era migrar al 12f675 por su tamaño reducido, pero en este caso no me esta tomando las interrupciones o no se, no soy muy experto en la materia, la cuestión es que no identifica cuando un pin esta en alto...
Este es el código del 1503.#include <16F1503.h>
#use delay(internal=16MHz)
#use FIXED_IO( C_outputs=PIN_C4,PIN_C3,PIN_C2,PIN_C1 )
#fuses NOMCLR NOBROWNOUT NOLVP INTRC_IO
#Byte PORTA = 0x00C
#Byte PORTC = 0x00E
#Byte TRISA = 0x08C
#Byte TRISC = 0x08E
int16 sensor=0;
int16 porcentaje=0;
int16 tiempo=1000;
#INT_RA
void ext_isr(void){
disable_interrupts(INT_RA);
delay_us(tiempo);
if(input(pin_A0)==0){
porcentaje=33;
}
else{
if(input(pin_A5)==0){
porcentaje=20;
}
else{
porcentaje=0;
sensor=0;
}
}
if((input(pin_A1)==1) && (input(pin_A2)==0)){ // Por A1 y A2 ingresa un encoder que emite aproximadamente 200 impulsos por segundo.
sensor++ ;
if (sensor == porcentaje){
output_low(PIN_C3);
output_high(PIN_C4);
delay_us(tiempo);
output_high(PIN_C3);
output_low(PIN_C4);
delay_us(tiempo);
sensor = 0;
}
}
}
void main()
{
delay_ms(4000);
TRISA=0b111111;
TRISC=0b000000;
setup_adc_ports(NO_ANALOGS);
output_bit(pin_c3,(input(pin_a2)));
output_bit(pin_c4,(input(pin_a1)));
clear_interrupt(INT_RA);
enable_interrupts(INT_RA);
enable_interrupts(GLOBAL);
while(true) {
output_bit(pin_c3,(input(pin_a2)));
output_bit(pin_c4,(input(pin_a1)));
enable_interrupts(INT_RA);
}
}
Ahora bien, quise migrar este código al 12f675 y me parece que se complica por el ADC...
#include <12F675.h>
#device ADC=10
#use delay(internal=4000000)
#use FIXED_IO( A_outputs=PIN_A1,PIN_A4 )
#fuses NOMCLR
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
int16 sensor=0;
int16 porcentaje=0;
int16 tiempo=1000;
#INT_EXT
void EXT_isr(void)
{
disable_interrupts(INT_EXT);
delay_us(tiempo);
if(input(pin_A0)==0){
porcentaje=33;
}
else{
if(input(pin_A5)==0){
porcentaje=20;
}
else{
porcentaje=0;
sensor=0;
}
}
if((input(pin_A2)==1) && (input(pin_A3)==0)){
sensor++ ;
if (sensor == porcentaje){
output_low(PIN_A4);
output_high(PIN_A1);
delay_us(tiempo);
output_high(PIN_A4);
output_low(PIN_A1);
delay_us(tiempo);
sensor = 0;
}
}
}
void main()
{
delay_ms(1000);
setup_adc_ports(NO_ANALOGS);
output_bit(pin_A4,(input(pin_A2)));
output_bit(pin_A1,(input(pin_A3)));
clear_interrupt(INT_EXT);
enable_interrupts(GLOBAL);
while(TRUE)
{
output_bit(pin_A4,(input(pin_A2)));
output_bit(pin_A1,(input(pin_A3)));
enable_interrupts(INT_EXT);
}
}
Por A2 y A3 ingresa un encoder que emite aproximadamente 200 impulsos por segundo, pero aca en el if " if((input(pin_A2)==1) && (input(pin_A3)==0)){" no lo esta reconociendo...
Desde ya muchas gracias por la opiniones...