Help mee ... então quero usar um pic para saber para qual lado o encoder esta, praticamente ter na saida 2 leds, para um lado pisco 1 led e para outro lado pisco outro led.. objetivo é que cada "clique" do encoder seja um pulso piscando o led respectivo. Não quero usar interrupção, porque quero usar o maximo de encoders em um pic
testei este programa que peguei da internet.. não consigo modificar para o sinal sair em dois pinos ( um para cada lado) depois da comparação eu usei
OUTPUT_BIT (PIN_B1);
OUTPUT_BIT (PIN_B0);
mas não da muito certo :$ ... e quando da certo os leds acendem fracos.. OBJETIVO É QUE CADA CLIQUE DO ENCODER PISQUE UM LED, não quero para contar, mas somente para pulsos OBRIGADO GENTE
codigo que peguei da internet
#include <16F628A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
#use delay(clock=4000000)
#byte porta = 0x05 // Asignamos PortA.
#byte portb = 0x06 // Asignamos PortB.
// ---------- Programa Principial ----------
void main()
{
port_b_pullups(FALSE); // Sin resistencias pullups a las salidas del puerto B.
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Al no usar el TIMER configuramos lo más básico.
setup_comparator(NC_NC_NC_NC); // Sin comparadores.
setup_vref(FALSE); // Al no usar comparadores no necesitamos Vref.
//---- Fin de la configuración del 16F628A ----
int8 x; // Declaramos el valor de X como byte, se corresponderá con los 8 LEDs de salida.
int8 enc; // Se almacenará el valor actual de RA0 y RA1, hasta la siguiente comparación.
int8 aux; // Se almacenará el valor anterior de RA0 y RA1, hasta la siguiente comparación.
set_tris_a(0b11111); // Puerto A como entradas. Sólo usamos RA0 y RA1.
set_tris_b(0b00000000); // Puerto B como salidas, para los 8 LEDs.
portb=0; // Inicialmente ponemos a cero el puerto B.
x=0; // Inicialmente ponemos a cero la variable que se usa para contar.
enc=0; // Inicialmente ponemos a cero la variable que tomará los valores de RA0 y RA1.
while (true)
{
aux=enc; // Igualamos 'AUX' y 'ENC' para luego comparar cuando cambie 'ENC'.
enc=porta & 3; // Aislamos RA0 y RA1 como un número de 2 bits y se carga en la variable 'ENC'.
if ((aux==2)&&(enc==3))// Si en la comparación hay flanco de subida,
{
x++; // entonces incrementar una unidad el valor de X.
}
if ((aux==3)&&(enc==2))// Si en la comparación hay flanco de bajada,
{
x--; // entonces decrementar una unidad el valor de X.
}
portb = x; // El valor de X sale por el puerto B, los 8 LED de salida.
}
}