Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
aqui hago mi pequeño aporte para el medidor de disrancia con el SRF05 simulado en proteus y en picbasic (microcode). este envia el pulso de 10ms y escucha el eco y mide en un lcd. puedo observar esto en el osciloscopio de proteus 7.6 Sp0.
si falta algo por favor escríbanme. mi email es atravesdelforo@noseamosegoistas.es.
si tienen algun aporte tambien será bien recibido. gracias...
#include <16f876.h>
#fuses XT,NOWDT
#include <delay.c>
#include <delay.h>
#include <lcd.c>
#include <math.h>
void main (void);
unsigned intBAN=0;
unsigned long TOTAL=0, CM=0, milesimas=0, centenas=0, decenas=0, unidades=0;
void interrupt (intervoid);
if{
(CCP1L F==1) //Si la interrupción fue por CCP entonces...
{TOTAL=(CCPR1H<8)+CCPR1L; //Almaceno dato del CCPRH:L
TMR1ON=0; //Apago conteo del TMR1
BAN=1; //Activo bandera de visualización en lcd
CCP1IF=0; //Bandera de interrupción a 0
} //Fin if parte positiva
} //Fin de servicio a interrupciones
{INTCON=0b11000000; //Habilita Interrupciones Externas
PIE1=0b00000100; //Habilita interrupción por Capture/Compare/PWM
TRISC2=1; //Pin RC2 como entrada de señal de eco del sensor
TRISB=0x00; //Bus de datos del lcd
lcd_init(10); //Inicializa la lcd
lcd_clear(10); //Borra la lcd
TMR1H=0x00; //Borra conteo del TMR1 TMR1L=0x00;
T1CON=0b00000000; //Prescaler 1:1, oscila con cristal externo, apagado
CCP1CON=0b00000100; //Modo Captura cada flanco de bajada
RB7=1; //Envío señal para activar pulso de ultrasonido en el sensor
DelayUs(25); //Delay OBLIGATORIO mínimo para activación
TMR1ON=1; //Empiezo el conteo de tiempo ya que...
RB7=0; //...la activación del sensor se da en el flanco de bajada
while(1) //Ciclo infinito
{if(BAN==1) //Si la bandera de visualización esta activada entonces...
{DelayMs(25); //Delay que controla frec. de toma de datos (mín 10 ms)
lcd_goto(0x0); //Ir a posición 0 de la primer línea del lcd
CM=(TOTAL*9*2)/10000; //Conversión de ms a ft
milesimas=CM/1000; //Rutina de Visualización en lcd
centenas=(CM-milesimas*1000)/100;
decenas=(CM-milesimas*1000-centenas*100)/10;
unidades=CM-milesimas*1000-centenas*100-decenas*10;
lcd_putch(milesimas+0x30);
lcd_putch(centenas+0x30);
lcd_putch(decenas+0x30);
lcd_putch('.');
lcd_putch(unidades+0x30);
lcd_puts("distancia");
TMR1H=0x00; //Conteo del TMR1 a ceros
TMR1L=0x00;
RB7=1; //Repito rutina de
DelayUs(10); //Delay OBLIGATORIO TMR1ON=1;
RB7=0;
}//Fin if parte positiva
}//Fin while interno }//Fin main
hola
encontre un programa de ultrasonido y le modifique algunas cosas a las que tengo que hacer yo
es decir los puertos que voy a utilizar y cosas asi..
el programa cuando lo voy a compilar no funciona nose si sera que falta alguna libreria
el programa es el siguiente..
#include <16f876.h>
#fuses XT,NOWDT
#include <delay.c>
#include <delay.h>
#include <lcd.c>
#include <math.h>
void main (void);
unsigned intBAN=0;
unsigned long TOTAL=0, CM=0, milesimas=0, centenas=0, decenas=0, unidades=0;
void interrupt (intervoid);
if{
(CCP1L F==1) //Si la interrupción fue por CCP entonces...
{TOTAL=(CCPR1H<8)+CCPR1L; //Almaceno dato del CCPRH:L
TMR1ON=0; //Apago conteo del TMR1
....
....