#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);
}
}#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);
}
}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.Código: [Seleccionar]#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...Código: [Seleccionar]#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...
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.Código: [Seleccionar]#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...Código: [Seleccionar]#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...
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.Código: [Seleccionar]#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...Código: [Seleccionar]#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...
Creo que te falta configurar a GP2 como entrada digital, por defecto debe estar como analógico.
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.Código: [Seleccionar]#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...Código: [Seleccionar]#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...
Cuando dices no me detecta en alto, te refieres a que no te detecta el cambio de 0 a 1 lógico la interrupción?
¿Qué pin es?
¿No necesitarás una resistencia de pull -up en el terminal con problemas?
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.Código: [Seleccionar]#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...Código: [Seleccionar]#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...
Cuando dices no me detecta en alto, te refieres a que no te detecta el cambio de 0 a 1 lógico la interrupción?
¿Qué pin es?
¿No necesitarás una resistencia de pull -up en el terminal con problemas?
Hola Dominus, gracias por tu respuesta, tendría que detectar el cambio de estado en los pines A2 y A3, o al menos en alguno de ellos, lo estoy simulando en Proteus con sus respectivas resistencias pull-up...
...
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...
...
...
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...
...
Yo copypego tu código, sin tocar nada lo compilo y lo ejecuto en Proteus --> Ese if reconoce perfectamente a A2 y A3.
Por otro lado, si la frecuencia máxima de los pulsos del encoder es 200Hz, son 1.25ms entre flancos de fase A y B --> No entiendo para qué metés retardos que suman 3ms dentro de la interrupción.
...Si el flanco viene "ruidoso" con un retardo y posterior verificación (if((input(pin_A2)==1) && (input(pin_A3)==0)){) eliminás pulsos muy cortos (falsos). Es un recurso fácil pero lejos de infalible, porque si la entrada viene ruidosa también va a fallar, aunque menos.
Sabes que yo tampoco lo entiendo, al principio estaba sin retardos y en el simulador corría perfectamente, pero luego en la vida real no se detectaban algunas interrupciones, le puse el retardo y anduvo de 10, nunca entendí por que...
...
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...
...
Yo copypego tu código, sin tocar nada lo compilo y lo ejecuto en Proteus --> Ese if reconoce perfectamente a A2 y A3.
Por otro lado, si la frecuencia máxima de los pulsos del encoder es 200Hz, son 1.25ms entre flancos de fase A y B --> No entiendo para qué metés retardos que suman 3ms dentro de la interrupción.
Sabes que yo tampoco lo entiendo, al principio estaba sin retardos y en el simulador corría perfectamente, pero luego en la vida real no se detectaban algunas interrupciones, le puse el retardo y anduvo de 10, nunca entendí por que...