TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Noelillo en 13 de Octubre de 2013, 10:26:48
-
Tengo un sensor ultrasónico y necesito ayuda. Estoy programando en PROTON IDE.
No consigo hacerlo funcionar.
Gracias :oops:
-
No tengo tiempo, tengo una criatura de 2 meses y medio y no tengo tiempo de invertigar... 8) :?
-
Entonces abandona hasta que ya tengas criados a tus hijos. ;-) ;-)
Yo tengo tres y siempre pude hacerme tiempo, algo tienes que sacrificar...
-
Jaja!!! Es un invento para el.
Pero vamos, esto de +- ( electrónica) es un hobby y un hijo es una dedicación.
Un saludo, sacare un poco de tiempo.
-
Pero bueno, no hay nadie que me pueda ayudar??
A ver si este sábado lo saco. :(
Un saludo.
-
Si pusieras lo que has hecho y donde te trancaste es mas facil que te ayuden...
-
hombre , si la decision es facilisima, deja un lado al crio y olvidate de el, mejor invierte tu valioso tiempo en los pic que te aseguro dan mas satisfacion :-) lo digo por experiencia :D
-
Que dices loco!! Un hijo es el mejor invento que he hecho.
Tengo un ejemplo en asm del libro 16F84A...
La idea en pasarlo a PROTON.
Mañana intentare hacer el ejemplo en asm y ver si funciona el sensor, xq puede q el sensor este mal, puede!
Se que lo sacare, pero primero mi hijo!!!
Un saludo y gracias x vuestro comentaría.
-
Pues el sensor funciona, tengo que pasarse asm a PROTON BASIC ... Las interrupciones en PROTON no funciona.
-
En un rato he sacado esto.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Miguel Noe Garcia Perez *
'* Notice : Copyright (c) 2013 Iberica 2000 *
'* : All Rights Reserved
'* Date : 04/11/2013
'* Version : 1.0
'* Notes :
'* :
'****************************************************************
DEVICE 16F877a
XTAL = 4
' LCD pin Configuracion
lcd_type = 0
LCD_LINES = 4
LCD_DTPIN = PORTb.4
LCD_RSPIN = PORTb.2
LCD_ENPIN = PORTb.3
LCD_INTERFACE = 4
ALL_DIGITAL = ON
'76543210
TRISa = %00010000
ON_HARDWARE_INTERRUPT GOTO Flash
SYMBOL LED = PORTc.1
SYMBOL TMR0_Carga60micros = 27 '%11011' 27
symbol MaximaDistancia = 250
symbol MinimaDistancia = 3
symbol Disparo = porta.3
symbol Eco = porta.4
symbol Disparo2 = porta.1
dim Distancia as word
dim cm as byte
dim mm as byte
dim Total as word
delayms 200
cls
Inicio:
OPTION_REG = %00000000 ' prescaler 2 para tmr0
low disparo
Principal:
distancia = 0
high disparo ' disparo
delayus 20
low disparo
Espera_eco1:
if eco=0 then goto Espera_eco1 ' esperamos el flanco de subida
tmr0 = TMR0_Carga60micros ' cargamos 27 en tmr0
INTCON = %10100000 ' autoriza interrupcion del tmr0 (T0IE)
Espera_eco0:
if eco=1 then goto Espera_eco0 'ESPERA FLANCO DE BAJADA
INTCON = %00000000 'PROHIBE INTERRUP
gosub Visualiza 'VISUALIZA LA DISTANCIA
delayms 200
goto principal
' LA INTERRUP COMIENZA AQUI.
Flash:
tmr0 = TMR0_Carga60micros
distancia = distancia + 1
T0IF = 0
CONTEXT RESTORE ' RESTAURA LOS REGISTROS Y SALE DE LA INTERRUP.
' V I S U L I Z A M E D I D A
visualiza:
cm = tmr0
mm = tmr0
distancia = distancia * 228
Total = mm + distancia
Total = Total * 3 ' 2.5
print at 1,1,"D ",dec4 distancia,"mm ",dec3 mm
print at 2,1,"t ",dec4 Total
return
me mide bien de 50mm a 200mm a partir de mas de 200mm no en una medida fiable...
A ver si alguien lo puede mejorar
un saludo
-
No hagáis caso a este programa no esta buen.
Lo siento.
Estoy mirando a ver si lo soluciono.
-
Para lo que quieres hacer existe muchas formas el proton tiene una instruccion llamada pulsin que te permite medir el ancho de un pulso a intervalo de 10us si operas a 4MHz o 2us si operas a 20Mhz.
Y asi resuelves facilmente el problema otra forma es utilizar el modulo CCP del pic en modo captura. :mrgreen:
En fin existen muchas formas de hacerlo y san google te puede ayudar :D
Saludos
-
Gracias!! Lo mirare.
-
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 16/05/2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F877A
Xtal 20
' LCD pin Configuracion
LCD_Type = 0
LCD_Lines = 4
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.2
LCD_ENPin = PORTB.3
LCD_Interface = 4
All_Digital = On
TRISA = %00000010
TRISB = %00000000
CMCON = %00000111
CCP1CON = %00000000
ADCON0 = %00000000
Symbol triger = PORTA.0
Symbol eco = PORTA.1
Symbol led = PORTA.2
Dim temp As Word
Dim dista As Word
Dim VAR1 as word
DIM PULGADAS AS byte
'el sensor debe recibir pulso de disparo de 10uS
'la distancia es proporcional al ancho de pulso del eco
'eco de 100uS a 18mS y debe esperar 10 mS antes de intentar otro trigger
'devuelve 36mS si no se detecta nada
'hacer una formula para calcular la distancia en centimetros
'distancia entre 3 y 300cm
delayms 200
cls
'secuencia de inicio
'1234567890123456
Print At 1,1,"SENSOR ULTASONIC"
Print At 2,5,"SHF-04"
DELAYMS 1500
CLS
loop:
PulsOut PORTA.0,50, High
DelayUS 10
dista = PulsIn eco,1
If dista > 18000 Then
CLS
Print At 1,4,"DISTANCIA"
Print At 2,5,"MAXIMA"
DELAYMS 1000
EndIf
If dista < 80 then
CLS
Print At 1,4,"DISTANCIA"
Print At 2,5,"MINIMA"
DELAYMS 1000
endif
temp=dista/28 '26-28 ES LA CALIBRACION en cm
TEMP = TEMP * 10 ' en mm
PULGADAS = TEMP / 25 ' en pulgadas
if TEMP >=30 and temp <= 6660 then
Print At 1,4,"DISTANCIA:"
Print At 2,1,dec3 temp," mm"," - ",DEC3 PULGADAS,"''"
DelayMS 100
endif
GoTo loop
End
ya esta, lo busque en internete y lo mejore un poco, solo un poco...
un saludo
-
jajajaj sabia que lo lograrias. :mrgreen:
Por eso te lo decia que San google tenia la respuesta y aunque el programa original esta hecho en pbp es muy sencillo pasarlo a proton :D
Saludos
-
Cabron!! Que tengo una criatura de 4 mese y no tengo tiempo.
Gracias y un saludo.