Autor Tema: problema con PWM simple en MKB  (Leído 3305 veces)

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

Desconectado Axel_18

  • PIC16
  • ***
  • Mensajes: 152
problema con PWM simple en MKB
« en: 21 de Junio de 2008, 13:55:34 »
hola a todos...
me e estado interesando por mikrobasic y trate de hacer un pwm a mi manera..pero me arroja un error cuando intento poner la variable "a" en "delay_ms()"
no se de que otra forma puedo hacer un pwm ya que los ejemplos que trae el mismo MKB no los entiendo mucho...

agradeceria si me puediesen ayudar...
saludos!!

aca va el programa


program test
      dim a as byte
      dim b as byte
      TRISA=0
      TRISB=0

            a=10
            b=10



  inicio:

      portb=%00000101
      delay_ms(a)
      portb=0
      delay_ms(b)

      if porta.0=1 then
      a=a+1
      b=b-1
      end if
      if porta.1=1 then
      a=a-1
      b=b+1
      end if

      'limt
      if a>=19 then
      a=19
      b=1
      end if
      if a<=1 then
      b=19
      a=1
      end if
      goto inicio
      end.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: problema con PWM simple en MKB
« Respuesta #1 en: 21 de Junio de 2008, 14:45:21 »
Saludos Axel!
Viejo te recomiendo que leas la ayuda que trae el programa, es muy útil.

En la función Delay_ms, menciona que la sintaxis es:
Citar
sub procedure Delay_us(const time_in_us as word)
Y luego agrega en la descripción:
Citar
Creates a software delay in duration of time_in_us microseconds (a constant). Range of applicable constants depends on the oscillator frequency.

O sea que no puedes colocar una variable como argumento, sólo constantes.
Para usar un argumento variable existe la función Vdelay_ms(). La descripción es:
Citar
Creates a software delay in duration of time_in_ms milliseconds (a variable). Generated delay is not as precise as the delay created by Delay_ms.
Y hasta coloca un ejemplo:

Código: [Seleccionar]
pause = 1000
' ...
Vdelay_ms(pause)  ' ~ one second pause

Así que en tu programa, cambia el delay_ms por Vdelay_ms, y declara las variables "a" y "b" como Word. Así te debe funcionar.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: problema con PWM simple en MKB
« Respuesta #2 en: 21 de Junio de 2008, 14:56:11 »
Axel, no soy un experto en Mikro Basic (de hecho lo instalé fue la semana pasada  :D )...
Pero haciendo los cambios que te mencioné, de esta forma:
Código: [Seleccionar]
Program Prueba_delay
      dim a as word
      dim b as word
      TRISA=0
      TRISB=0
      a=10
      b=10
 inicio:
      portb=%00000101
      Vdelay_ms(a)
      portb=0
      Vdelay_ms(b)

      if porta.0=1 then
      a=a+1
      b=b-1
      end if
      if porta.1=1 then
      a=a-1
      b=b+1
      end if

      'limt
      if a>=19 then
      a=19
      b=1
      end if
      if a<=1 then
      b=19
      a=1
      end if
      goto inicio
      end.
Compiló perfecto!  :lol:
Espero puedas terminar exitosamente tu proyecto.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Axel_18

  • PIC16
  • ***
  • Mensajes: 152
Re: problema con PWM simple en MKB
« Respuesta #3 en: 21 de Junio de 2008, 23:14:49 »
grax firepic me va a ser util eso  :mrgreen:

pero intruciando los ejemplos adapte una para el 16f628a  y funciona perfecto.....PERO el unico problema es que puedo generar una fercuencia minima de 500 hz
de unos 2 ms por pulso mas o menos....se los dejo aca para quien lo nesesite..



program testpwm
   dim j as byte
   dim i as byte       `declaro variables
   j =120               'indica el ciclo util del pwm es de 0% con un 0 y de un 100% con 255
  PORTB=0           ' Initializa PORTB
 Pwm_Init(500)        ' Initializa modulo PWM , freq = 500Hz.
  Pwm_Start             ' Start PWM

      inicio:



    Pwm_Change_Duty(j)  ' cambia el ciclo util
       `cambio el ciclo dependiendo de las nesesidades
       if PORTB.0=1 then
       j=j+1
       end if

       if PORTB.2=1 then
       j=j-1
       end if
       
     
        `limites
      if j>250 then

       j=250
       end if
       if j<=1 then

        j =1
        end if
       


  goto inicio
 
        end.


Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: problema con PWM simple en MKB
« Respuesta #4 en: 22 de Junio de 2008, 17:16:30 »
Me alegra que te haya funcionado, y gracias por publicar tus avances.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Axel_18

  • PIC16
  • ***
  • Mensajes: 152
Re: problema con PWM simple en MKB
« Respuesta #5 en: 22 de Junio de 2008, 20:48:34 »
otra duda....por lo menos en microcode studio habia una pcion para desabilitar las salidas analogas y poder trabajar con estos puertos de forma normal...
la instruccion era CMCON=7
pero como hago esto en mikrobasic?....o las desavilita solas y uno tiene que habilitarlas?

saludos!

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: problema con PWM simple en MKB
« Respuesta #6 en: 22 de Junio de 2008, 21:02:47 »
por lo menos en microcode studio habia una pcion para desabilitar las salidas analogas
Me imagino que te refieres a "entradas", cierto?

Bueno, me parece que basic asume todas las E/S como digitales (más aún si la estás usando en el código como tal) a menos que especifiques lo contrario.
En el tiempo que trabajé con ese lenguaje nunca tuve que deshabilitar los canales analógicos.
Ahora bien, si quieres estar bien seguro de tener todas las entradas analógicas lo puedes hacer escribiendo en el registro ADCON1 el valor que corresponda.
Lee la datasheet del microcontrolador que estés utilizando y verás qué valor tienes que colocar para configurar todos los canales analógicos con entradas/salidas digitales.
En MikroBasic escribirías algo así:
Código: [Seleccionar]
ADCON1=$valor
El "$" si vas a escribir el valor en hexadecimal, claro está. Y eso sería todo.
Ok te sigo aconsejando que leas la ayuda del programa, que es bastante entendible y explicativa.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything