TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: ESA_Worker en 12 de Diciembre de 2010, 15:09:04
-
Hi all,
I have been trying to implement an ultrasonic meassurement and I am not able to throw a PWM into RB0, here is the code:
'Definición de variables Globales
dim FueraRango as char
const PULSO as longint = 300
const MAXIMO as longint = 15
'Programa de interrupción
sub procedure interrupt
if(PIR1.TMR1IF) then
FueraRango=1
PIR1.TMR1IF=0
end if
end sub
sub procedure init_lcd
Lcd_Config(PORTB,7,6,5,4,PORTA,2,1,0)
Lcd_Cmd(Lcd_Clear)
end sub
sub procedure printvar (dim byref n as char[16], dim a as byte)
dim res as char [16]
Lcd_Cmd(Lcd_Clear)
ByteToStr (a, res)
Lcd_Out(1,1,n)
Lcd_Out(2,1, res)
end sub
sub procedure pwm_ini
Pwm_Init(40000)
Pwm_Change_Duty(128)
end sub
sub procedure pwm_on
Pwm_Start
Delay_us(PULSO)
Pwm_Stop
Delay_us(PULSO*2)
end sub
sub procedure initerrup
INTCON.GIE=1 'todas las int
INTCON.PEIE=1 'overflow
PIE1.TMR1IE=0 ' high
PIE1.CCP1IE=1
PIR1.TMR1IF=0 ' low
T1CON.TMR1ON=0 'stop
end sub
sub procedure interactua
T1CON.TMR1ON=0
FueraRango=0
TMR1H=0
TMR1L=0
T1CON.TMR1ON=1
PIE1.TMR1IE=1
end sub
sub procedure initialization
CMCON=0x07
ANSEL=0x10 'Usar pines como digitales
TRISA=0x00 'Puerto A como salida
TRISB=0x00 'Puerto B como salida
TRISA.3=0xFF 'Pulsador
TRISA.4=0xFF 'Receptor
T1CON.TMR1CS=0
init_lcd
end sub
sub procedure espera_boton
'Esperamos a que el botón se pulse
while PORTA.3 <> 0
wend
'Esperamos a que el botón se suelte
while PORTA.3 = 0
wend
end sub
main:
initialization
pwm_ini
initial:
initerrup
while true
printvar ("Pulse el boton",1)
delay_us(100000)
interactua
espera_boton
printvar ("Lanzado",1)
delay_us(100000)
printvar ("TXR1",PORTB.0)
delay_us(100000)
pwm_on
while PORTA.3 <> 0
printvar ("TXR2",PORTB.0)
delay_us(100000)
wend
T1CON.TMR1ON=0
PIE1.TMR1IE=0
INTCON.GIE=1
wend
end.
I want to know why pulse is not going thorugh the transmisor when in the laboratory without code, only inserting frequencies the board work fine.
Thanks!!!
IN SPANISH: El caso es que no me sale el pulso por el transmisor de ultrasonido, la placa está bien porque metiendole directamente la frecuencia y midiendo con el osciloscopio funiona, pero no sé por qué no me sale el pulso por el transmisor...si alguien pudiera ayudarme...GRACIAS!!!!
-
Hola ESA_Worker.
Exactamente no entiendo tu problema, pero he logrado ver que en tu código tienes 2 procedimientos de interrupción, esto posiblemente provoque ambiguedades al complidador.
En MikroBasic lo recomendable es que solo exista un procedimiento de Interrupción y que ahí preguntes que activo la interrupción y luego tomar las dieciciones correspondientes.
Te recomiendo que pongas un esquema del proyecto así podremos entenderte mejor, también que digas con que programa y con que versión estas trabajando.
Para poner una imagen puedes leer este link http://www.todopic.com.ar/foros/index.php?topic=8120.0 (http://www.todopic.com.ar/foros/index.php?topic=8120.0).
Tambien revisa este otro http://www.todopic.com.ar/foros/index.php?topic=20332.0 (http://www.todopic.com.ar/foros/index.php?topic=20332.0)
Como dije antes, no se exactamente cual es tu problema, es decir, no se si tu problema es que el PIC no genera la onda PWM o si el PIC genera la onda PWM y el transmisor no la recibe y la retrasnmite.
-
Hola bigluis,
mi problema es que el PIC no genera la onda y por lo tanto el receptor no la recibe, no sé cómo comprobar que el PIC produce la onda. Yo hago visualizar la patilla RB0 en el LCD,pero siempre es cero...con lo cual no sé si hay onda o no....¿eso te sirve?
Un saludo,
-
¿Que PIC estas utilizando?
Según leo en tu código usas las funciones PWM_init y PWM_start, estas funciones solo sirven si el PIC que estas utilizando posee un modulo CCP, además en la mayoría de PIC que he utilizado la salida PWM no es en el PIN RB0, por lo cual dudo mucho que te funcione.
Lo otro podría ser que intentas implementar la señal PWM mediante software, pero tampoco miro por ningún lado donde mandas a activar y desactivar el pin RB0.
-
Ese codigo te lo bajaste de un sitio mejor seria hacer un codigo mas chico directo al pwm para mejor entendimiento del mikro basic.