TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Axel_18 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.
-
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:
sub procedure Delay_us(const time_in_us as word)
Y luego agrega en la descripción:
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:
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:
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:
-
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:
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:
-
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.
-
Me alegra que te haya funcionado, y gracias por publicar tus avances.
Saludos, nos leemos! :mrgreen:
-
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!
-
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í:
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: