Autor Tema: Ayuda con Interrupción Externa (RB0/INT) PIC16F877A  (Leído 2290 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Zugzwang

  • PIC10
  • *
  • Mensajes: 2
Ayuda con Interrupción Externa (RB0/INT) PIC16F877A
« en: 24 de Septiembre de 2018, 01:15:48 »
Estoy intentando utilizar el sensor de proximidad por ultrasonido HC-SR04: https://www.mouser.com/ds/2/813/HCSR04-1022824.pdf
Y poder visualizar la distancia en un lcd. Con este código me salen valores aleatorios en el lcd incluso si desconecto el sensor.

Citar
#include <medidor_de_distancia_main.h>
#use standard_io(D)
#use standard_io(B)

#define LCD_ENABLE_PIN  PIN_D0                                   
#define LCD_RS_PIN      PIN_D1                                   
#define LCD_RW_PIN      PIN_D2                                   
#define LCD_DATA4       PIN_D4                                   
#define LCD_DATA5       PIN_D5                                   
#define LCD_DATA6       PIN_D6                                   
#define LCD_DATA7       PIN_D7 
#include <lcd.c>

//!#define ECHO PIN_B6
#define TRIG PIN_B7

volatile int tiempo = 0;
volatile float distancia = 0;

#INT_EXT
void ext_isr(){
   tiempo = get_timer1();
   distancia = (float)(tiempo/2)/(29.15);
}

void main()
{
   lcd_init();
   lcd_putc('\f');
   OUTPUT_LOW(TRIG);
   ext_int_edge(H_TO_L);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);      //65.5 ms overflow
   
   while(TRUE)
   {
      OUTPUT_HIGH(TRIG);
      delay_us(10);
      OUTPUT_LOW(TRIG);
      set_timer1(0);
      delay_ms(65);
      printf(lcd_putc,"\f Dist= %2.2f",distancia);
      delay_ms(100);
     
   }//while(TRUE)

}//void main()

Se supone que el echo es el pin RB0 y accede a la interrupción externa por flanco de bajada. En ese instante se obtiene el valor del timer1 = tiempo. Ayuda por favor :(