Autor Tema: Servos en 18f4550 (ayuda por favor)  (Leído 4906 veces)

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

Desconectado novatopic

  • PIC10
  • *
  • Mensajes: 3
Servos en 18f4550 (ayuda por favor)
« en: 15 de Junio de 2009, 12:28:37 »
Por favor necesito ayuda con el  PIC 18F4550, estoy intentando controlar un servo y no puedo hacer que funcione. La verdad es que soy muy novato en esto de los pics pero ya he conseguido hacer circuitos simples con leds y pulsadores( secuencias de luces, rutinas, etc) y el pic hacia lo que yo queria, pero con los servos no se que pasa.
El circuito es el siguiente:

http://img269.imageshack.us/img269/6986/sinsimular.jpg

o este:



El codigo es de Mikrobasic (el lenguaje que estoy utilizando, tengo PicBasic Pro en un CD pero no lo he mirado mucho):

program servo_18F4550

symbol pul1 = portd.0
symbol pul2 = portd.1

sub procedure pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as byte) ' Aqui genera el pulso para el servo
    Setbit(Puerto,Pin)                                                         
    delay_Cyc(Pos)                                                              ' Tambien he probado agregar otros delay_Cyc (pues el codigo original era para 4 Mhz
    Clearbit(Puerto,Pin)                                                        ' Pero tampoco a funcionado, y solo tengo cristal de 20 y 12 Mhz
end sub

main:
CMCON = 7
INTCON = 0
ADCON1 = 7

TRISB = 0
TRISD = 1
PORTB = 0
PORTD = 0


while TRUE
if pul1 = 1 then
 pulsout(portb,6,30)
 delay_ms(10)
end if

if pul2 = 1 then
 pulsout(portb,6,240)
 delay_ms(10)
end if

if (pul1 = 0) and (pul2 = 0) then
pulsout(portb,6,135)
delay_ms(10)
end if

wend
end.

Y el objetivo es hacer que el servo gire en una u otra direccion dependiendo del pulsador que presione, si ninguno esta presionado, pues vuelve a su posicion central. Esto es para ir aprendiendo, despues pretendo hacer cosas mas complejas.
Pero al conectar la alimentacion el servo se desplaza en un sentido sin que ningun pulsador este presionado y alli se queda haciendo fuerza en ese sentido. Tambien he probado quitar los pulsadores e intentar que el servo vaya a su posicion central, pero ocurre lo mismo, apenas conecto la alimentacion se va para un lado y ahi queda.
La verdad me tiene bastante frustrado, pero sigo intentando y probando con el codigo (aumentando o disminyendo el delay_Cyc entre el setbit y el clearbit) y la configuracion del Pic.
Ultimamente me he limitado a utilizar un simulador para probar, por temor a quemar el pic o dañar los servos, donde vivo es muy dificil conseguir estos componentes electronicos, los que tengo tuve que encargarlos por internet y sale bastante caro. Estoy usando el Proteus Isis 7.2 y no tengo problemas en simular y hacer funcionar servos con pics 16F, pero con el 18F4550 no hay caso, me supera.

En la ventana "Edit Projec" del MKB tengo configurado de la siguiente forma:
PLLDIV_5_1L, CPUDIV_OSC1, USBDIV_1_1L, FOSC_HS_1H, WDT_OFF, MCLRE_ON, PBADEN_OFF, LVP_OFF, DEBUG_OFF

Estoy utilizando un cristal de 20 Mhz con condensadores de 22p, pero tambien tengo uno de 12 Mhz (de 4 Mhz no he podido conseguir). Si alguien pudiera mostrarme un programa que funcione, me seria de gran ayuda y de ahi podria ir deduciendo futuras modificaciones. La idea es ir aprendiendo lo basico (configuracion del pics, fuses, habilitar o desabilitar las funciones de los PORT, etc) y luego poder sacarle todo el provecho que tiene este pic.
Por si les sirve les comento que para programar el pic utilizo Winpic 3.64, y como alimentacion tengo una fuente ATX de un pc antiguo con voltajes de 5v y 12v. Bueno espero que alguien pueda guiarme y de antemano les agradezco su ayuda.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Servos en 18f4550 (ayuda por favor)
« Respuesta #1 en: 15 de Junio de 2009, 13:39:18 »
Para que el servo responda tienes que enviarle un pulso con cierta periodicidad, cada 20ms y dependiendo del ancho del pulso se centrará o girará en algún sentido. Te digo esto porque en el código que has realizado no veo que estés haciendo esto.
Aquí algo de teoría y un ejemplo.
No contesto mensajes privados, las consultas en el foro