USO DE UN SRF05 Y LCD
OBJETIVOS
- Aprender hacer uso de un SRF05.
- Uso de interrupciones externas y contador con el TMR0
DESCRIPCION:
El presente proyecto hace uso de un SRF05 y el LCD.
- Como primer paso se habilita el SRF05 a través del pin Trigger conectado al PORTE.1 del PIC , luego se hace una lectura por el pin Echo conectado PORTB.0 del PIC
- Se mostrara en el LCD la distancia en cm que hay entre el objeto y el sensor.
DESARROLLO:
Para realizar la práctica planteado es necesario ubicar algunos JUMPER de tal manera que permita el uso de los componentes necesarios para esta práctica.
1.El módulo Desarrollo PIC16F887 puede utilizar una de dos fuentes de alimentación.
- Fuente de alimentación USB desde PC a través del cable USB
- Fuente de alimentación EXT desde un Jack DC.

2.En el módulo de desarrollo se dispone de un conector para colocar un LCD 2x16, a la vez posee un potenciómetro que se utiliza para ajustar el contraste.

3.Para hacer uso del pin RB0 el JUMPER que esta alado de los botones debe estar en la posición DS (Disable=deshabilitado) para ambos botones como se muestra en la figura. El motivo es que estamos haciendo uso del pin RB0 del microcontrolador y al estar conectado a los botones es susceptible a errores.

Adaptador de IDC a conexión tipo servo I&T: nos ayuda a tener disponibles más conexiones para servos.

Sensor ultrasónico SRF05: Genera una onda de sonido y recibe una respuesta del mismo sonido que envío.

- Circuito Implementado

PROGRAMACION:
'*******************************************************************************
'******************* Ideas & Tecnología **************************
'******************* Módulo Desarrollo PIC16F887 I&T **************************
'******************* www.ideastechnology.com **************************
'
' * Nombre proyecto:
' SRF05_LCD
' * Descripción:
' Uso del módulo de distancia ultrasónico SRF05
' PORTe.1 disparo el tiempo de alto 10us
' PORTB.0 tomara el eco de la recepción
' * Configuraciones:
' Microcontrolador: PIC16F887
' Oscillator: INT_RC_OSC_NOCLKOUT, 8MHz
' Compilador: MikroBasic 3.2v
'*******************************************************************************
'***** Nombre proyecto *****
program SRF05_LCD
' Asignamos los pins del pic a usar al lcd
dim LCD_RS as sbit at RB2_bit ' PORTB.1 asignado al PIN RS de la LCD
LCD_EN as sbit at RB3_bit ' PORTB.3 asignado al PIN EN de la LCD
LCD_D4 as sbit at RB4_bit ' PORTB.4 asignado al PIN D4 de la LCD
LCD_D5 as sbit at RB5_bit ' PORTB.5 asignado al PIN D5 de la LCD
LCD_D6 as sbit at RB6_bit ' PORTB.6 asignado al PIN D6 de la LCD
LCD_D7 as sbit at RB7_bit ' PORTB.7 asignado al PIN D7 de la LCD
LCD_RS_Direction as sbit at TRISB2_bit
LCD_EN_Direction as sbit at TRISB3_bit
LCD_D4_Direction as sbit at TRISB4_bit
LCD_D5_Direction as sbit at TRISB5_bit
LCD_D6_Direction as sbit at TRISB6_bit
LCD_D7_Direction as sbit at TRISB7_bit
' declaracion de variables
dim text as string[5]
dim flanco, pulso as byte
dim distancia as word
sub procedure interrupt
if TestBit(INTCON,INTF) then ' bandera de la interrupción externa activada
ClearBit(INTCON,INTF) ' bandera de la interrupción externa borrada
if flanco = 0 then ' cuando el flanco va de vajo a alto
ClearBit(OPTION_REG,INTEDG) ' interrupción cuando paso al rizado bajo
flanco = 1 ' cambiamos el flanco bajo
TMR0 = 0 ' enceramos el timer
else ' cuando el flanco va de alto bajo
pulso = TMR0 ' tomamos el valor del timer
SetBit(OPTION_REG,INTEDG) ' interrupción cuando paso al rizado alto
flanco = 0 ' cambiamos de flanco alto
end if
end if
ClearBit(INTCON,T0IF)
end sub
' Funcion que me permite medir la distancia del sensor ultrasónico
sub function srf05_leer() as word
dim tiempo as word
PORTE.1 = 1 ' habilitamos el disparo
delay_us(50) ' con un tiempo de 50us
PORTE.1 = 0 ' apagamos el disparo
delay_ms(20) ' hay un tiempo de espera del eco
tiempo =( pulso*128)/58 ' convertimos de pulgadas a centímetros
result = tiempo ' resultado de la distancia
end sub
main:
' Registro Oscilador de control
OSCCON = 0X75 ' Oscilador interno de 8mhz
' Registro de Opciones
' Registro de Opciones
OPTION_REG = 0XC7 ' desactiva el pull up de portb
' activa el rizado alto
' prescalador tmr0 255
' Registro control de interrupciones
INTCON = 0XD0 ' Activado interrupciones globales
' Activado interrupciones periféricas
' Activado interrupción externa portb.0
' Registro PUERTO A
TRISA = 0X00 ' todas los pines como salidas
PORTA = 0X00
' Registro PUERTO B
TRISB = 0X01 ' portb.0 como entrada digital, las demás salidas
PORTB = 0X00
' Registro PUERTO B
TRISC = 0X00 ' todas los pines como salidas
PORTC = 0X00
' Registro PUERTO E
TRISE = 0X00 ' todas los pines como salidas
PORTE = 0X00
' Selección de registro analógico. 1 analógico, 0 digitales
ANSEL = 0X00 ' AN<7:0>
ANSELH = 0X00 ' AN<13:8>
delay_ms(250)
Lcd_Init() ' inicializamos la lcd
Lcd_Cmd(_LCD_CLEAR) ' borramos la pantalla
Lcd_Cmd(_LCD_CURSOR_OFF)
Lcd_Out(1,1,"ideastechnology") ' escribimos el texto en la primera linea
Lcd_Out(2,1,"dist. 0000 cm ") ' escribimos el texto en la segunda linea
flanco = 0 ' primer flanco bajo
while true
distancia = srf05_leer() ' leemos el valor del sensor y lo depositamos en distancia
WordToStr(distancia,text)
Lcd_Chr(2,11,text[4])
Lcd_Chr(2,10,text[3])
Lcd_Chr(2,9,text[2])
Lcd_Chr(2,8,text[1])
Lcd_Chr(2,7,text[0])
delay_ms(100)
wend
end.
'*******************************************************************************
'******************* Ideas & Tecnología **************************
'******************* Módulo Desarrollo PIC16F887 I&T **************************
'******************* www.ideastechnology.com **************************
'*******************************************************************************
