TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: navaismo en 06 de Septiembre de 2006, 02:19:51

Título: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 02:19:51
Hola a todos!!! Bueno a peticion de los amigos aca esta el post de ejemplos, y a los moderadores sientanse libres de modificar lo que quieran,  cuando quieran para darle una mejor vista a esto.



Para cualquier tipo de duda por favor publicarlas en el post  Comenzando con Mikrobasic. (http://www.todopic.com.ar/foros/index.php?topic=13756.0)



INDICE :






           1.- Prender y apagar Led en PORTA.0  (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80941#msg80941)

           2.- Intercalación del estado de los Leds ubicados en el PORTB cada 0,5 seg (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80958#msg80958)

           3.- Juego de luces, manejo de arrays y for. (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80979#msg80979)

           4.- Juego de luces 2, instruccion for.  (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80995#msg80995)

           5.- Juego de luces 3, con llamadas a sub procedimientos, algo similar al manejo de las librerias. (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80997#msg80997)

           6.- Comprobacion de PORTB prendiendo Leds desde rb0 a rb7 y luego los apaga. (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80995#msg80995)

           7.- El clasico del auto fantastico usando la instruccion for. (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81186#msg81186)

           8.- Contador 0 a 9 haciendo uso de subprocedure (7seg)(Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81028#msg81028)

           9.- Contador 0 a 9 ascendente o descendente según el valor del PORTA.0 (7seg) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81302#msg81302)

          10.-Contador 0 a 9 ascendente (RAO) o descendente (RA1) (7seg) ( Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81537#msg81537)

          11.-Contador 0 a 9 ascendente (RAO) o descendente (RA1) usando comando button (7seg) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81549#msg81549)

          12.- "Hola amigos TODOPIC" (LCD) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80943#msg80943)

          13.- "Hola TODOPIC saludos" (LCD) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81209#msg81209)

          14.- Desplazando el Mensaje. (LCD) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80951#msg80951)

          15.- Lectura simple de un ADC (LCD) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg80987#msg80987)

          16.- Muestrar caracteres ASCII  (LCD) (Página 1) (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81271#msg81271)

        Y las  Miniguias en Video y Español  :-/

              Como Crear el Proyecto (http://www.elrebujito.es/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=79&ttitle=Video_tutoriales_MikroBasic:_Parpadeo_Led)
           
             Miniguia Primera Parte (http://www.elrebujito.es/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=80&ttitle=Video_Tutoriales_MikroBasic:_Minigu%C3%ADa_1)

             Miniguia Segunda Parte (http://www.elrebujito.es/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=81&ttitle=Video_Tutoriales_MikroBasic:_Minigu%C3%ADa_2)

             Miniguia Tercera Parte (http://www.elrebujito.es/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=82&ttitle=Video_Tutoriales_MikroBasic:_Minigu%C3%ADa_3)


Esperamos dar a los que empiezen en basic la misma ilusion que tenemos los que comenzamos este post  :P  



GRACIAS SAMSHIEL POR EL INDICE :-/ :-/ :-/


En general MKB (asi le llamaremos para abreviar), es muy similar a lo que usamos PBP o Proton solo que este se pone mas de moños si no ponemos bien las cosas o no declaramos bien.

Lo primero que hay que hacer es identificar como crear un nuevo proyecto y para eso les dejo este ejemplito para hacer el classssssssico programa de parpadear un led en este caso en el PORTA.0 de un 16F84A.

 :-) no me vean asi, hay que empezar desde el principio aunque hay quienes no lo necesiten, yo si. jeje. me costo un punto el no poder compilarlo a la primera.

este es el codigo para quienes les de flojera descargar el archivo


Código: FreeBasic
  1. program BlinkMKB
  2.  
  3. TRISA = 0
  4.  
  5. MAIN:
  6.  
  7.  PORTA.0 = 1                            ' AUN NO ENCUENTRO COMO PONER ALIAS SOLO EL CLASICO SYMBOL
  8.  DELAY_MS(500)                    ' AQUI USAMOS EN LUGAR DE PAUSE EN PBP, LA INSTRUCCION DELAY_MS Y OBVIAMENTE ES MILISEGUNDOS
  9.  PORTA.0 = 0
  10.  DELAY_MS(500)
  11.  
  12. GOTO MAIN
  13. END.                                      ' POR NO PONER ESE PUNTO NO ME COMPILO LA PRIMERA VEZ


PD:  no me vean como pirata solo trato de emular  - y digo emular porque ser igual imposible!!!- a mi amigo Giovanni con lo de los ejemplos, aunque estaria mejor que lo enriqueciran con mas no? como ves Gio?


Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 02:36:45
Hola:

Aplaudo tu iniciativa Max, y es como tu dices hermano, las cosas desde cero, esto puede ayudar a mas gente para que empiecen desde cero como lo estamos haciendo nosotros con este nuevo compilador, que a mi humilde manera de ver sera el futuro de Basci para PICs, asi qu a darle duro al MKB.

Algo que no me canso de insistir, y es porque a mi siempre me ayudado mucho, es leer la ayuda y revisar los ejemplos, MKB al igual que PBP y Proton, disponen de una excelente ayuda, bien detallado y comprensible, la gentre de Mikroelectronica nos brinda manuales de como podemos empezar con este lenguaje, con un tutorial sencillo para empezar con el primer proyecto y familiarizarnos con el entorno de MKB. Ase que como norma general, creo yo que es mas que necesario, que los que estemos interesados en aprender a utilizar este programa tengamos estos archivos a mano, y como siempre esta todo en ingles, asi que a darle duro al ingles panas  :D :D.

Una gran ventaja es que el demo es 100% util, es decir se puede utilizar todas las herramientas que posee, el límite del demo es que no podemos compilar un programa de mas de 2K, pero para empezar, esto es mas que suficiente, incluso su precio es muy accesible $99 dolares americanos, para quien este interesado en comprarlo, y bueno, sin mas bla bla, les dejo un link en donde pueden descargar el demo de la ultima version la 5.0 y los manuales, el de crear el primer proyecto y sobre el compilador en genera, todo en este mismo link:

http://www.mikroe.com/en/compilers/mikrobasic/pic/download.htm
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 03:04:32
Hola:

Max, me acabo de dar cuenta que el archivo que adjuntaste es un video y no los codigos jeje  :D, alli veo que haces referencia a MAIN y en efecto para este basic es asi como dices, mira:

Citar
Note: Label main marks the entry point of a program and must be present in the main module of every project. See Program Organization for more information.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 03:15:08
Si ya veo, voy a leer mas a fondo el manualito que anque esta en inlges es muy claro. Tiene mucho que no ocupo el MKB asi que sorry por los errores.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 03:24:46
Hola:

No hay nada de errores compa, solo dudas, como todos las tenemos, veo un poquito diferente a este programa, almenos lo del main, ya no es como los otros  :mrgreen:, otra cosa tambien es que se pueden crear funciones y hacerlas con parametros, cada ves se asemeja mas al VB, y me va gustando mas, a ver si nace otro ejemplito  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 05:29:40
Hola amigos!

Una sugerencia (que puede estar equivocada): No seria mas ordenado disponer de dos hilos para este tema? Separar el "curso" en si de los comentarios, para agilizar su lectura y evitar un hilo demasiado extenso......

Es solo una sugerencia. Apoyo totalmente la iniciativa, y si me lo permiten, tambien voy a contribuir con algunos ejemplos. :)

Saludos! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 10:25:07
 :mrgreen: Mikrobasiiiic!!!!!!!!  po ea me apunto!!   :mrgreen: ya me e descargao la version demo y ta todo dispuesto para comenzar. A aprender programando y haciendo ejemplos.

Yo estoy de acuerdo con aitopes hacer por un lado el curso con enlaces a los programas y otro para las dudas y comentarios sobre el tema para que todo este mas ordenado y coherente. ok?

 :-) Voy a hacer el programita de arriba haber que tal.  :-)
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 10:47:44
Hola:

Completamente de acuerdo Aitopes, y ya que Navaismo fue el que sugerio el post, que sea el mismo el que cree el otro tema con el indice de los ejemplos.  :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 10:50:00
Listo!!!!!!
Espero a que este creado el otro hilo para mandar algun ejemplito o explicacion sobre lo que vaya descubriendo.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 10:56:44
Hola compañeros tengo el programa instalado y listo, pero ya me surge una pregunta.

En el help dice que cuando le das a build proyect te genera el .asm, al .hex y un .txt, a parte del .pbas pero no me genera nada ni el .hex ni ninguno solo ta el programa (.pbas)  :?

jejeje empezamos bien jejeje
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 11:12:47
Hola Sam!

Pues a mi me genera todo lo que le "tilde" en OPCIONES, dentro de la misma carpeta en que esta el proyecto...

Revisa las rutas, debe haber algo mal por ese lado.

Saludos! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 11:15:39
Hola

Que buena iniciativa, creo que también me unire a ustedes a ver si logor conocer un poquito de este, asi vario algo de tanto assembler  :D :D. Además con la ayuda de tan agradables amigos quien no se anima  :).

Ya estare intentado hacer algun ejemplito.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 11:18:54
Hola:

Tambien tienes que estar seguro de haber creado bien el proyecto como lo indica navaismo en el primer post de el, alli esta un video de como hacer esto, para hacer mas rapida la compilacion basta con CTRL+F9, mira la ventana en donde te muestra los mensajes luego de la compilacion y revisa si todo esta bien, te dira que se compilo sin problemas y el espacio utilizara el programa.
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 11:50:04
Preguntonta #1:
En mi basic "anterior", usaba la sentencia ALLDIGITAL como una forma rapida de poner todos los pines E/S como digitales, es decir, desabilitaba los comparadores, ADC, etc, independientemente de que PIC estuviese usando.

Alguien encontro la instruccion equivalente en Mikrobasic? :shock:

Gracias! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 11:58:26
Hola amigos, abusando de su comprension :) y mas la Gio, quisera que me apoyaran con eso de hacer los 2 post el de las dudas y el de los ejemplos, se me ocurre copiar el estilo de los ejemplos de C con indice y todo. como ven.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 12:13:30
OK OK OK  :mrgreen: :mrgreen: ya se han ido los nubarrones jeje

Tenias razon LordLafebre es que no generaba bien el nuevo proyecto. gracias ya t´andando en mi RRBOARD1_v2 (http://www.todopic.com.ar/foros/index.php?topic=13559.15) a las mil maravillas jejeje :mrgreen:

jejeje quiero mas jejeje

Yo veo muy bien lo del indice navaismo, lo que no se es si yo podria realizarlo o no? me gustaria la verdad.


Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 12:40:44
Hola:

Bien arrancamos mas rapido que otras veces en esto, en el otro hilo que abrio navaismo y tratare de que se mantenga "limpio" ese post, es decir que vayan solo los ejemplos de los que quieran subirlos, Max, seria bueno que en tu primer post, pongas esto con negritas y letras mas grandes: Las dudas por favor ponerlas en el post de.... para que este todo claro.

y ahora a seguir haciendo ejejmplos jeje  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 12:56:26
Hola:

Amigos, perdón por molestar tanto, pero creo que seria importante poner una imagen los diagramas para los ejemplos que vamos a hacer, para que cuando se lea el ejemplo hacernos rapidamente una idea de que se esta utilizando y como se esta conectando, les parece?
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 13:01:18
como nunca he aprendido a poner las imagenes dentro del post de los ejemplos las pongo en el rar que adjunto
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 13:12:05
Hola:

Eso es facil, sube la imagen a este host: http://www.imageshack.us/ y copia el link que te dice, direct link to image y pegalo en el editor de texto para postear, luego señalalo y haz click en el boton que dice incertar imagen en los botones que te aparecen arriba de los emoticones,  y te debe quedar algo asi [ img ] URL DE LA IMAGEN [ /img ]   pero sin los espacios entre img y los corchetes, lo pongo asi o sino no se ve.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 13:18:21
ah ok gracias Gio, tan bueno como siempre
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 14:46:29
Hola:

Para veguepic:

en el otro hilo pensamos solamente poner los ejemplos, cualquier cosa o duda con uno de ellos hacerlo por aqui por favor  :mrgreen:

La pregunta que hacia es si no se puede cargar directamente el bas a Proteus, no he intentado eso aun, pero sera cuestion de probarlo con el .bas o el .pbp copmo lo indica lager en uno de sus post, creo que esta en el foro de simuladores.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 14:55:36
Hola:

Encontre el hilo que mencionaba, pueden intentar como lo explican alli, aunque no se si se pueda:

http://www.todopic.com.ar/foros/index.php?topic=11015.0
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 15:31:06
hola esto va de escandalo por ahora es muy sencillo todo. Lo que me gustaria es que en vez de utilizar yo el pic16f84A estoy utilizando es el 16f648a y no me van todo lo bien que debiera.

Lo mismo es que tendria que añadir como en C los fuses pero en basic.
Asi es la configuracion de fuses que yo tengo en C
Código: [Seleccionar]
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP   no se en basic como serian estas configuraciones o si hacen falta.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 15:39:55
Hola:

Estaba empezando a jugar con el MKB y al momento de hacerlo con un LCD, me encuentro que se necesitan 7 pines del micro para el LCD a modo 4bits, y en el caso de PBP y Proton solo se necesitaban los 6.

Intente a hacer lo siguiente, un pequeño ejemplo en el cual declaro todos los pines a utilizar, 4 de datos, RS, RW y E, pero RW, no lo conecte al pin del micro sino a GND, por lo que funciono bien, luego lo que intente hacer es ocupar ese pin, es decir, yo declaro asi el LCD:


Código: Visual Basic
  1. sub procedure Lcd_Config(dim byref data_port as byte,dim D7, D6, D5, D4 as byte,dim byref ctrl_port as byte,dim RS, WR, EN as byte)
  2.  
  3.  
  4. Lcd_Config(PORTB,3,2,1,0,PORTB,4,5,6)


y lo utilizo sin problemas, conectando el pin de RW del LCD ya sea al micro o a GND, pero lo que intente hacer es "reutilizar" el pin del Micro para RW, prendiendo y apagando un led en RB5 que es el pin que controla a RW, pero al hacer eso, el texto en el LCD empieza a parpadear, y ha mostrarse el cursor de diferentes formas en la primera linea, no se si sea efectos del simulador o no permite utilizar el pic que se declare para RW a para otras tareas, si no deja utilizar ese pin para otras cosas, se pierde un PIN respecto a como se solia hacer en PBP o Proron...  :(

Eso es lo que intente, no encontre nada en la ayuda ni en el manual sobre este tema, pero casi en todos los casos hay solucion, alguien sabe si esto se puede corregir?

aqui les dejo el codigo con el que estaba probando esto:

Código: Visual Basic
  1. program LCD_MKB
  2.  
  3. dim text as char[20]
  4.  
  5. TRISB=0
  6.  
  7. Lcd_Config(PORTB,3,2,1,0,PORTB,4,5,6)
  8. text = "TODOPIC"
  9. Lcd_Cmd(Lcd_CURSOR_OFF)
  10. Lcd_Out(1, 1, text)
  11.  
  12. main:
  13.      PORTB.5=0
  14.      delay_ms(50)
  15.      PORTB.5=1
  16.      delay_ms(50)
  17.      goto main
  18. end.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 15:47:04
hola esto va de escandalo por ahora es muy sencillo todo. Lo que me gustaria es que en vez de utilizar yo el pic16f84A estoy utilizando es el 16f648a y no me van todo lo bien que debiera.

Lo mismo es que tendria que añadir como en C los fuses pero en basic.
Asi es la configuracion de fuses que yo tengo en C
Código: [Seleccionar]
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP   no se en basic como serian estas configuraciones o si hacen falta.


Hola:

Es mas facil si configuras los fucibles cuando estas creando el proyecto, pero si lo quieres desde el programa, busca _config en la ayuda, aqui te pongo los resultados de esa busqueda:

Citar
Predefined Flags
mikroBasic has several predefined flags for configuring hardware. These can be found in definition files (“defs” folder), specifying hardware settings for individual chips. SFR are sorted under categories: ___SFR (umbrella for all registers), ___CONFIG_OSC (oscillator), ___CONFIG_WDT (Watchdog timer), and ___CONFIG_BORPOR (brown–out reset and power–on–timer).
Título: Re: Comenzando con Mikrobasic
Publicado por: Veguepic en 06 de Septiembre de 2006, 16:11:55
 :oops: :oops: Si habia leido lo de las dudas, pero al responder confundi los foros, ya veo que no soy multitarea, las disculpas del caso  :oops: :oops: .

Gracias Gio, ya me esta gustando lo facil que es esto, solo un pero, veo que el programa ocupa mas espacio de lo que esperaba comparado con asembler. Pero nada que un pic con mas memoria no pueda solucionar.

A ver si en la noche los alcanzo.  :mrgreen: :mrgreen:

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 16:17:54
Hola:

Hugo, a ver si te nos unes, todos somos novatos aqui  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 17:35:37
Hola de nuevo!! ya estan todo ok. Tiene muy buena pinta esto jeje. El problema ya esta zanjado tiene muy buena ayuda el mikrobasic la verdad. Ahora a por los lcds.
Título: Re: Comenzando con Mikrobasic
Publicado por: sanpic en 06 de Septiembre de 2006, 17:56:51
Hola amigos.
Me alegra mucho que hayan abierto este hilo.
Me sumo a la propuesta. Como bien lo explicó el amigo Gio , a no tenerle miedo , es un buen compilador. Y lo bueno que se renueva constantemente.


Saludos a todos.


 
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 18:02:50
Hola!
A ver si alguien me da una mano...

Acabo de terminar mi primer programita en Mikro, migre una parte de un programita que maneja un reloj de 4 digitos con 7 segmentos mediante registros de desplazamiento.

El problema es que si bien la compilacion termina sin errores, el reloj se queda como si el pic ni estuviera enchufado...Si lo programo con el basic que usaba antes, anda ok, por lo que descarto que el problema es la migracion.
A mi me parece que en la definicion de los fuses....
Uso un 16F628. sin reset y con un cristal de 4MHz.
El codigo es este:

Código: [Seleccionar]
program x7seg_001

'----------SYMBOL--------------
Symbol CLOCK = PORTB.1
Symbol data = PORTB.0
Symbol reset164 = PORTB.2
Symbol sino = PORTB.3
'-----------DIM----------------
Dim col As Byte
Dim i As Byte
Dim aux As Word

'----Rutinas------------------
escribo:
For col = 1 To 16
If aux.0 = 0 Then
data = 1
      delay_Us(2)
clock = 0
      delay_Us(2)
clock = 1
      delay_Us(2)
Else
data = 0
      delay_Us(2)
clock = 0
      delay_Us(2)
clock = 1
      delay_Us(2)
End if
aux = aux >> 1
Next col
Return


'---Programa principal------------
main:
cmcon = 7
porta=0

'Configuro el portA:
TRISA.0 = 0  'Salida
TRISA.1 = 0  'Salida
TRISA.2 = 1  'Entrada H
TRISA.3 = 1  'Entrada M
TRISA.4 = 0  'Salida
TRISA.5 = 0  'Salida

'Configuro el portB:
TRISB.0 = 0  'Salida (DATA)
TRISB.1 = 0  'Salida (CLOCK)
TRISB.2 = 0  'Salida (RESET)
TRISB.3 = 0  'Salida (SI/NO)
TRISB.4 = 1  'Entrada DS1820
TRISB.5 = 0  'Salida
TRISB.6 = 0  'Salida
TRISB.7 = 0  'Salida

reset164 = 1
sino = 0

clock = 0
data = 0


'---------PROGRAMA PRINCIPAL------------
Delay_ms(500)

  data = 1
      delay_Us(2)
clock = 0
      delay_Us(2)
clock = 1
      delay_Us(2)

data = 0
      delay_Us(2)
clock = 0
      delay_Us(2)
clock = 1
      delay_Us(2)
     
      Delay_ms(1500)
loop:
aux = %1010101010101010
Gosub escribo
aux = %1010101010101010
Gosub escribo
  Delay_ms(1500)

aux = %0101010101010101
Gosub escribo
aux = %0101010101010101
Gosub escribo
  Delay_ms(1500)

Goto loop
End.

y esta es una captura de como defini los fuses en el proyecto.
Si alguien tiene una sugerencia, le estoy agradecido. :lol:

Saludos. :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 18:23:45
con lo de "con el basic que usaba antes" te refieres a una version anterior del mismo MKB o a una de PBP o Proton.

Algo asi como comentario los TRIS porque no lo pones en una sola linea, en lugar de poner TRISA.0 a TRISA.5 pon TRISA = 12 o TRISA=%001100, No mas pa que se vea mas bonito jejeje. Y lo de las subrutinas habria que checar bien porque no lo conviertes en sub procedure y todo lo dejas dentro del main

-------------------------------------

Y bueno checando los ejemplitos que estamos poniendo me surgio una duda, el ultimo ejemplo que puso Paola, en el que usa Includes, la pregunta es. ¿en lugar de poner Includes se puede poner sub procedimientos y hacer saltos con gosub no? cual es la ventaja y desventaja de esos Usos?


Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 18:25:21
Hola:

Ariel, probaste haciendo click en el boton default que aparece al inicio cuando estas creando el proyecto?

Eso te configura los registros, y si te falta algo mas seguin eso puedes modificaarlo.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 18:28:14
Y bueno checando los ejemplitos que estamos poniendo me surgio una duda, el ultimo ejemplo que puso Paola, en el que usa Includes, la pregunta es. ¿en lugar de poner Includes se puede poner sub procedimientos y hacer saltos con gosub no? cual es la ventaja y desventaja de esos Usos?

Hola:

Max, claro que se puede utilizar procedimientos, incluso con parametros, la cuestion o ventaja de trabajar con includes, seria para programas extensos y algo complejos, y asi no tienes un codigo de un poco de paginas en el mismo proyecto, asi con los includes puedes ir haciendo partes el codigo y los llamas en un programa principal.  No se si me explique.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 18:32:40
Si, si te explcaste bien y claro; como dices, me late la opcion de usar includes en programas mega extensos y sub rutinas en programas de pocas lineas. Danke
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 18:36:20
Hola Lord!
Voy a probar con las opciones por defecto, aunque creo que la primera vez que compile no habia modificado nada por ese lado.

Respecto de los procedures y funciones, me parecen espectaculares por la reutilizabilidad del codigo...por lo pronto voy a intentar dejar de usar el GOSUB....RETURN.

Saludos. :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 18:38:03
Hola aitopes puedes subir el esquema?, asi intento mirar si descubro algo :)
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 18:38:49
Hola:

Otra cosa que note, es que MKB permite utilizar una bariable para trabajar con un pin X de un X puerto, lo veo en el ejemplo de samshiel_pic :

Código: Visual Basic
  1. FOR X=7 TO 0 STEP -1
  2.      PORTB.X=0
  3.      DELAY_MS(500)
  4.      NEXT X

Hasta donde recuerdo ni PBP ni proton permitian eso  :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 18:51:36
Hola Pao!

El esquema de la parte del PIC te lo debo para mañana....es muy simple, unos pines del puerto B (tal como se ve en el codigo) manejan el registro de desplazamiento.
Lo que si tengo es la parte del registro y del display...aca van:

Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 19:08:18
Pa que veas que no lo sabia LordLafebre simplemente a sido intuicion

Citar
Otra cosa que note, es que MKB permite utilizar una bariable para trabajar con un pin X de un X puerto, lo veo en el ejemplo de samshiel_pic :

Hasta donde recuerdo ni PBP ni proton permitian eso 

Por que de VB ni papa lo que pasa es que toy haciendo una lluvia de ideas y pruebo haber que tal van.  :mrgreen:
jejeje

Yo si que estoy desde cero pero toy intentando seguir el ritmo y ademas despuntar yo solo.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 19:17:43
Hola:

samshiel_pic,no se me hubiera ocurrido hacer lo que hiciste tu, ya que como menciono no se puede en PBP ni en proton, pero ya vas a ver que le agarras cariño al basic en general, y sobre todo a este, es increible, recien lo veo hoy y parece que ya lo he utilizado desde hace rato  :D, y lo que desconozco la ayuda me lo deja mas que claro.
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 19:29:54
Hola Navaismo!
Citar
con lo de "con el basic que usaba antes" te refieres a una version anterior del mismo MKB o a una de PBP o Proton.

Usaba el PIC Simulator IDE, espectacular, con un monton de cosas, simulador y osciloscopio incluido, soporte para LCD, 18S20 y varias cositas mas, pero.....no tiene muchos usuarios, una ayuda muy muy escueta, por lo que las dudas te las tenes que sacar con sangre :shock:. Por lo demas, es muy bueno.

Esta en http://www.oshonsoft.com/ (http://www.oshonsoft.com/)

Saludos. :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 19:33:46
Yo tenia por ahi el picsimulator IDE pero jamas vi que tuviera para compilar en BASIC :D :D :D estoy bien wey gracias por el dato :D



-------------------------------
 :shock: Ya voy a empezar con mis cosas, sucede que queria hacer otro ejemplo con el adc pero a la hora de compilarlo para ver si me quedaba bien me salen un buen de errores el primerito es este:

3:2 E-14 Identifier "c" has been already declared in p16f877.pbas ADCBlink.pbas
50:1 E-1 'end' is not a valid identifier ADCBlink.pbas
50:4 E-4 Syntax error: Expected 'as' but '.' found ADCBlink.pbas
51:1 E-37 Unknown type "" ADCBlink.pbas

y varios mas aqui les pongo el codigo no se que este mal, ya instale y reinstale como 3 veces y nada, es mas ya no compila los otros que postee :( :5]

Código: FreeBasic
  1. program ADCBlink
  2.  
  3. dim c,p     as byte
  4.     tiempo  as word
  5.     tiempot as string[5]
  6.     msj     as chr[20]
  7.  
  8. main:
  9.  
  10.  ADCON1 = 142
  11.  TRISA = 1
  12.  
  13.  Lcd_Config(PORTD,3,2,1,0,PORTD,4,5,6)
  14.  Lcd_Cmd(LCD_CURSOR_OFF)
  15.  Lcd_Cmd(LCD_CLEAR)
  16.  
  17. tiempo = adc_read(0)
  18. wordtostr(tiempo,tiempot)
  19. lcd_out(1,5,tiempot)
  20. lcd_out(2,5,msj)
  21.  
  22.  if tiempo <= 200 then
  23.   P = 1000
  24.   c=1
  25.  end if
  26.  
  27.  if tiempo > 200 AND tiempo <= 500 then
  28.   P = 500
  29.   c=2
  30.  end if
  31.  
  32.  If tiempo > 500 AND tiempo <= 1024 then
  33.   P = 250
  34.   c=3
  35.  end if
  36.  
  37.  select case c
  38.   case 1
  39.    msj = "Lento"
  40.   case 2
  41.    msj = "Medio"
  42.   case 3
  43.    msj = "Rapido"
  44. end select
  45.  
  46.  delay_ms(P)
  47.  PORTC = not PORTC
  48.  
  49. goto main
  50. end.

Queria hacerlo con sub procedure pero no supe como y no queria usar labels y gosub-return asi que lo deje asi, No se si sirva ya que no lo compilo.


Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 06 de Septiembre de 2006, 19:41:18
Hola!

El error
Citar
3:2 E-14 Identifier "c" has been already declared in p16f877.pbas ADCBlink.pbas
se debe a que la variable C aparentemente se ha declarado en el archivo p16f877.pbas, seguramente para nombrar al puerto C.....

Los otros tres
Citar
50:1 E-1 'end' is not a valid identifier ADCBlink.pbas
50:4 E-4 Syntax error: Expected 'as' but '.' found ADCBlink.pbas
51:1 E-37 Unknown type "" ADCBlink.pbas
pueden deberse a algun espacio de mas al final del "end." o bien a que interprete el END del "END SELECT" como final del programa.... aunque consultando la ayuda parece estar bien escrito..

Que bueno que lo hayamos encarado entre varios, por que solo, aparecen estas dudas y te pones a llorar. :)

Saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 06 de Septiembre de 2006, 19:42:53
Hola:

Rapidamente lo que note es esto:

dim c,p     as byte    tiempo  as word    tiempot as string[5]    msj     as chr[20]

el dim utilizalo para cada variable diferente, por ejemplo

Código: Visual Basic
  1. dim c,p     as byte
  2. dim tiempo  as word
  3. dim tiempot as string[5]
  4. dim msj     as chr[20]

Esto puede ser lo que te este generando muchos errores.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Septiembre de 2006, 19:45:52
pues segun la ayuda no hace falta pero deja checo ambas lo de C que me dice aitopes y lo del DIM
-------------------------

Les digo que MKB parece nena, de todo hace un pancho en las lineas de los ifs no mas por no poner parentesis me mando al egg, ya se los puse y ahora donde quiero meter el valor de X en el delay tambien asi que voy a revisar a fondo el prog.

PD: si funciono cambiando la C y la P por otras y tambien funciono anexando a cada una su DIM y probare con la instruccion Vdelay_Ms haber si sirve

------------------------------------------------------------

 :5] :5] me carga el payaso. ya lo modifique pero noto como no se sale de la rutina adc(), ya intente mucho ya lei y nada mi cerebro murio.

aqui les dejo lo que intentaba hacer.

Código: FreeBasic
  1. program ADCBlink
  2.  
  3. dim n       as byte
  4. dim x       as byte
  5. dim tiempo  as word
  6. dim tiempot as string[5]
  7. dim msj     as char[20]
  8.  
  9.  
  10. sub procedure adc()
  11.  
  12. tiempo = adc_read(0)
  13. wordtostr(tiempo,tiempot)
  14. lcd_out(1,5,tiempot)
  15. lcd_out(2,5,msj)
  16.  
  17.  if tiempo <= 200 then
  18.   x = 1000
  19.   n=1
  20.  end if
  21.  
  22.  if (tiempo > 200) AND (tiempo <= 500) then
  23.   x = 500
  24.   n=2
  25.  end if
  26.  
  27.  If (tiempo > 500) AND (tiempo <= 1024) then
  28.   x = 250
  29.   n=3
  30.  end if
  31.  
  32.  select case n
  33.   case 1
  34.    msj = "Lento"
  35.   case 2
  36.    msj = "Medio"
  37.   case 3
  38.    msj = "Rapido"
  39. end select
  40. end sub
  41.  
  42. SUB PROCEDURE BLINK()
  43.   PORTB = 255
  44.  Vdelay_ms(x)
  45.  PORTB = 0
  46.  Vdelay_ms(x)
  47. END SUB
  48.  
  49. main:
  50.  
  51.  ADCON1 = 142
  52.  TRISA = 1
  53.  TRISB = 0
  54.  
  55.  Lcd_Config(PORTD,3,2,1,0,PORTD,4,5,6)
  56.  Lcd_Cmd(LCD_CURSOR_OFF)
  57.  Lcd_Cmd(LCD_CLEAR)
  58.  
  59.  adc()
  60.  BLINK()
  61.  delay_ms(1000)
  62. goto main
  63. end.


Haber si alguien lo pule mejor k yo ya que tengo que terminar otras cosas jejejejeje :mrgreen: :D
Mejor dicho haber si me echan la manita a ver cual es el problema

Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Septiembre de 2006, 02:50:46
Oye Pao dices ser Nueva en esto y yo te veo como pez en el agua, ya veo que a los masters masters en todo. Que bueno es que se unan personas como tu y los demas para apoyar a estos hijos de la desolacion.

Título: Re: Comenzando con Mikrobasic
Publicado por: julio_vmd en 07 de Septiembre de 2006, 04:01:39
Hola a todos, me alegro mucho de que le esteis metiendo caña a Mikrobasic por aqui, os ofrezco mi ayuda en lo que necesiteis, tambien aprobecho para decios que en mi web (http://www.jvmbots.com) (biblioteca) hay codigos y utilidades muy utiles para Mkb.

-Control de 8, 16 y 24 servos para Mkb con interrupcion del timer0
-RC5 (envio y recepcion)
-Ayuda para enlazar Mkb y Winpic800
-Ayudas

Saludos y animo con esto  :)
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 07 de Septiembre de 2006, 07:20:01
Hola!
Al final, ayer antes de ir al encuentro de la almohada logre hacer duncionar el 16F628A con Mikrobasic...tenia algunos fuses mal, pero ya esta. 8)

Ahora tengo una duda: comence a usar funciones, sin problemas, realmente son muy utiles. :mrgreen:

Pero....(siempre hay un "pero") cuando intento llamar a una funcion desde dentro de otra obtengo resultados incorrectos, y viendo la ayuda nada dice de que se pueda hacer esto (llamar a una funcion desde otra). Alguien tiene idea si esto es asi?

Gracias! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 07 de Septiembre de 2006, 07:22:12
Me autorrespondo: SI SE PUEDE!

Tenia unas comillas inncesarias, y por eso me "hacia cosas extrañas" al llamar la funcion.

 :-/ Esto esta.....BARBARO!!!! :-/

Saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: olotill en 07 de Septiembre de 2006, 09:52:31
Heyyy hermanos...

Hace 2 dias di la idea de empezar el tuto de ejemplitos de MKB y ya lo tienen avanzadisimo  :mrgreen:

Q excelente, asi con tanta gente activa como no darle duro a este compilador...

BUeno pues vamos para adelante, ya estaremos posteando lo que vaya aprendiendo  :)..

UN ABRAZO
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Septiembre de 2006, 12:41:24
Citar
Hola a todos, me alegro mucho de que le esteis metiendo caña a Mikrobasic por aqui, os ofrezco mi ayuda en lo que necesiteis, tambien aprobecho para decios que en mi web (biblioteca) hay codigos y utilidades muy utiles para Mkb

 :-/ Hola Julio VMD bienvenido, lo que no entiendo es como no eras parte de esta comunidad, tu pagina la conocia hace ya un rato y es muy util. Que bueo que te nos unas
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Septiembre de 2006, 23:24:26
 :( sigo con mis dudas y problemas, pero esta vez solo quiero saber si alguien sabe donde puedo encontrar como quitar o como solucionar eso de los warnings, aunque te dejan compilar, a veces no funciona el programa.

15:19 W-9 Warning: Implicit typecast performed from word to real Termometro.pbas ese el el warning que deseo saber y solo en la ayuda llegan hasta el 5 pero aun asi no dice nada.
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 08 de Septiembre de 2006, 07:43:20
Hola navaismo!

Por el texto del mensaje, me suena a un posible conflicto de tipos, entre "word" y "real"....

Podes postear el codigo?

Saludos! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: Flugplatz en 08 de Septiembre de 2006, 08:19:46
Bueno, por causas desconocidas :lol: llegaron a mis manos dos chips de estos: Controlador serie para pantallas LCD, SYM20AA de MSE (http://www.msebilbao.com/tienda/product_info.php?cPath=29_84&products_id=338) ... Por si a alguien le interesa es un 16f627 con 5 euritos de conocimiento ...  :mrgreen:

Aquí teneis un sencillo código en MikroBasic para hacerlo funcionar.

Evidentemente, es bastante probable que no tengáis el chip, y en ese caso, vale para extrapolar el uso de algunas cosas; como por ejemplo, el uso de la USART, manejo de algunas funciones para strings y de procedimientos.

Me alegro de que salga adelante este compilador. Yo hace tiempo que lo uso, ya que para hobby es ideal.  A lo mejor, para hacer proyectos profesionales no vale, cosa que habría que estudiar en profundidad, pero al menos, tiene funciones y procedimientos, los primeros 2kBytes son gratis (0000h-03FFFh), es barato, tiene un debuger por software y está en continua evolución ...

Código: vb.net
  1. program prueba_sym
  2.  
  3. dim txt as string[16]
  4. dim j as word
  5. dim i as word
  6.  
  7. const BAUD_RATE = 19200
  8.  
  9. sub procedure Locate(dim x,y as byte)
  10.     Usart_write(138)
  11.     Usart_write(x)
  12.     Usart_write(y)
  13. end sub
  14.  
  15. sub procedure Cursor_Off
  16.     Usart_write(131)
  17. end sub
  18.  
  19. sub procedure Cursor_On
  20.     Usart_write(130)
  21. end sub
  22.  
  23. sub procedure Cls
  24.     Usart_write(12)
  25. end sub
  26.  
  27. main:
  28.      ADCON1 = 7
  29.      delay_ms(200)
  30.      Usart_init(BAUD_RATE)
  31.      Cursor_Off
  32.      Cls
  33.      txt = "prueba_sym.bas"
  34.      Usart_write_text(txt)
  35.      delay_ms(3000)
  36.      Cls
  37.      i=0
  38.      j=0
  39. bucle:
  40.      WordToStr(j,txt)
  41.      Locate(1,1)
  42.      Usart_write_text(txt)
  43.      WordToStr(i,txt)
  44.      Locate(2,1)
  45.      Usart_write_text(txt)
  46.      j=j+1
  47.      if j = 0 then
  48.         i = i + 1
  49.         Cls
  50.      end if
  51.      goto bucle
  52. end.

Este código vale para cualquier chip que tenga USART integrada, a 40 Mhz o menos, ya que así lo requiere el BRG para los 19200 baudios. En mi caso probé con 18F242 a 10x4Mhz (40Mhz) y funciona estupéndamente.

Mario

PD: perdonad que lo haya editado varias veces, pero es que con los colores que le ha puesto el SuperAdmin al Geshi Freebasic, al menos yo, que veo menos que un gato de escayola, no veo ni pijo.  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 08 de Septiembre de 2006, 13:03:24
Citar
Hola navaismo!

Por el texto del mensaje, me suena a un posible conflicto de tipos, entre "word" y "real"....

Podes postear el codigo?


es este codigo

Código: OpenOffice.org Basic
  1. program Termo1
  2.  
  3. dim temp  as float
  4.        tempt as string[17]
  5.  
  6. sub procedure configlcd()
  7.  lcd_config(portd,3,2,1,0,portd,4,5,6)
  8.  lcd_cmd(lcd_cursor_off)
  9.  lcd_cmd(lcd_clear)
  10. end sub
  11.  
  12. sub procedure sensado()
  13.   configlcd()
  14.  
  15.  temp = adc_read(0)
  16.  temp = temp*(5.0/1024.0)
  17.  
  18.  floattostr(temp,tempt)
  19.  lcd_out(1,2,tempt)
  20. end sub
  21.  
  22. main:
  23.  adcon1 = 143
  24.  trisa.0  = 1
  25.  
  26.  sensado()
  27.  delay_ms(1000)
  28. goto main
  29. end.


en genral ese es el codigo, ya que aun no prendo el vmware jajaja el warning apunta a esta linea TEMP = adc_read(0) y si cambio temp por word todo va bien, y yo que queria poner un ejemplo con flotantes. jajajajaj

PD no trabaja asi como esta no se ve nada en el lcd.






Título: Re: Comenzando con Mikrobasic
Publicado por: Veguepic en 08 de Septiembre de 2006, 14:10:40
Ya me esta dando dolor de cabeza.  :( :(

No logro entender el uso de las interrupciones, sera que estoy acostumbrado al asm.

Uso la siguiente expresion antes del main.

sub procedure interrupt
   xxxxx                          aqui supongo debe ir lo que quiero que haga
  INTCON = $20               supongo que esto elimina el flag de la interrupcion o debo usar mejor ClearBit(INTCON,RBIF)
end sub

Esta rutina se activa cuando ocurre la interrupcion? is pruebas salen que no pero supongo que algo estoy haciendo mal.

Tendran algun ejemplo con interrupciones como para poder destriparlo.  :mrgreen: :mrgreen:

Gracias y saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: beatAurex1 en 08 de Septiembre de 2006, 14:25:56
SI que me he atrasado por lo que veo, ya tiene avanzadisimo este tutorial de MIKROBASIc, y yo aun no termino de aprende todo lo de picbasic,, me podrian decir  cuales son algunas de  las ventajas mas importantes de migrar a mikrobasic??

SALUDOS DESDE MEXICO
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 08 de Septiembre de 2006, 14:44:17
Hola Amigo!

Las ventajas que yo le veo son fundamentalmente:

1) Un IDE muy compelto, con pantallas con estadisticas de la memoria usada por cada funcion, etc...Excelente.
2) Las librerias!!! Tenes disponibles librerias para manejo de 1Wire, RS485, MMC/SD, LDC, GLCD,memorias Flas, teclados PS/2, y un lrguisimo etcetera.
3) Ayuda y ejemplos muy completos
4) Es gratis para codigo de hasta 2Kb
5) Se esta actualizandoi permanentemente.
6) Hay un grupo de gente que esta aprendiendo a usarlo en TodoPic! ;)

Saludos! :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 08 de Septiembre de 2006, 14:58:19
Hola esto va dirigido hacia los novatotes como yo en esto del MKB y es un primer video de una miniguia que estoy ahceindo para aquellos que como yo nos es dificl entender el Ingles o mas bien que nos da flojera. Espero hacer otro al ratillo y subirlo en la noche. Este es para ir aprendiendo lo mas mas basico del MKB

aqui el link :
 http://rapidshare.de/files/32405921/miniguia1.rar.html
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 08 de Septiembre de 2006, 17:10:37
Hola

vegue acabo de hacer un ejemplo con interrupciones lo he subido donde estan los ejmplos espero te sirva.

Max excelente miniguia mis respetos  :)
Título: Re: Comenzando con Mikrobasic
Publicado por: Veguepic en 08 de Septiembre de 2006, 17:26:54
 :-/ :-/  Gracias Paola   :-/ :-/  lo reviso de inmediato
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 09 de Septiembre de 2006, 01:37:21
Gracias Pao, se hace lo que se puede aqui les dejo el volumen 2 de la miniguia.
Saludos a Todos y espero les sirva estas miniguias al menos para hacerse una idea, obvio a los visitantes porque los compañeros ya estan mea avanzados.

http://rapidshare.de/files/32458181/miniguia2.rar.html
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 09 de Septiembre de 2006, 16:48:12
EEEE chicos que tal? aqui toy practicando un rato y tengo un problema. He estado haciendo un programa para que si pulso ra0 suma un digito y si pulso ra1 lo resta. Pero el problema es la sencillez del mismo  :mrgreen: . Cuando le digo muestre el numbero no me lo muestra y simulandolo con el mikrobasic va estupendamente.

Este es el codigo

Código: Visual Basic
  1. program ASCENDESCN
  2.  
  3. dim x as byte
  4. dim cont as byte [10]
  5.  
  6. sub procedure asgcont
  7. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  8. cont[1]=%00000110
  9. cont[2]=%01011011
  10. cont[3]=%01001111
  11. cont[4]=%01100110
  12. cont[5]=%01101101
  13. cont[6]=%01111100
  14. cont[7]=%00000111
  15. cont[8]=%01111111
  16. cont[9]=%01100111
  17. end sub
  18.  
  19. main:
  20. asgcont
  21.      TRISA=1
  22.      TRISB=0
  23.      PORTB = cont[x]
  24.      x=0
  25. p:   if PORTA.0=1 then
  26.         delay_ms(50)
  27.         x=x+1
  28.         if x=10 then
  29.            x=0
  30.         end if
  31.         PORTB = cont[x]
  32.      end if
  33.      
  34.      if PORTA.1=1 then
  35.         delay_ms(50)
  36.         x=x-1
  37.         if x=-1 then
  38.            x=9
  39.         end if
  40.         PORTB = cont[x]
  41.      end if
  42.      goto p
  43. END.

Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 09 de Septiembre de 2006, 16:50:40
Ahhh y otra pregunta como seria para cuando pulsas un boton espere el flanco de bajada para hacer lo que quieres??  :P


 :mrgreen: :mrgreen: Como se nota que es sabado noche jeje  ta vacio el foro   :mrgreen: :mrgreen:

Pos aqui en sevilla ta el tiempo como pa salir lleva dos noches con unas tormentas electricas que a mas de uno le han fundio ya media casa  :D :D
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 09 de Septiembre de 2006, 21:00:02
que hay samshiel, pues en una hojeada rapida declaras el trisa = 1 lo que hace que porta.0 sea de entrada si quieres que el porta.0 y porta.1 sean entradas debes declararlo como trisa=3.

Con la segunda pregunta de lo del boton te refieres a un antirrebote, a que estemos seguros de que se pulso? si es asi hay una instruccion que es button si no mal recuerdo, pero podrias hacer un antirrebote tu usando IFs

por ejemplo si tu boton entrega 5V puedes hacer esto

    IF PORTX.X=1 THEN
       DELAY_MS(300) ' AQUI EL TIEMPO PARA EL REBOTE
               IF PORTX.X=1 THEN
                'LO QUE QUIERAS HACER
              END IF
     END IF

espero sea eso sino ni idea


Título: Re: Comenzando con Mikrobasic
Publicado por: doppel en 09 de Septiembre de 2006, 22:05:00
Hola gente!!

Una más!! para el rebote de los pulsadores se puede usar tambien la libreria BUTTON que viene en MKB, por cierto muy útil.-

saludos y muy buena iniciativa han tenido con este tema
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Septiembre de 2006, 00:05:27
Bueno concluyo con esto de las miniguis en español espero les sirva aca el link

   http://rapidshare.de/files/32571769/miniguia3.rar.html
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 07:28:59
Ok navaismo yo lo que quiero es un antirrebote pero que cuando pulse detecte el flanco de subida y ahora espere al flanco de bajada para sumar un numero o lo que sea. Gracias por la ayuda
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 07:57:46
Ok el problema ya ta solbentado jejeje :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 09:32:17
Bueno pues ahora voy a intentar usar la libreria button para ralizar lo mismo que con el ejercicio anterior.

La funcion de esta libreria es la siguiente: elimina la influencia del contacto que oscila sobre presionar un botón (debouncing). El puerto del parámetro especifica la localización del botón; el perno del parámetro es el perno número en puerto señalado y va a partir de la 0..7; el tiempo del parámetro es un período del debounce en milisegundos; el active_state del parámetro puede ser 0 o 1, y se determina si el botón es activo sobre cero lógico o uno lógico.

Osea que Button(PORTA, X, Y, Z)

Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Septiembre de 2006, 17:48:29
Oye Pao deberias postear el ejemplito que hicimos del adc con el pot y los leds quedo muy bueno como para que no lo subas no crees...
Y amigos que paso con el indice alguien sabe hacerlo???? le daria mas cache a esto jejejeje, espero alguien se anime y lo haga.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 18:34:37
Hola navaismo yo tambien iva a insistir en lo del indice por que facilitaria mucho la distribucion y la busqueda de algun ejemplo. Ya que ahora ta todo echo un barullo de cuidao jeje :mrgreen:.

Tengo una pregunta si hago el indice navaismo yo no podria ponerlo en el primer post tendrias que modificarlo tu no?
Sino te paso el codigo y tu lo modificas en el primer post no?
Título: Re: Comenzando con Mikrobasic
Publicado por: Veguepic en 10 de Septiembre de 2006, 18:56:49
Yo tambien pienso que por orden el indice deberia ir en el primer mensaje.

En este link esta como hacer un indice, espero sea de utilidad y este entendible.  :mrgreen:

http://www.todopic.com.ar/foros/index.php?topic=13818.0

Suerte.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 19:08:19
Ok vequepic, mas o menos es como yo pensaba que era. Pero vamos a esperar a que se conecte navaismo y aber que dice. Si por lo que sea el no quiere hacerlo lo hago y despues se lo paso para que lo edite en su primer post.  :P
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Septiembre de 2006, 20:12:41
Hi si como quieran si quieren ahcerlo y yo lo pongo, aunque no soy muy ducho en eso de modificar , y si le pasamos la estafeta a los moderadores jajaja para que metan un primer post antes del mio con el indice
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 20:16:05
Hola navaismo por el mero hecho de no molestar a los moderadores que yo creo que elmasvital esta con otros quemaderos de cabeza, hago yo el indice y te lo paso completo en un .txt y solo tienes que copiarlo en el primer post ok?
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Septiembre de 2006, 20:21:42
va, hecho asi quedamos aunque me referia a los moderadores de este subforo, en cuanto lo tengas me lo mandas por privado si quieres
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 21:11:13
ea pues ya tenemos indice  :-/ :-/
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Septiembre de 2006, 21:25:49
Esta Genial samsheil gracias a ver si Lord puede hacer una pagina antes para que solo se vea el indice
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 21:27:56
ok  :mrgreen: :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 10 de Septiembre de 2006, 22:34:29
Esta Genial samsheil gracias a ver si Lord puede hacer una pagina antes para que solo se vea el indice

Hola:

Max, el primer post fue creado por ti, asi que eso lo puedes hacer tu luego, ahora voy a copiar el post de samshiel_pic al primer mensaje.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 10:19:40
Hola chicos siguiendo con el hilo me gustaria realizar un dado digital que muestre en el 7 segmentos un numero aleatorio pero no se como conseguir esto.

Hay algun comando especifico para obtener el numero aleatorio? como puede ser en C el srand o otro ejemplo en C de conseguir el numero aleatorio:
Código: C
  1. numeroaleatorio=get_rtcc() %x;
donde x es el numero por el cual vamos a dividir y nos dara en numeroaleatorio un numero del cero a x.
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 10:27:05
Hola otra vez!! :P
PAOLA09 o Gio o navaismo o alguien sabe algun ejemplo que muestre el uso del comando Button por que yo  lo he usado pero como no tengo mucha idea me sale mas corto con if´s, yo creo que usando button tendria que ser mas corto no?

veis como me iva a poner pesao con las preguntas? jejejeje  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 11 de Septiembre de 2006, 11:19:46
Hola:

en la ayuda hay ejemplos para cada uno de los comandos, este es el de button:

Código: FreeBasic
  1. while true
  2.   if Button(PORTB, 0, 1, 1) then
  3.     oldstate = 255
  4.   end if
  5.   if oldstate and Button(PORTB, 0, 1, 0) then
  6.     PORTD = not(PORTD)
  7.     oldstate = 0
  8.   end if
  9. wend


Con respecto a lo de Random no se si soporte MKB, busque alguna funcion y no la encontre  :?
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 11:34:47
Hola GIO que tal. Ok, si donde primero mire fue en el help pero me salio ese ejemplo. De echo el programa mio  [ Contador 0 a 9 ascendente (RAO) o descendente (RA1) usando comando button (7seg)]  (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81549#msg81549) esta hecho asi. pero la duda mia es que hay que usar mas variables y lineas que con dos if, o si es que hubiera otro uso de BUTTON. Era solo eso :P
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Septiembre de 2006, 12:56:20
No pues pareceserque no hay funciones random en MKB pero podrias hacer una subfuncion no?
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 13:19:26
Bueno pues probaremos a ver que sale. Si alguien tiene una idea de como hacerlo.
 Yo me parece que en ensabler lo hacia cogiendo un valor del TMRO y despues lo dividia por el numero de digitos que quisiera tener ( de 0 a 6 ) y se coje el resto de la operacion. En lenguaje C es de las dos maneras que dije antes, pero en basic ni idea. :?
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 11 de Septiembre de 2006, 13:29:05
Hola:

En especifico este basic no tiene esa funcion, PBP y Proton si la tienen y es Random, pero con MKB no he encontrado nada que se le parezca, no esta ni como random ni de proton como Rnd ni nada, asi que no quedara de otra que crearse una funcion.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Septiembre de 2006, 14:06:36
 :( Mas golpes bajos de MKB  :( el primero fue que para una comunicacion serie no alcanzo la memoria del PIC16F84A me pase al 877a para que no diga que no hay rom.

Bueno resulta que para usar la comunicacion RS232 mediante software es necesario considerar las interrupciones y la velocidad del crystal, como? pues no se ya cambie el crystal desde 4 a 20 y nada no me da los buads que quiero. alguno idea?? aqui el prog que queria hacer era para un ejejmlo ya llevo 3 que no mas no. :lol: 8)

Código: FreeBasic
  1. dim i        as byte
  2.     data     as byte
  3.     datarx   as byte
  4.     it       as char[3]
  5.     datarxt  as char[3]
  6.    
  7. sub procedure lcdconfig()
  8.  lcd_config(PORTB,0,1,2,3,PORTB,4,5,6)
  9.  LCD_CMD(LCD_CURSOR_OFF)
  10.  LCD_CMD(LCD_CLEAR)
  11. END SUB
  12.  
  13. sub procedure TX()
  14.  lcdconfig()
  15.  SOFT_UART_INIT(PORTA,0,1,2400,0) ' COMUNICACION SERIE RX-RAO, TXR-A1, 9600BPS, NO INVERTIDO
  16.  
  17.   FOR i = 0 to 50
  18.    soft_uart_write(i)
  19.    bytetostr(i,it)
  20.    lcd_out(1,1,"enviando: ")
  21.    lcd_out_cp(it)
  22.    delay_ms(500)
  23.   next i
  24. end sub
  25.  
  26. sub procedure RX()
  27.  lcdconfig()
  28.  SOFT_UART_INIT(PORTA,0,1,2400,0) ' COMUNICACION SERIE RX-RAO, TXR-A1, 9600BPS, NO INVERTIDO
  29.  datarx = soft_uart_Read(data)
  30.  bytetostr(datarx,datarxt)
  31.  lcd_out(2,1,"Recibido: ")
  32.  lcd_out_cp(datarxt)
  33.  delay_ms(500)
  34. end sub
  35.  
  36.  
  37. main:
  38.  
  39.  ADCON1 = 7
  40.  TRISA  = 9
  41.  
  42.  IF PORTA.3 = 1 THEN
  43.   TX()
  44.  ELSE
  45.   RX()
  46.  END IF
  47.  
  48. GOTO MAIN
  49. END.

hay que anexar al indice el nuevo ejemlo de Samsheil
Título: Re: Comenzando con Mikrobasic
Publicado por: sanpic en 11 de Septiembre de 2006, 14:19:03
Hola amigos.


***********

module rngen

implements

sub function rnd8_16F(dim min, max as byte) as byte
dim f0 as boolean
f0 = true
While f0
    asm
      clrf    STATUS
      rlf     TMR2, 1
      swapf   TMR2, 0
      andlw   0xE0
      rrf     TMR2, 1
      addwf   TMR2, 0
      addwf   TMR2, 0
      addwf   TMR2, 0
      sublw   0x35
      movwf   TMR2
    end asm
    If (TMR2 <= max) And (TMR2 >= min) Then f0 = false End If
Wend
result = TMR2
end sub

sub function rnd8_18F(dim min, max as byte) as byte
dim f0 as boolean
f0 = true
While f0
    asm
      clrf    STATUS
      rlcf    TMR2, 1
      swapf   TMR2, 0
      andlw   0xE0
      rrcf    TMR2, 1
      addwf   TMR2, 0
      addwf   TMR2, 0
      addwf   TMR2, 0
      sublw   0x35
      movwf   TMR2
    end asm
    If (TMR2 <= max) And (TMR2 >= min) Then f0 = false End If
Wend
result = TMR2
end sub
end.

Este ejemplo es para familia pic 18F . Usar la función rnd8_16F para la familia 16F.


Code:
include "rngen"

dim value as byte

main:
PORTB = 0
PORTD = 0
TRISB = 0
TRISD = 0
While true
  value = rnd8_18F(0, 255)
  latb = value
  delay_ms(200)
Wend
end.


**************

Extraido de aquí :  http://www.mikroe.com/forum/viewtopic.php?t=2896&start=15

Ante cualquier duda sirve para consultar el foro oficial de MKE




Abrazo a todos.

Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 11 de Septiembre de 2006, 14:30:34
Hola:

muy bueno, gracias Roberto, y a ver si pasamos mas seguido por el foro de MKB  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 20:03:34
Navaismo aqui tienes la actualizacion del INDICE
Solo tienes que pegar en el post el trozo que te e puesto entre las lineas sustitullendo trozo anterior. ok?
Título: Re: Comenzando con Mikrobasic
Publicado por: hsen en 13 de Septiembre de 2006, 03:16:42
Hola amigos: Hace un par de meces que no entraba al foro y me encuentro con un nuevo término,
"MIKROBASIC".
Por lo visto es una nueva manera de programar,por favor me pueden explicar si tiene vetajas sobre
PBP?
Estoy confundido ,yo recien estaba intentando aprender algo sobre PBP y ahora me encuentro con
con esta otra forma de programar, por lo tanto estoy mas desorientado que antes.
Agradezco me orienten un poco por que ya no se que rumbo seguir.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 13 de Septiembre de 2006, 03:24:31
Pues en realidad esto es solo una pequeña introduccion a lo que es mikrobasic el cual ya tiene rato en el mercado.

Que ventajas tiene sobre PBP son las librerias no mas, que desventajas tiene es muy rebuscado, y consume de memoria que no veas. Pero eso se compensa con las librerias de SD MMC ethernet, SPI, UART, USART etc.

Yo la verdad programo mas en PBP pero se dice que para cosas mas serias esta el MKB, yo preferiria para cosas mas seria el C pero est de mikrobasic esta teniendo muy buena aceptacion.

El rumbo que quieras llevar es el que tu eligas, no importa cual sea, de todas formas nos ayudamos todos aqui, esto es solo para aprender el uso del MKB.

Saludos

y como dice olotill se ve bien bonito el MKB te lo venden muy bien, pero de repente te llevas unos fiascos que bueno, pero aun asi el dia que mande un ping a mi pic o grabe en una SD card le voy a dar de besos al MKB jajajajajajajajajaj  ;)
Título: Re: Comenzando con Mikrobasic
Publicado por: hsen en 13 de Septiembre de 2006, 03:34:25
Gracias  por tu pronta respuesta Navaismo.
Está bien , seguire con PBP de lo contrario voy a aumentar mi ignorancia.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 13 de Septiembre de 2006, 03:38:14
naaaaa, la ignorancia es un derecho del hombre mas no un pecado, nadie nace sabiendo todo, yo he batalldo mucho para medio entender el PBP y ahora solo me meto al MKB por curiosodad y para cuando los grandes como LOrd pongan su servidor web con pic le medio entienda. asi que te invito a que lo conozcas y juzgues por ti mismo. De todos modos asi como tu habemos muchos que le somos fieles al PBP

Qu estes bien
Título: Re: Comenzando con Mikrobasic
Publicado por: Axel_18 en 15 de Septiembre de 2006, 00:25:53
holaaaaa

perdon la ignorancia pero no puedo hacer que el mikrobasic 5.0 me genere archivos .HEX o .ASM despues de compilar el programa.
me queda guardado como .Pbas pero nada mas...

que pasara?

saludos!!
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 15 de Septiembre de 2006, 00:33:28
Hola:

Asegurate de compilar bien y crear bien el proyecto, una ves que lo tengas para compilar basta con presionar CTRL + F9
Título: Re: Comenzando con Mikrobasic
Publicado por: Axel_18 en 15 de Septiembre de 2006, 00:43:54
eso lo he hecho coom 20 veces pero no  parece por ningun lado el archivo .HEX incluso he buscado por toda la carpeta del mikrobasic y nada.
he bajado como 3 veces el programa y sigo teniendo  lo mismo con cualquier programa que haga INCLUSO le cambio el nombre a los ejemplos que bienen y los compilo denuevo ( con un nombre distinto) y NO aparece nada  ningun HEX y ningun ASM solo Un  Pbas.. :? :? :?

saludos!
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 15 de Septiembre de 2006, 00:49:48
Hola:

Pues entonces se me ocurre que podria ser tu programa, desinstalalo y vuelvelo a instalar y haz de nuevo lo que te mencione.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 15 de Septiembre de 2006, 00:51:40
si ya lo hiciste como ponemos en el video y sigue sin aparecer el hex y el asm, tal vez estas sobrepasando los 2k que es lo unico que te deja hacer el demo.

haber prueba solo poniendo

main:
porta=not porta
delay_ms(50)
goto main

eso no creo que pase los 2k si sigue sin salir, checa bien bien que onda con el proyecto.

saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: dogflu66 en 15 de Septiembre de 2006, 17:04:44
Yo tenia ese mismo problema al principio, y el problema fue que por abreviar no comence como “nuevo proyecto”
Título: Re: Comenzando con Mikrobasic
Publicado por: dogflu66 en 15 de Septiembre de 2006, 17:13:14
Genera un nuevo proyecto guárdalo, luego cargas un proyecto de ejemplo, y lo marcas y lo copias, luego cierras y abres el nuevo y pegas, y ya veras como si funciona, si no lo puedes pegar pégalo primero en un editor de texto y luego copy y paste al nuevo proyecto desde ese editor.
Título: Re: Comenzando con Mikrobasic
Publicado por: Axel_18 en 19 de Septiembre de 2006, 13:04:37
OK haora puedo generar .hex :lol:

pero haora estoy tratando de compilar un programa para manejar una LCD de un nokia que quiero adaptarlo a un pic 16f84a, al tratar de compilar me sale lo de la imgen :shock:

a ke se debe¿?¿?

saludos!
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 19 de Septiembre de 2006, 13:14:32
Hola:

Si mal no recuerdo la libreria para los LCD nokia eran solo para pics de la serie 18F, ademas son para pines especificos, si soporta mas pics, tienes que ver la libreria porque creo que se utilizan pines del puerto C............. y en efecto, acabo de ver la libreria y confirmar lo que digo:

'  PORTC,0   -  CS   - Chip Enable
'  PORTC,1   -  RES  - Reset Input
'  PORTC,4   -  SCLK - Serial Clock Input
'  PORTC,5   -  DC   - Data / Command
'  PORTC,6   -  SDA  - Serial Data Input
Título: Re: Comenzando con Mikrobasic
Publicado por: dogflu66 en 23 de Septiembre de 2006, 11:24:15
Hola amigos.

Estoy probando LCD8_CONFIG, me compila, pero no funciona el LCD
el mismo programa pero usando LCD_CONFIG, si me funciona

Código: Visual Basic
  1. 'Programa de prueba para usar un
  2. 'LCD 2x16 caracteres, con 8 bit de datos
  3.  
  4. '**** Configuracion del LCD para mi antiguo basic y hard
  5. 'Define LCD_BITS = 8
  6. 'Define LCD_DREG = PORTB
  7. 'Define LCD_DBIT = 0
  8. 'Define LCD_RSREG = PORTC
  9. 'Define LCD_RSBIT = 0
  10. 'Define LCD_EREG = PORTC
  11. 'Define LCD_EBIT = 4
  12. 'Define LCD_RWREG = PORTC
  13. 'Define LCD_RWBIT = 1
  14.  
  15. '**** Programa MKB
  16. program LCD_8Bit
  17.  
  18. trisa=0
  19. trisb=0
  20. trisc=0
  21.  
  22. main:
  23.      '****** Esto funciona *******
  24.     porta.0=0
  25.      delay_ms(1000)
  26.      porta.0=1
  27.      delay_ms(1000)
  28.  
  29.      '****** Esto no funciona ******
  30.     lcd8_config(portc, portb, 0, 1, 4, 7, 6, 5, 4, 3, 2, 1, 0)
  31.      lcd8_out(1, 1, "Hello")
  32. goto main
  33. end.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 26 de Septiembre de 2006, 14:51:40
Pues estuve probando y tampoco nada paso hice otro y tampoco se vio, estuve leyendo y la ayuda dice esto que creo es donde esta el problema

"Initializes LCD at Control port (ctrlport) and Data port (dataport) with pin settings you specify.

Parameters RS, EN, WR need to be in range 0–7;

Parameters D7 .. D0 need to be a combination of values 0–7 (e.g. 3,6,5,0,7,2,1,4)." oseacreo que combinamos mal las cosas.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 26 de Septiembre de 2006, 18:50:24
Hola:

No creo que sea eso, estube probando yo tambien y el problemas es que ni siquiera compila el mismo ejemplo de la ayuda.  Compilando ese mismo ejemplo tal cual esta en la ayuda da error.  :?
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 26 de Septiembre de 2006, 23:38:08
mmmm ya decia yo este MKB hace muchos panchos, pues las que he hecho compilan pero no se ven, lo bueno es que la de 4 bits si se ve y nos ahorramos mas pines
Título: Re: Comenzando con Mikrobasic
Publicado por: dogflu66 en 27 de Septiembre de 2006, 02:36:11
Parece que es otro fallejo del MKB.
Pero recuerda que el LCD con bus de datos de 4 Pin va mas lento.
Título: 74ls47
Publicado por: paco1980 en 28 de Septiembre de 2006, 04:04:08
hola a todos, soy nuevo en este foro y me gustaría pediros ayuda.
tengo problemas al montar un 7447, bueno, en realidad es un 74LS47, pero supongo que es lo mismo.He visto el esquema que hay por aqui, pero no consigo hacerlo funcionar.
Es el mismo montaje que tiene puesto lordlafebre con el pic y los displays de 7-segmentos, pero con ese conexionado no consigo que funcione.
¿me podeis dar alguna idea de lo que puede estar fallando?. Muchas gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 28 de Septiembre de 2006, 12:11:27
Hola:

No recuerdo si era de anodo o de catodo comun el display que utilice, revisa en el ejemplo de que tipo se esta utilizando, puede que estes utilizando el display de otro tipo.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 28 de Septiembre de 2006, 12:20:37
Hola:

Una cosa mas, me gustaria que pongas el enlace al esquema que estas montando, si son los de proteus, recuerda que en él no aparecen los pines de VCC y GND de los circuitos integrados, asi que ten en cuenta conectar el pin 7 del 7447 a Gnd y el 14 a VCC.
Título: Re: Comenzando con Mikrobasic
Publicado por: Trust en 28 de Septiembre de 2006, 12:52:09
Hola, saludos a todos los usuarios, me he acabado de registrar en este gran foro que acumula cantidad de sabiduria.

Estoy mirando ejemplos sencillos de encender un led y ya se encender/apagar a la velocidad que yo quiero. Ahora me interesa mucho saber como hacer para que un led se encienda poco a poco creo que se hace mediante pwm.

Pues he probado el ejemplo que sale en el Mikrobasic que se puede encontrar buscando en la ayuda: "pwm", salen 2 resultados pues el segundo explica como encender poco a poco un led utilizando un pic18F452. Yo tengo 2 pics 16F628 y 1 pic16F876 que es el que estoy usando ahora porque tiene puerto C.

(http://img212.imageshack.us/img212/2695/ledpwmsg9.jpg)

Código: [Seleccionar]

program Pwm_Test
dim j as byte

main:
  j = 0
  PORTC = $FF           ' Initialize PORTC
  Pwm_Init(5000)        ' Initialize PWM module, freq = 5kHz.
  Pwm_Start             ' Start PWM

  while true
    for i = 0 to 20
      Delay_us(500)
    Inc(j)
    Pwm_Change_Duty(j)  ' Change duty ratio
  wend
end.



He montado bien el circuito pero en vez de usar el PIC18F452 he usado el PIC16F876, he cambiado los pines para adaptar el circuito al pic16F876, tambien he puesto he puesto bien en el MKB el tipo de pic y el reloj, me compila bien, tengo bien configurado el Winpic800 y me graba bien el pic porque tambien he probado otras cosas  como encender/apagar led y esta comprobado que me lo ha grabado bien.

Espero una ayudita de este maravilloso foro.

Saludos.


Título: Re: Comenzando con Mikrobasic
Publicado por: paco1980 en 28 de Septiembre de 2006, 13:05:29
mis displays son de catodo comun. sc56-11ewa.
he visto que el 7447 tiene las salidas negadas. Pero aparte de eso, conectando solo el 7447 no consigo obtener mas de 0,5voltios en ninguna de sus salidas.
¿como se configuran LT, BI, RBI?
¿Son compatibles los displays?
a ver si se te ocurre que puedo estar haciendo mal.
"cosas de principiantes".
Gracias y un saludo.

NOTA: vcc y gnd estan el los pines 16 y 8 respectivamente.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 28 de Septiembre de 2006, 13:21:23
Hola:

Pues el 7447 es para displays de anodo comun, pero si estas conectando bien todo, deberias ver al reves los valores, es decir si el uno ves el segmento b y c encendido cuando esta bien, con ese debes ver solo apagado el segmento b y c. 
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 28 de Septiembre de 2006, 13:32:35
Hola:

mira, te pongo por aqui un ejemplo:

Código: FreeBasic
  1. 'Giovanni Lafebre
  2. 'Cuenca - Ecuador
  3.  
  4. pos var byte
  5. Seg var word
  6.  
  7. TRISB=%00000000
  8. PORTB=0
  9. TRISA.0=%1
  10. seg=1000
  11.  
  12. loop:
  13.     for pos=0 to 9
  14.         PORTB=pos
  15.         pause seg
  16.     next pos
  17.     seg=seg-100
  18.     if seg<100 then
  19.         seg=1000
  20.     endif
  21.     goto loop
  22. end

(http://img241.imageshack.us/img241/4166/dibujozu9.jpg)


Y por favor, para no mezclar los temas, si te surge otra duda, no lo hagas en este tema que trata sobre Mikrobasic, sino hazlo en donde viste el diagrama que me decias que estabas montando, esto para mantener el orden por favor.  :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: paco1980 en 29 de Septiembre de 2006, 03:41:10
Gracias lord por todo, ya se solucionó cambiando el display por uno de anodo común.
Con uno de cátodo común no se puede ver nada, debido a que el 7447 está preparado para lógica negada, y por lo tanto, la señal que saca por los pines a nivel alto no es suficiente para prender un display.

Un saludo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Flugplatz en 03 de Octubre de 2006, 18:04:04

..... He montado bien el circuito pero en vez de usar el PIC18F452 he usado el PIC16F876, he cambiado los pines para adaptar el circuito al pic16F876, tambien he puesto he puesto bien en el MKB el tipo de pic y el reloj, me compila bien, tengo bien configurado el Winpic800 y me graba bien el pic porque tambien he probado otras cosas  como encender/apagar led y esta comprobado que me lo ha grabado bien.

Espero una ayudita de este maravilloso foro.

Saludos.


Esperas una ayudita ahora, o en el futuro ... perdona, pero al final, no entiendo si te ha funcionado o no. El 16f876 te vale perfectamente. La serie 16f87x tienen dos módulos CCP, y por lo tanto dos salidas , C1 y C2. Lo único que tienes que tener en cuenta es que la frecuencia que pones en el Pwm_Init,  esté entre los rangos permitidos para el cristal del circuito ... en el apartado PWM del datasheet te viene la fórmula para comprobarlo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 04 de Octubre de 2006, 11:58:12
Hol amigos revisando sus comentarios y consejos me doy cuenta de que es mucho más práctico programar en Lenguaje de alto nivel que en ensamblador, tengo el PICBASIC y acabo de bajar la versión de prueba del MIKROBASIC y con respecto a este último es mi pregunta, realicé algunos ejemplos en MKB  y en un principio compiló pero al siguiente día hice modificaciones y me señala que no reconoce el "main" que va en el programa  aparece el siguiente comentario"Routine not found". Y hice las pruebas con otros programas y a veces compila y en otras marca este comentario, gracias de antemano

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 04 de Octubre de 2006, 13:41:47
Si el MKB trae muchos bugs, no eres al unico que le pasa eso, a veces a mi no me deja copiar y pegar codigo pero si lo tecleas todo vuelve a jalar, pequeños inconvenientes
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 04 de Octubre de 2006, 19:36:18
 :)Gracias Navaismo como lo mencionas es......... curiosamente habia copiado los códigos de esos programas de ejemplos que halle en el foro y los pegaba y trataba de compilar dándome ese error, tecle todo el programa como lo señalas y ¡sorpresa funciono!, :-/ gracias por compartir esos detalles que te hacen casi abandonarlo todo. Y emocionado por el logro abusando de tus aportaciones, ¿como se puede saber la longitud de tu programa ya que la capacidad de en esta versión de prueba es de 2K?

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 05 de Octubre de 2006, 01:46:30
creo que son 20 lineas o algo asi
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 05 de Octubre de 2006, 12:31:10
Hola:

En el MKB no son el numero de lineas, depende de las instrucciones que utilices, si no utilizas unas muy "complejas" el programa tendra mas lines, pero para programas mas complejos (GLCD por ejemplo) las lineas de programa seran menores.
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 06 de Octubre de 2006, 02:23:07
 :shock:Corrijanme porfavor si estoy equivocado, al momento de abrir el archivo en hexadecimal con el ICPROG por ejemplo aparece toda la codificación, mi duda es esta: puedo conocer mediante las direcciones que ocupa el programa su longitud?

Otra cosa ya que comento sobre el ICPROG al momento de programar un 16F870 si dejo activado el PWRT y el WDT no me trabaja bien el circuito programado y si desactivo todas los bits de configuración trabaja bien, qué está pasando?

Disculpen si esta pregunta no cabe en este foro

Gracias y un saludo
Título: Re: Comenzando con Mikrobasic
Publicado por: Nocturno en 07 de Octubre de 2006, 04:55:18
He colgado las Miniguías del maestro Navaismo en la zona de Descargas de El Rebujito (http://elrebujito.es/modules.php?name=Downloads), para facilitar su descarga y que no caduquen.

Las tenéis aquí: Miniguías de MikroBasic (http://elrebujito.es/modules.php?name=Downloads&d_op=viewdownload&cid=33)
Título: Re: Comenzando con Mikrobasic
Publicado por: ANIMAL en 07 de Octubre de 2006, 12:58:39
Buenas:

¿Mikrobasic realiza operaciones con coma flotante?
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 07 de Octubre de 2006, 13:59:38
Hola:

Si lo realiza, mira en la ayuda en el tema Math Library.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Octubre de 2006, 18:33:15
Muchas gracias Nocturno y nada de maestro aun soy un probre diablillo
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 08 de Octubre de 2006, 01:30:22
Auí nuevamente con una duda, me estoy dando cuenta del lo práctico del MKB y estoy realizando los ejemplos que los buenos amigos han publicado, alguien me puede decir como puedo leer el bit de un puerto en MKB, por ejemplo una entrada de un sensor o un interruptor y que esta sea registrada, estoy tratando de hacer un programa y no puedo encontrar nada en el HELP del programa...........Gracias
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 08 de Octubre de 2006, 01:37:29
Pues puedes poner Variable=PORTX.X, si es una entrada analogica con el ejemplo del ADC te quedaria mas que claro, pero comentanos mas, ¿es un adc, un simple 1 o 0, seria un pin para transmision o recepcion serie? cuentanos....
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 09 de Octubre de 2006, 22:46:13
Navaismo la idea es hacer una maqueta de un taladro automatico o uns sistema parecido que va emplear 4 motores que pienso controlar con dos bits para cada uno a través del puerto B de un 870 y empleando entradas digitales de interruptores de fin de carrera o detectores ópticos que me entreguen niveles altos o bajos cuando el recorrido es terminado este será el puerto A y parte del puerto C ya que llego a 8 entradasrelicé un programa que estoy viendo y lo estoy checando por partes y he encontrado algunos detalles solo los dos primeros pasos hace y después de aloca con estados generados sin que se den las entradas, si tienen un código en MKB les agradecería me lo facilitarán ya que pretendo hacer en el mismso programa una rutina para un motor siempre y cuando sea posible, anexo el programa que hice, no tengo experiencia en esto pero lo hago por el gusto de hacerlo y aprender,

program Automatismo
main:  'Aquí comienza el programa principal
ADCON1= %00000111  'PUERTA COMO DIGITAL
TRISA = %11111111  'PUERTA COMO ENTRADA
TRISB = %00000000  'PUERTB COMO SALIDA
TRISC = %00000111  'PARTE BAJA ENTRADA ALTA SALIDA

PORTA = 0
PORTB = 0
PORTC = 0

MOV_1:
CLRWDT
IF (PORTA.0=1)AND(PORTA.1=1) THEN
DELAY_MS(500)    'DAMOS PAUSA QUE RETARDA LA ACCION DE LA SALIDA
PORTB = $03
ELSE
GOTO MOV_1
END IF

MOV_2:
CLRWDT
IF (PORTA.2=1)AND(PORTA.3=1) THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $0C
ELSE
GOTO MOV_2
END IF

MOV_3:
CLRWDT
IF (PORTA.4=1)AND(PORTA.5=1) THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $30
ELSE
GOTO MOV_3
END IF

MOV_4:
CLRWDT
IF (PORTC.0=1)AND(PORTC.1=1) THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $C0
ELSE
GOTO MOV_4
END IF

MOV_5:
CLRWDT
IF (PORTC.2=1)THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $02
ELSE
GOTO MOV_5
END IF

MOV_6:
CLRWDT
IF (PORTA.1=1)THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $10
ELSE
GOTO MOV_6
END IF

MOV_7:
CLRWDT
IF (PORTA.5=1)THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $20
ELSE
GOTO MOV_7
END IF

MOV_8:
CLRWDT
IF (PORTA.3=1)THEN
DELAY_MS(500)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $40
ELSE
GOTO MOV_8
END IF

MOV_9:
CLRWDT
IF (PORTC.1=1)THEN
DELAY_MS(50)       'IGUAL QUE ANTES, SI NO SE PONE LA PAUSA ENTRA INSTANTANEO
PORTB = $00
ELSE
GOTO MOV_9
END IF
GOTO MOV_1
END.

tal vez no sea la forma más práctica de hacerlo pero estoy a disposición de realizar cambios que me puedan señalar, un saludo ..........Gracias


 
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Octubre de 2006, 00:05:35
Hola no entiendo bien bien lo que quieres hacer y apartir de que, pero viendo tu programa podrias usar un select case y mandar llamar lo que deseas. por ejemplo:
Código: [Seleccionar]

select case PORTA
  case 3  ' o lo que es %00000011
   Gosub Mov_1
  case 12 ' o lo que es %00001100
   Gosub Mov_2

......................' y asi para cada caso definiendo que es lo que pasa cuando nada es apretado
end select

Mov_1:
' tus sentencias
return

Bueno es un ejemplo, insisto no entiendo bien que es lo que quieras hacer pero puedes darte una idea. El codigo anterioir es solo de apoyo no cheque lo que hace tu programa.


Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 10 de Octubre de 2006, 21:11:31
Gracias Navaismo nuevamente por tu respuesta, he revisado el comentario pero no me queda claro la utilidad de la sentencia Select Case, que ventajas me trae sobre la otra forma de declaración, he visto algunos ejemplos pero no capto la idea , una pregunta más se va cumpliendo en forma secuencial cada "case", tiene que terminarse la secuencia, lei la ayuda pero me quedo igual.

El proyecto que pretendo hacer tiene como fin mover varios motores cuando estos en sus movimiento desplacen piezas o bandas transportadoras u otro artefacto que al llegar a un punto determinado accione interruptores de fin de carrera que pararían al motor y darán la pauta para que empíece otro con un movimiento diferente, estos movimientos los controlo con los niveles de salida del puerto que maneja dos bits de control por cada motor. El diseño debe cumplir un ciclo de trabajo y después retornar al inicio, situación en la cual mediante un botón de inicio el proceso puedade comenzar nuevamente, el programa que presenté es el que pretendo implementar pero trae detalles, espero haberme dado a entender.....Gracias :)
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Octubre de 2006, 12:19:00
Hi Moyin, ya  entiendo  lo que quieres hacer.

Bueno el select case sirve para evitar usar tantos IF's, el select lee los valores de una variable o de un puerto, solo se ejecutan los case's si la variable o el puerto cumple con el "case" que has elegido.

Es como una sentencia switch en C (para pc).

Un ejemplo para una variable seria:

"la variable puede tomar valores 1 y 2 por programa"
Código: [Seleccionar]
select case A
  case 1
     portb.0=1
  case 2
     portb.=0
end select

Lo que hace es ver el estado o el valor de la variable A si es 1 prende el RB0, si es 2 lo apaga cualquier otro valor no hace nada.

ahora como en tu caso leamos un puerto:

el puerto A de entrada (todo)
Código: [Seleccionar]
select case PORTA
 case 0  'o todos los puertos apagados 00000 lo k es cada valor para cada RA0-RA4
  gosub nada
 case 1  'solo RB0 encendido 00001
  gosub prende1B
 case 2 ' solo RB1 encendido 00010
   gosub x
 case 3 ' Rb0 y Rb1 00011
..............

y asi te la llevas para cada que quieras leer algo puedes usar 1 o 0, es decir puedes leer el  estado alto o el estado bajo eso tu lo implementas. Es mas versatil usar un select case mas que ifs aunque no siempre se puede.

Un ejemplo rapido de tu proyecto seria enciendes el programa y ningun swtich esta activado lo que hace avanzar tu banda, si llega a tope se activa un switch y va de regreso. seria algo asi.

Código: C#
  1. sub procedure Avanza()
  2.  portb.X=1
  3.  portb.X=0
  4. end sub
  5.  
  6. sub procedure Regresa()
  7.  delay_ms(1000)
  8.  portb.X=0
  9.  portb.X=1
  10. end sub
  11.  
  12. sub procedure detente()
  13.  Deley_ms(1000)
  14.  portb.X=0
  15.  portb.X=0
  16. end sub
  17.  
  18.  
  19. TRISA=31
  20.  
  21. main:
  22.  select case PORTA
  23.   case 0  "'ningun switch activado"
  24.      Avanza()
  25.   case 1  "'switch activado - tope de carrera"
  26.      Regresa()
  27.   case 2  "'switch activado- inicio"
  28.     detente()
  29. end select
  30.  
  31. goto main

Bueno espero te sirva de algo y te des una idea
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 12 de Octubre de 2006, 23:56:08
Nuevamente agradezco tu ayuda, estoy leyendo tu respuesta y creo que estoy entendiendo, en la primera oportunidad implemento el programa y checo su funcionamiento, si hay algun detalle me atreveré nuevamente a recurrir a la valiosa ayuda qu ustedes proporcionan :P.....mil Gracias
Título: Re: Comenzando con Mikrobasic
Publicado por: joebar en 25 de Octubre de 2006, 19:41:57
Hola a todos, soys los culpables de que muchos de nosotros nos enganchemos a esto del Mikrobasic, estoy ya haciendo mis pinitos, pero necesitaría conseguir la relación completa de instrucciones y comandos con su aplicación y a ser posible en Español, ¿alguien sabe donde la puedo conseguir?, muchas gracias por vuestra ayuda, espero algún día poder ayudar como muchos de vosotros lo haceis...

Saludos. ;)
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 26 de Octubre de 2006, 00:04:56
Hola Pues la lista completa y en español creo que es dificil tal vez buscando en la red.

La ayuda de MKB es muy cristalina, es decir, se entiende muy bien. y todos traen ejemplos. Dejame darte un "mal consejo" si eres principiante metete un poco con PBP ya que este no es tan "complejo" -no porque MKB lo sea- si no mas bien porque viene mas completo y no tiene tantos errores o bugs. Pero aun asi no dudes en ponernos las dudas de MKB al fin todos estamos aprendiendo.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: resorte en 20 de Enero de 2007, 10:03:33
saludos al foro
programa xxx
dim luces as a byte [4]
dis i as byte
luces
luces
luces
luces

main:
trisa0
trisb.0=1
trisb.1=1
porta= %00000000

miro:
if (portb.1 =1) then
delay_ms(1000)
if (portb. 1=1) then
p: i = 0
end if
for i=0 to 3
porta=luces
delay_ms (10)
next i
end if
goto p
end.


las entradas no las interpreta
¿donde puedo tener el fallo?
un saludo y gracias de antemano

Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 20 de Enero de 2007, 22:30:31
Vamos a comenzar con que se supone que hace tu programa no nada mas es poner y ya. Luego esta raro, si vas a usar IFS anidados te sugiero uses la sentencia ELSE si no tendran que ser IFs separados.  El TRISA debe llevar un igual: TRISA=0 y la variable luces porque la defines 4 veces de la misma manera. no veo los subindices en las definiciones.

Título: Re: Comenzando con Mikrobasic
Publicado por: resorte en 21 de Enero de 2007, 06:27:32
Gracias por contestar.
No se que paso cuando lo copie del programa al cuadro de responder mensaje se perdieron cosas.
ya lo tengo solucionado ya sabes al que no investiga le crece la barriga.
la aplicacion no son luces , es para el control de giro de un motor paso a paso .
con el rb0 y el rb1 le digo el sentido de giro .
quisiera depurarlo un poco mas a ver si podemos hacerlo.
he estado mirando por el foro los programas que mandais estoy dandole bueltas.
si pusieramos un rb2 y rb3 para cambiar el delay mas o menos para regular la velocidad me haria falta que esta se quedara grabada en un area de memoria ¿ como se podria hacer esto?
aqui va el programa si alguien quiere el circuito me lo pidan.
program PASO A PASO
dim IR as byte [4]       'DIRECCION GIRO  DERCHA
dim TRAS as byte  [4]    'DIRECCION GIRO  IZQUIERDA
dim i as byte             'BYTE DERECHA
dim e as byte             'BYTE IZQUIERDA
IR[0] = %00000011         'SECUENCIA DERECHA
IR[1] = %00000110
IR[2] = %00001100
IR[3] = %00001001
TRAS[0] = %00001001       'SECUENCIA IZQUIERDA
TRAS[1] = %00001100
TRAS[2] = %00000110
TRAS[3] = %00000011
main:
     TRISA=0       'PUERTO A SALIDAS
     TRISB=3       'PUERTO B ENTRADAS 0,1,2

P:
       if PORTB.0= 0 then     'SI ENTRADA 0 ES OK
       GOTO c                 'VE A C:
       end if                 'TERMINA IF

     if PORTB.1= 0 then        ' SI ENTRADA 1 ES OK
     goto d                    'VETE A D:
     end if                    'TERMINA IF
     GOTO P                    'REPITE P:
c:    i=0
     for i=0 to 3              'VE DE 0 A 3
          PORTA= IR         'ENVIA A LA SALIDA A SECUENCIA IR
          Vdelay_ms (12)       'CON UN RETARDO DE 12 MS
     next i
     goto p                     'RETORNA A P:
d:     e=0
     for e=0 to 3
          PORTA= TRAS [e]
          Vdelay_ms (12)
     next e
      goto P
end.
y el motor gira!!!!!!!
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 29 de Enero de 2007, 16:30:41
Hola, me esto iniciando en MKB y me da verguenza preguntar esto, pero tengo que hacerlo por que no encuentro la forma de hacerlo.

Copiando uno de los ejemplos de Paola, pude tomar lecturas analogicas. Ahora quiero tomar lecturas digitales en tren de pulsos es para tomar unas RPM y no se como hacerlo si me dan una mano se lo agradeceria mucho.

Carlos.
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 30 de Enero de 2007, 11:14:54
Hola Carlos!
Este articulo (http://www.todopic.com.ar/foros/index.php?topic=14428.0) del amigo Diego, a pesar de estar pensado para C, te puede ser MUY util.

Saludos!
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 05 de Febrero de 2007, 11:37:40
Hola compañeros, quiero hacer un tacometro y no se como leer el tren de pusos, ni como sacar el "W" para visulisarlo en el lcd estoy utilizando un pic 16f876a.

Estuve leyendo lo que escribio Red Pic pero es en C y como recien estoy empezando no me doy cuenta de pasarlo a MKB.

Por favor a ver si me dan una mano.

Saludos. Y espero su respuesta.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 05 de Febrero de 2007, 11:57:55
He usado este codigo que estaba en la ayuda, pero faltan datos y no se como ni donde ponerlos.

sub procedure interrupt
  if TestBit(INTCON, TMR1IF) = 1 then
    counter = counter + 1
    TMR0 = 96
    ClearBit(INTCON, TMR1F)
   ' ClearBit is realised as an inline function,
   ' and may be called from within an interrupt
  else
    if TestBit(INTCON, RBIF) = 1 then
      counter = counter + 1
      TMR0 = 96
      ClearBit(INTCON,RBIF)
    end if
  end if
end sub

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 11 de Febrero de 2007, 08:21:45

 Hola, estaria tambien interesado como Carli,en la respuesta de su pregunta, alguien podria poner un ejemplo de una temporización? Me gustaria poder tener una subrutina para incluir en programas futuros temporizaciones, un saludo y gracias de antemano.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Febrero de 2007, 18:30:08
Bueno como le comente a Carli no estoy muy ducho con lo de los timer, por ahi Mario dejo un link de Rentron donde ponen un ejemplo en PBP y el cual puede ser adaptable.

Con respecto a la temporizacion es simplemente una Pausa la cual puedes hacer tu con delay_ms() dentro de un for y segun la exactitud que requieres mas grande el for y menor el delay y lo vas ajustando.
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 12 de Febrero de 2007, 10:26:09


  Muchas gracias por tu respuesta, entonces puedo utilizar el delay_ms sin "limte" , bueno es un decir, me refiero q si quiero hacer una temporización de una hora ,por ejemplo, prodia hacerlo igual con el delay_ms, repitiendolo tantas veces como sea necesario,lo probare a ver q tal, asi es mucho mas sencillo, gracias nuevamente por tu respuesta, un saludo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 12 de Febrero de 2007, 11:08:52
Gracias, Navisimo.

Buscare el link.

Carlos.
Título: Re: Comenzando con Mikrobasic
Publicado por: AKENAFAB en 12 de Febrero de 2007, 17:14:05
HOla

Saludos!!!

Solo para decirles que esta muy padre para comenzar con mickrobasic, buenos ejemplos .

Esta padre el programa!!!

hasta luego!!
Título: Re: Comenzando con Mikrobasic
Publicado por: ivan braga en 28 de Febrero de 2007, 03:48:58
Esse é meu 3º post no FORUM (FORO) , então para aqueles que ainda não me conhecem,  sou brasileiro, então acho que a compreensão entre os idiomas sejá facil. Por isso escrevo em portugues,  aqui no Brasil há poucos forum iguais a este. Com tantas informações.

Estou tentando todos os programas em Basic , MIKROBASIC, PROTUES, PICBASIC, e verificando a parte boa e ruiim de cada um, porem tenho uma duvida, sei que este espaço é para MIKROBASIC, porem tenho uma duvida que é como configura o oscilador interno em todos os 3 software.

Desde já agradeço a ajuda.  (GRACIAS) :mrgreen:

Ivan Braga
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 10 de Marzo de 2007, 17:43:28
Hola!!  q tal foro, soy nuevo aqui,y he encontrado muy bueno este material, ademas me di cuenta que estan ocupando MKB, q es el compilador que yo utilizo desde hac una semana (recien comence hace una semana con  esto). Pero ya tengo unos problemillas, hay un prograna que en el simulador proteus me arroja un error, y al pasarlo al micro no funciona como debe, este es el codigo:

program secuancial2

'Circuito secencuancial con control start/stop

main:

trisb=%00000000  'Puerto B como salida
portb=%00000000  'Todas los pines del puerto B los llevamos a 0
trisa.0=1  'Puerto A como entrada, interesa A.0

while true

portb = %00000001
delay_ms(250)
 while porta.0 = 1
 delay_ms(50)
 wend

portb = %00000010
delay_ms(250)
 while porta.0 = 1
 delay_ms(50)
 wend

portb = %00000100
delay_ms(250)
 while porta.0 = 1
 delay_ms(50)
 wend

portb = %00001000
delay_ms(250)
 while porta.0 = 1
 delay_ms(50)
 wend
 
portb = %00010000
delay_ms(250)
 while porta.0 = 1
 delay_ms(50)
 wend

portb = %00100000
delay_ms(250)
 while porta.0=1
 delay_ms(50)
 wend

portb = %01000000
delay_ms(250)
 while porta.0=1
 delay_ms(50)
 wend

portb = %10000000
delay_ms(250)
 while porta.0=1
 delay_ms(50)
 wend

wend

end.


Este programita lo que debe hacer es un secuencial de luces, pero al precionar un pulsador conectado a la entrada A.0 deberia detenerse, y quedar encendido ese led, hasta que se suele el pulsador, ya que ahi seguira la secuencia de forma normal. Cuando lo paso al pic funciona el secuencial, pero puedo detenerlo con el pulsador en A.0......creo que puedo estar definiendo mal las entradas, pero lo hice como en un ejemplo, asiq ue no se que sera.......si me hechan una manito s elos agradeceria ;) y ahi les cuento......saludos :-)
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Marzo de 2007, 00:58:37
Hola yo usaria un programa mas bien tipo SELECT CASE, donde sin apretar el porta se esten barriendo los puertos del PORTB algo asi:


main:

trisb=0
trisa.0=1

 init:
  select case PORTA
     Case 0
          for i=0 to 7
              portb.i=1
              delay_ms(250)
              portb.i=0
               c=i
              delay_ms(250)
         next i
     Case 1
        delay_ms(250)
   end select


mas o menos asi si no con un IF, en teoria prendes el boton con un uno el del porta entonces cuando no esta apretado en el portb se barren sus puertos con un uno cuando aprietas el porta.0 el valor del PORTA cambia  1 y ahi hace una pausa como se supone que el micro se sale del CASE 0  se debe quedar encendido el LED. solo que cuando regrese al case 0 volvera desde el inicio.

Bueno es un pequeño empujon quisiera dar mas pero el tiempo no me lo permite.  Saludos


PD: si usas un pic con ADC asegurate de tener el porta digital
         
         




Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 11 de Marzo de 2007, 01:04:12
Esse é meu 3º post no FORUM (FORO) , então para aqueles que ainda não me conhecem,  sou brasileiro, então acho que a compreensão entre os idiomas sejá facil. Por isso escrevo em portugues,  aqui no Brasil há poucos forum iguais a este. Com tantas informações.

Estou tentando todos os programas em Basic , MIKROBASIC, PROTUES, PICBASIC, e verificando a parte boa e ruiim de cada um, porem tenho uma duvida, sei que este espaço é para MIKROBASIC, porem tenho uma duvida que é como configura o oscilador interno em todos os 3 software.

Desde já agradeço a ajuda.  (GRACIAS) :mrgreen:

Ivan Braga

Hola IVan en MKB cuando creas un proyecto te sale una ventana donde puedes habilitar los FUSES del PIC que estes usando.

En PBP tienes que añadir una linea al inicio del programa algo  como esto : @ DEVICE INTRC_OSC lo cual activa el oscilador interno del PIC

y en PROTON es con la palabra CONFIG
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 11 de Marzo de 2007, 23:03:57
Gracias navaisimo....asiq ueda muy cortito, q buena idea ;) lo probare y te cuento

aunque de todas formas me gustaria saber que error cometi en mi programa, para asi no volver a cometerlo, de seguro es de sintaxis, pero no se que sera.....si alguien me ayuda se lo agradeceria.....saludos :-)....ah y otra cosa, yo utilizo el 16f628, no tiene entrada analogica, solo entrada para comparadores, esas entradas tambien las debo definir como entradas digitales para que me funcionen? solo eso....saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 12 de Marzo de 2007, 04:40:31
uuhmmm no se que pasa.....definitivamente no puedo hacer funcionar las entradas. Hice el programita asi:

program secconled


main:

dim i as byte
trisb=0
trisa.0=1

 init:
  select case PORTA
     Case 0
          for i=0 to 7
              portb.i=1
              delay_ms(250)
              portb.i=0
              delay_ms(250)
         next i
     Case 1
        delay_ms(250)
   end select
  goto init
end.

suced que los led del puerto B hacen bien la secuencia, pero  no sucede nada con la entrada A.0, osea la llevo a 1 (5V) y no se detiene el loop (ose a las luces siguen con la secuencia) y si lo pongo a cero es lo mismo, osea, no tienen ningun efecto.......a lo mejor algun FUSE ( o fusible creoq ue le dicen) lo estoy activando o desactivando y no corresponde hacerlo......yo solo actico el MCLR para poder resetearlo, nada mas, alguien sabe si eso esta bien?....bueno, esperoq ue me ayuden a encontrar el error....adios ;)
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 12 de Marzo de 2007, 20:50:52
Si hay que desatcivar los comparadores, es con cmcon como desactivarlos  viene en el datasheet. si tengo un tiempito checo tu programa saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 13 de Marzo de 2007, 09:42:15
Ok, le hechare un vistazo a eso y te cuento.......y muchas gracias nuevamente......y si alguien tiene otra sugerencia sera muy bienvenida......saludos  8)
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 28 de Marzo de 2007, 02:18:13
Toda la razon navaismo, se debe colocar cmcon=7 , asi se desactivan los comparadores, y el puerto A pasa a ser un puerto digital. Esto lo comprobe poruqe hice un programita con una entrada y una salida en el puerto A, si la entrada es 1, entonces la salida es 1, si la entrada es cero, entonces la salida es cero. Sin el cmcon=7 no funcionaba, pero al ponerlo, funciono muy bien. El problema es que al programita que puse mas arriba, aun cuando le pongo el cmcon=7, la secuancia de los led no se detiene, como deberia, ni usando el case, como me dijiste navaisimo......no se que sucede, podria jurar que el codigo esta bien, pero no se que pasa, si alguien le puede hacer un vistasito se lo agradeceria, ya que esto no me deja seguir aprendiendo......y muchas gracias navaisimo, me fue muy util tu dato ;).
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 28 de Marzo de 2007, 11:43:12
Antes de modificar  tu programa ya que tambien lo veo bien inserta dentro del for y antes del next un IF

        for i=0 to 7
              portb.i=1
              delay_ms(250)
              portb.i=0
              delay_ms(250)
         IF porta.0=1 then
             goto init
         endif
         next i


con eso debe de sacarlo del ciclo y si aun no queda cambiemos instrucciones.

Intenta con WHILE

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Mazinyerz en 31 de Marzo de 2007, 00:23:12
Amigos tengo experiencia Programando microcontroladores PIC en Assembler y desde hace poco tiempo me ha interesado la programacion de estos micro en Basic, he trabajado un poco con el PBP, pero instale el Mikrobasic y me parece que tiene un buen ambiente de trabajo, pero vi algunas diferencias en cuanto a las instrucciones que con el PBP.

Quisiera aprender sobre el Mikrobasic por lo que quisiera que por favor me ayuden enviandome o diciendome donde puedo encontrar un Manual de este compilador y de sus instrucciones y algunos programas sencillos de ejemplo.

Muchas gracias...
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 31 de Marzo de 2007, 12:17:16
El manual viene en la ayuda, una pequeña traduccion la encontraras en el www.elrebujito.es en la zona de descargas. No inlcuye los comandos eso aun me falta. Para ejemplos esta el Hilo de Ejemplitos MKB y Proteus aqui mis mo en le foro.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 31 de Marzo de 2007, 18:00:22
Nvaismo, toda la razon, el programa ya me funciono, solo faltaba el cmcon=7, al parecer ese dia tenia mucho sueño y cometi un error en el programa, pero ya esta todo OK. Muchas gracias por el datito y los consejos, sin tu ayuda no hubiese podido avanzar en mi aprendisaje. Saludos;)
Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 17 de Abril de 2007, 14:59:31
Hola a todos,

Estoy empezando a programar con el Mikrobasic, vengo del PBP. La primera pega en la frente. Tengo una placa diseñada con una conexion a una pantalla LCD. La conexion la hago con 8 bit. Los puertos que se utilizan son los puertos B para las 8 lineas de datos y el Puerto A para RS,RW,E.

¿Pregunta? ¿Como puedo modificar en Mikrobasic los puertos para utilizar la placa? porque en el manual viene solo LCD8_Init para configurar con con los datos a los puertos D y las señales de control a los puertos B.

Gracias a todos

Saludos

 
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 17 de Abril de 2007, 15:49:59
Hola

ese comando que mencionas es el que necesitas según la ayuda es asi:

 Lcd8_Init( ctrlport, dataport)

puedes usar ahi mismo el puerto que desees implementar para los datos o para control.No necesariamente es con d y b en la misma ayuda usan otros puertos de referencia.

Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 19 de Abril de 2007, 15:40:16
Hola a todos,

Gracias PAOLA09. Creo que debo tener otro tipo de problema ya que incluso ese comando tampoco me lo lee.

Te voy a poner parte del codigo (entero es demasiado largo), este programa es para un aspirador en autoservicio. El cliente introduce una moneda y dependiendo de la moneda dispone del tiempo de aspirado. No me parece que el codigo sea el error. como no conozco mucho el Mikrobasic y esto estaba hecho para el PBP. Pregunta. ¿No debe de haber algunos archivos como el MODEFBAS que los hay en el PBP? ¿En Mikro tambien los hay?

Os voy a poner parte del codigo y abajo los errores del mikrobasic

Codigo

program Aspirador

TRISA=0
TRISB=0

Lcd8_Config(PORTB,0,1,2,3,4,5,6,7,PORTA,0,1,2)  error = Identifier Lcd8_Config was not declare
lcd_Cmd(LCD_CURSOR_OFF)


DIM tiempo AS word[10]  Error= Identifier DIM was not declare
dim moneda as word 'moneda var word
dim hour,dhour,minute,second,ticks,update as byte 'hour var byte ' Define hour variable
update var byte ' Define variable to indicate update of LCD
dim i,b,c,d,e as byte 'i var byte ' Debounce loop variable


' localiza la direccion de memoria para los contadores

addr1  = 0x0430
addr2 = addr1 + 1
addr3 = addr2 + 1
addr4 = addr3 + 1

Flash_Read(addr1, mon1)
Flash_Read(addr2, mon2)
Flash_Read(addr3, mon3)
Flash_Read(addr4, mon4)


i = 0
b = 0
c = 0
ADCON1 = 7 ' PORTA and E digital
Low PORTA.2 ' LCD R/W low = write
Pause 1000 ' Wait for LCD to startup
' tiempos de reglaje de la aspiradora

IF PORTA.3 = 1 AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE = 120
ENDIF

IF PORTA.3 = 1 AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
base = 150
ENDIF

IF PORTA.3 = 1 AND PORTA.4 = 0 AND PORTA.5 = 1 THEN
BASE = 180
ENDIF

IF PORTA.3 = 0 AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE = 210
ENDIF

IF PORTA.3 = 0 AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
BASE = 240
ENDIF

IF PORTA.3 = 0 AND PORTA.4 = 0 AND PORTA.5 = 0 THEN
BASE = 300
ENDIF

tiempo = 0
ASPIRA = 0

hour = 0 ' Set initial time to 00:00:00
minute = 0
second = 0
ticks = 0

update = 1 ' Force first display

' Set TMR0 to interrupt every 16.384 milliseconds
OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $a0 ' Enable TMR0 interrupts
On Interrupt Goto tickint


Gracias a todos
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 19 de Abril de 2007, 18:53:11
vamos a empezar bien ese codigo parace una mezcla entre MKB y PBP si estas usando MKB debes seguir sus reglas de programacion: Usar el Main, no poner declaraciones fuera del MAIN terminar con END etc. Puedes bajar las miniguias  los links estan al inicio de este tema te pueden ayudar mucho. procura leer la ayuda de MKB conforme uses las librerias.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 19 de Abril de 2007, 19:01:15
Hola

pues veo que cometes siempre varios errores.

1. en mkb se deben respetar el orden de programacio: interrupciones, declaraciones, asignacion registros, luego si el cuerpo del programa si no llevas esta estructura veras el error del dim.

2. el if se cierra con end if no con endif eso es en proton en mkb es distinto.

3. para lcd8 no hay lcd_config solo init.

4. on interrupt no hay solo con modificar el intcon.

5.el flash_read se usa distinto es var=Flas_read(addres)

6. hay variables que no puedes usar con libertad en mkb como hour entre otras. es decir todas aquellas que se te resalten en azul estas debes cambiarlas por otras.

7.aqui no se usa la instruccion pause se usa delay_ms o delay_us. ya puedes ver mas en la ayuda.

he modificado un poco tu programa, ya sabras lo que deseas hacer, como lo tengo el lcd anda probado con proteus.

Código: [Seleccionar]
program tpmkb

sub procedure interrupt
  TMR0 =  96
  INTCON = $20
end sub

main:
 dim text as char[20]
 dim tiempo as word[10]  'Error= Identifier DIM was not declare
 dim moneda as word 'moneda var word
 dim hour1,dhour,minute1,second1,ticks as byte 'hour var byte ' Define hour variable
 dim update as byte ' Define variable to indicate update of LCD
 dim i,b,cc,dd,e as byte 'i var byte ' Debounce loop variable
 dim base1 as word
 dim aspira as word
 dim addr1, addr2,addr3,addr4 as word
 dim mon1,mon2,mon3,mon4 as word

  OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
  TMR0 =  96
  INTCON = $A0
  TRISA = 0
  TRISB = 0
  ADCON1 = 6 ' PORTA and E digital
Lcd8_Init(PORTB, 7, 6, 5, 4, 3, 2, 1, 0, PORTA, 0, 1, 2)
Lcd8_Cmd(Lcd_CURSOR_OFF)
Lcd8_Out(1, 1,"hola") ' Print text at LCD


addr1  = 0x0430
addr2 = addr1 + 1
addr3 = addr2 + 1
addr4 = addr3 + 1
mon1 = Flash_Read(addr1)
mon2 = Flash_Read(addr2)
mon3 = Flash_Read(addr3)
mon4 = Flash_Read(addr4)


i = 0
b = 0
cc = 0

PORTA.2=0 ' LCD R/W low = write  low no existe
delay_ms (1000) ' Wait for LCD to startup no hay pause
' tiempos de reglaje de la aspiradora

IF PORTA.3 = 1 then'AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE1 = 120
END IF

IF PORTA.3 = 1 then'AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
base1 = 150
END IF

IF PORTA.3 = 1 then'AND PORTA.4 = 0 AND PORTA.5 = 1 THEN
BASE1 = 180
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE1 = 210
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
BASE1 = 240
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 0 AND PORTA.5 = 0 THEN
BASE1 = 300
END IF

tiempo[0] = 0
ASPIRA = 0

hour1 = 0 ' Set initial time to 00:00:00
minute1 = 0
second1 = 0
ticks = 0

update = 1 ' Force first display

end.

Aqui te coloco solo lo del lcd para los demas que deseen usarlo

Lcd8_Init(PORTB, 7, 6, 5, 4, 3, 2, 1, 0, PORTA, 0, 1, 2)
Lcd8_Cmd(Lcd_CURSOR_OFF)
Lcd8_Out(1, 1,"hola") ' Print text at LCD


Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 19 de Abril de 2007, 19:44:24
Hola

De nuevo gracias por la rapida respuesta.

Como he comentado es verdad que he programado en PBPy me he cambiado a MikroBasic, por eso aun no controla exactamente como van ordandos los bloques de programas.

Lo voy a probar, ahora parece con las modifcaciones que me habeis hecho que ya compila el programa.

cuando los pruebe os cuento.

Gracias......

Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 21 de Abril de 2007, 21:19:28
Hola a Todos,

He modificado el codigo de PBP que tenia de origen a Mikrobasic, según he visto en las correciones que me habeis hecho en mi programa.

Ya no me errores de las sentencias que uso, aun asi no me compila el programa por el siguiente error:

Link error: 0: not found
Link error: Bank not found: 0

Supongo que será porque no he identificado el Banco de memoria que quiero usar.

¿Me podeis explicar como se hace? o decirme donde lo puedo buscar en el manual.

Gracias.


P.D. si quereis que postee el codigo me lo decis.

Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 21 de Abril de 2007, 22:00:08
Pues si primero  que nada es necesario leerse el manual y siempre es mejor meter el codigo para echarle un vistazo
Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 22 de Abril de 2007, 04:53:39
Hola

Aqui va el codigo

program Aspirador

sub procedure interrupt
  TMR0 =  96
  INTCON = $20
  GOTO tickint
end sub

main:
 dim text as char[20]
 dim tiempo,seg as byte  'Error= Identifier DIM was not declare
 dim moneda as word 'moneda var word
 dim hour1,dhour,minute1,second1,ticks as byte 'hour var byte ' Define hour variable
 dim update as byte ' Define variable to indicate update of LCD
 dim i,b,cc,dd,e as byte 'i var byte ' Debounce loop variable
 dim base1 as word
 dim aspira as word
 dim addr1, addr2,addr3,addr4 as word
 dim mon1,mon2,mon3,mon4 as word
 dim mon1_1,mon2_2,mon3_3,mon4_4,seg_1 as string[5]

  OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
  TMR0 =  96
  INTCON = $A0
  TRISA = 0
  TRISB = 0
  ADCON1 = 6 ' PORTA and E digital
Lcd8_Init(PORTB, 7, 6, 5, 4, 3, 2, 1, 0, PORTA, 0, 1, 2)
Lcd8_Cmd(Lcd_CURSOR_OFF)
Lcd8_Out(1, 1,"hola") ' Print text at LCD


addr1  = 0x0430
addr2 = addr1 + 1
addr3 = addr2 + 1
addr4 = addr3 + 1
mon1 = Flash_Read(addr1)
mon2 = Flash_Read(addr2)
mon3 = Flash_Read(addr3)
mon4 = Flash_Read(addr4)


i = 0
b = 0
cc = 0

PORTA.2=0 ' LCD R/W low = write  low no existe
delay_ms (1000) ' Wait for LCD to startup no hay pause
' tiempos de reglaje de la aspiradora

IF PORTA.3 = 1 then'AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE1 = 120
END IF

IF PORTA.3 = 1 then'AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
base1 = 150
END IF

IF PORTA.3 = 1 then'AND PORTA.4 = 0 AND PORTA.5 = 1 THEN
BASE1 = 180
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 1 AND PORTA.5 = 1 THEN
BASE1 = 210
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 1 AND PORTA.5 = 0 THEN
BASE1 = 240
END IF

IF PORTA.3 = 0 then'AND PORTA.4 = 0 AND PORTA.5 = 0 THEN
BASE1 = 300
END IF

tiempo = 0
ASPIRA = 0

hour1 = 0 ' Set initial time to 00:00:00
minute1 = 0
second1 = 0
ticks = 0

update = 1 ' Force first display




OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $a0 ' Enable TMR0 interrupts



mainloop:
PORTC.3 = 0
PORTD.4 = 0 ' PORTB lines low to read buttons
PORTD.5 = 0
PORTD.6 = 0
PORTD.7 = 0
TRISD = 0 ' Enable all buttons


If PORTD.7 = 1 Then
   goto MONEDA4
end if
If PORTD.6 = 1 Then
   goto MONEDA3
end if
If PORTD.5 = 1 Then
   goto MONEDA2
end if
If PORTD.4 = 1 Then
   goto MONEDA1
end if
IF PORTE.0 = 1 THEN
    Lcd8_Cmd(Lcd_Clear)
    ' PRIMERA FILA DE CONTADORES
    LCD8_OUT (1,1,"M1:")
    WORDTOSTR(MON1,MON1_1)
    LCD8_OUT (1,4,MON1_1)
    LCD8_OUT (1,11,"M2:")
    WORDTOSTR (MON2,MON2_2)
    LCD8_OUT (1,14,MON2_2)
    ' SEGUNDA FILA DE CONTADORES
    LCD8_OUT (2,1,"M3:")
    WORDTOSTR(MON3,MON3_3)
    LCD8_OUT (2,4,MON3_3)
    LCD8_OUT (2,11,"M4:")
    WORDTOSTR (MON4,MON4_4)
    LCD8_OUT (2,14,MON4_4)
    delay_ms (9000)
    delay_ms (9000)
END IF

chkup:
    If update = 1 Then   '*********************************
        if tiempo>0 then
            Lcd8_Cmd(Lcd_Clear)
            Lcd8_out (2,1,"TIEMPO:    ")
            wordtostr (seg,seg_1)
            lcd8_out (2,10,seg_1)

       else
            Lcd8_Cmd(Lcd_Clear)
            Lcd8_out (1,1,"    BIENVENIDOS")

            LCD8_OUT (2,1," INTRODUZCA MONEDAS")
            PORTD.1=0
        end if

    update = 0 ' Screen updated
    End if

Goto mainloop

' Incremento moneda 1

moneda1:
MON1=MON1+1
' Flash_write(addr1, mon1)
PORTD.1=1
PORTC.3=1
Lcd8_Cmd(Lcd_Clear)
LCD8_OUT (1,1,"MONEDA:  0,50 EURO")
tiempo = tiempo + base1
PORTC.2=1
Goto debounce

' Incremento moneda 2
moneda2:
MON2=MON2+2
'write 3,mon2
PORTD.1=1
PORTC.3=1
Lcd8_Cmd(Lcd_Clear)
LCD8_OUT (1,1,"MONEDA:  1,00 EURO")
tiempo = tiempo + (base1*2)
FOR B = 1 TO 2
    PORTC.2=1
    delay_ms (50)
NEXT B
Goto debounce

' Incremento moneda 3
moneda3:
MON3=MON3+4
'write 5,mon3
PORTD.1=1
PORTC.3=1
FOR C = 1 TO 4
    PORTC.2=1
    delay_ms (50)
NEXT C
PORTD.0=1
Lcd8_Cmd(Lcd_Clear)
LCD8_OUT (1,1,"MONEDA:  2,00 EURO")
tiempo = tiempo + (base1*4)
Goto debounce

' Incremento moneda 4
moneda4:
MON4=MON4+2
'write 7,mon4
PORTD.1=1
PORTC.3=1
PORTC.2=1
Lcd8_Cmd(Lcd_Clear)
LCD8_OUT (1,1,"MONEDA:  FICHA    ")
tiempo = tiempo + (base1*2)

  debounce: For i = 1 to 25
  delay_ms(10)
  Next i

  update = 1 ' Set to update screen

  Goto chkup


         tickint: ticks = ticks + 1 ' Count pieces of seconds
         If ticks < 61 Then goto tiexit ' 61 ticks per second (16.384ms per tick)

         ticks = 0
         second1 = second1 + 1
                 if tiempo > 0 then
                 tiempo = tiempo - 1
                 end if

          update = 1 ' Set to update LCD
          end if

tiexit: INTCON.2 = 0 ' Reset timer interrupt flag



end.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 24 de Abril de 2007, 02:16:31
Hola compañeros/as, necesito ayuda, estoy leyendo un voltaje de alimentación, tengo el problema de no poder añadirle decimales a la lectura. Le lectura es fiel, pero me faltan los decimales. :oops:
Les dejo el código a continuación.

     lcd_out(2,8," Bat")
     bateria = adc_read(1)
     voltajebateria = (bateria/63)
     wordtostr(voltajebateria,volbateriatest)
     lcd_out(2,10,volbateriatest)

Espero puedan ayudarme.

Desde ya muchas gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 24 de Abril de 2007, 10:56:04
 Carli ya definiste las variables como FLoat.


Por cierto Enricar retoma el consejo de Pao, necesitas una programacion mejor estructurada. checa bien los consejos que te puso en el post anterior al tuyo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 24 de Abril de 2007, 11:57:14
Gracias Navisimo, soy nuevo en esto y a decir verdad he copiado y pegado, con algún aporte de logica.

Los mantengo al tanto de mis avances.

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: pablobav en 25 de Abril de 2007, 01:20:20
Hola que tal soy nuevo en esto de los pic, realice una prueba con mikrobasic.
La idea es que es que titile el led rojo, cuando toco el pulsador de portb.0 mande los caracteres y se prenda el led verde que me indica que los mando, pero cunado lo suelto tendria que seguir titilando el led rojo.  El led rojo se apaga y no se porque.
Ya se que es muy basica quizas la pregunta pero estoy trabado con esto, les agradezco.


program serie

main:
trisa=0
trisb=1

if portb.0=1 then
Usart_Init(9600)
Usart_Write("C")
Usart_Write("E")
Usart_Write("R")
Usart_Write("O")
Usart_Write("_")
porta.0=1                 ´enciendo led verde
delay_ms(1000)
porta.0=1                 ´apago led verde
delay_ms(1000)                       
end if

porta.2=0                   ´enciendo led rojo
delay_ms(500)
porta.2=1                   ´apago led rojo
delay_ms(500)
goto main:

end.
Título: Re: Comenzando con Mikrobasic
Publicado por: pablobav en 26 de Abril de 2007, 23:34:57
me autorespondo el mensaje, el problema era que Usart_init(9600) lo debo iniciar solo una vez, como estaba en el bucle cuando esta iniciado y lo quiero volver a iniciar parece que se tilda el pic, OJO!! en proteus te simula como que todo anda bien pero no es asi, saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 29 de Abril de 2007, 08:51:30
Tengo problemas con Mkb, despúes de varias compilaciones de un mismo archivo, cuando vuelvo a compilar no me modifica el .hex, será alguna opción que desactive o alguna falladel programa?  :5]

Espero su respuesta.....

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 29 de Abril de 2007, 14:10:12
Que version de MKB usas, a mi me pasaba lo mismo y hasta me generaba un error y tenia que cerrar el programa y volverlo a abrir. con la que me daba esas broncas era con la version 5.0
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 29 de Abril de 2007, 16:10:31
Si Navisimo, utilizo la versión 5, sabes donde puedo encontrar alguna que funcione bien ó hacerme el favor de decirme cual es una de las ultimas que se pueda "bajar completa". Por que ya ni cerrandolo funciona.

Desde ya muchas gracias, te dejo mi msn carlosmariavazquez@hotamail.com.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 01 de Mayo de 2007, 19:45:22
Pueden decirme cual es la ultima versión de Mikrobasic.

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: PAOLA09 en 01 de Mayo de 2007, 19:52:53
Hola

la última versión es la 5.0.0.2  :)
Título: Re: Comenzando con Mikrobasic
Publicado por: Mazinyerz en 01 de Mayo de 2007, 21:11:11
Amigos, he leido sobre lo que es la sentencia Byref cuando utilizo Procedimientos y Funciones, pero todavia no me queda 100% claro.Quisiera por favor me ayudaran a comprender esto, con teoria y ejem`plos.


Gracias por su ayuda...
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 01 de Mayo de 2007, 21:55:37
Carli Revisa tus privados, en cuanto Mazinyer si miraras las miniguias que estan al inicio de este tema y que son videotutoriales, ademas de los demas ejemplos podras ver que la sentencia BYREF no es tan necesaria, de hecho puedes regresar el valor sin ponerla cuando son procedimientos y funciones. EN este mismo subforo o Bien en el antiguo rebujito hoy MicroPIC de NOCTURNO esta parte del manual traducido al español. le hacen faltas las librerias pero resulta muy util.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 01 de Mayo de 2007, 22:21:47
Gracias Navisimo por tu pronta y completa respuesta y también a vos Pao, intale la version 5.0.0.2 y me el mismo error desde que inicia y cuando intento escribir algún caracter.  :5]

Le paso a ustedes también.

Desde ya muchas gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 01 de Mayo de 2007, 22:25:26
Me olvidaba, cuando reinstale la versión 5.0.0.0 luego de el fallido intento con la 5.0.0.2, solucione el problema momentaneamente, por lo menos compila las modificaciones.

Igualmente me interesaria solucionar este "problemita" con la nueva versión.

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Mazinyerz en 03 de Mayo de 2007, 19:28:37
Gracias Navaismo por tu respuesta, anteriormente a leerla busque informacion en internet y pude comprender la instruccion byref, voy a desarrollar un ejemplo sencillo que ilustre esto para que otros usuarios que como yo van empezando la puedes captar. Aunque como dices tu no es muy necesaria. Pero es bueno comprenderla.
Título: Re: Comenzando con Mikrobasic
Publicado por: Mazinyerz en 04 de Mayo de 2007, 21:07:40
Amigos cuando intento realizar un programa donde exista la aplicacion de una formula como V=R*R*h*PI, siempre compila bien pero a la hora de depurarlo siempre sale un mensaje indicando como si me faltara un archivo matematico y no puedo seguir depurando.....


Ayuda por favor...

Gracias
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 05 de Mayo de 2007, 00:15:33
puedes poner esa parte del programa y el error. para tratar de compilarlo
Título: Re: Comenzando con Mikrobasic
Publicado por: Mazinyerz en 07 de Mayo de 2007, 15:56:18
Amigo Navaismo de Hoy a mañana, coloco el programa donde me da el error.
Título: Re: Comenzando con Mikrobasic
Publicado por: ivan braga en 09 de Mayo de 2007, 16:53:44
Saudações a todos.

Gostaria se possível da ajuda de algum companheiro, para que eu possa entender porque a função NOT funciona apenas no PORT completo.

Baseado neste exemplo do próprio HELP do programa dá para se notar que estou dizendo:
program Led_blinking

main:
    TRISB = 0           ' Configure pins of PORTB as output
    PORTB = %11111111   ' Turn ON diodes on PORTB
    while true
      PORTB = not PORTB ' Toggle diodes on portb
      delay_ms(1000)
    wend
end..

No programa a baixo pode-se verificar a simples mudança que fiz usando apenas um pino do PORTB.
program teste

main:   trisB=0
           trisA=1
           portA=0
           portb=0
           cmcon=7

inicio:          if portA.0=1 then
           portB.0 = not portB.0
           delay_ms(500)
           end if
           goto inicio
end.

Porém, se utilizar todo o PORTB funcionam normalmente. Será um bug do meu programa quer a última versão demo 5.02, o realmente este não funcionam em apenas um pino.
Se for do programa, gostaria de saber se há algum jeito ou maneira parecida com o comando TOGGLE  do PICBASIC ou PROTON.

Desde já agradeço a atenção dada a minha pergunta. PS( o pic que estou usando é 16F628)

Ivan Braga
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 09 de Mayo de 2007, 18:46:13
Hola Ivan creo que solo aplica para todo el puerto, porque not no es una funcion si no un operador matematico.  En cuanto a la funcion tupo toggle no he encontrado nada parecido pero podrias hacer una subrutina con la funcion testbit y de ahi ver que es lo que debe hacer tu programa. como lo hacen aqui http://www.todopic.com.ar/foros/index.php?topic=13812.msg82858#msg82858
Título: Re: Comenzando con Mikrobasic
Publicado por: pablobav en 09 de Mayo de 2007, 19:34:13
Hola gente, tengo un problema con las interrupciones en mikrobasic, intente hacer varias pruebas y no me funcionaba hasta que probe con algo basico, use este ejemplo del help para ver si por lo menos este andaba y no lo hace asi imagino que debe ocurrir algo con el proteus.

program tmr0

dim counter as word

sub procedure interrupt
   inc(counter)          ' Increment value of counter on every interrupt
   TMR0   = 96
   INTCON = $20          ' Set T0IE, claer T0IF
end sub


main:
  OPTION_REG = $84       ' Assign prescaler to TMR0
  TRISB = 0              ' PORTB is output
  PORTB = $FF            ' Initialize PORTB
  counter = 0            ' Initialize counter
  TMR0 = 96
  INTCON = $A0           ' Enable TMRO interrupt

  while TRUE
    if counter = 400 then ' if counter is 400, then toggle PORTB leds and reset counter
      PORTB  = not(PORTB)
      counter = 0
    end if
  wend

end.

supuestamente tendria que titilar el portb cada 1 segundo pero no lo hace, espero que me puedan ayudar, saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 09 de Mayo de 2007, 19:59:10
compañeros tengo un problema, por que ya tengo la placa de pcb montada y quiero ver si lo puedo solucionar con soft.

Estoy usando un bulvo de precion de aceite por el cual monte en la paca un puente de wheastone, el probelma es que el bulbo mide al reves de como yo pensaba que mediria, cuando tendria que estar a fondo de escala se pone a cero y cuando tendria que marcar cero me marca 1024.

Les paso el codigo para ver si podemos invertir los valores.

     Presaceite = adc_read(2)
     presionaceite =(Presaceite)
     wordtostr(presionaceite,Presaceitest)
        Lcd_Chr(2, 3, Presaceitest[1])
        Lcd_Chr(2, 4, Presaceitest[2])
        Lcd_Chr(2, 5, Presaceitest[3])                                           
        'Lcd_Chr(2, 5, 46)
        Lcd_Chr(2, 6, Presaceitest[4]

desde ya les agradesco mucho.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 10 de Mayo de 2007, 10:08:33
Gracias compañeros, ya encontre la solucion, abajo le pongo el codigo con la misma. Igualmente si les parece que no es así me dicen.

resaceite = adc_read(2)
     presionaceite = (Presaceite*10*-1)
     wordtostr(presionaceite,Presaceitest)
        Lcd_Chr(2, 3, Presaceitest[1])
        Lcd_Chr(2, 4, Presaceitest[2])
        Lcd_Chr(2, 5, Presaceitest[3])                                           
       
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 10 de Mayo de 2007, 13:26:35
Tengo otro problema :8}, resulta que el sensor que uso es un vulvo resistivo pero logaritmico el guacho :shock:, alguien sabe como hacer el calculo? es sobre el mismo codigo que les mostre antes.

Gracias de antemano y espero sus respuestas.
Título: Re: Comenzando con Mikrobasic
Publicado por: pablobav en 10 de Mayo de 2007, 15:40:57
Este es otro ejemplo, lo saque de un libro de mikrobasic, cuando trato de imularlo en proteus no lo simular bien, en resumen, cada vez que pongo interrupciones el proteus anda mal, si no hay interrupciones funciana perfecto lo que simulo.

program testinterrupt

symbol LED_run = PORTB.7                  ' LED_run is connected to PORTB pin 7
symbol LED_int = PORTB.6                  ' LED_int is connected to PORTB pin 6


sub procedure interrupt                   ' Interrupt service routine

  if INTCON.RBIF = 1 then                 ' Changes on RB4-RB7 ?
    INTCON.RBIF = 0

  else if INTCON.INTF = 1 then            ' External interupt (RB0 pin) ?
          LED_run = 0
          LED_int = 1
          Delay_ms(500)
          INTCON.INTF = 0

       else if INTCON.T0IF = 1 then       ' TMR0 interrupt occurred ?
               INTCON.T0IF = 0

            else if INTCON.EEIF = 1 then  ' Is EEPROM write cycle finished ?
                    INTCON.EEIF = 0

                 end if
            end if
        end if
  end if
end sub


main:

  TRISB = %00111111        ' Pins RB6 and RB7 are output
  OPTION_REG = %10000000   ' Turn off pull-up resistors
                           '     and set interrupt on falling edge
                           '     of RB0 signal
  INTCON = %10010000       ' Enable external interrupts
  PORTB = 0                ' Initial value on PORTB

eloop:                     ' While there is no interrupt, program runs in endless loop:
  LED_run = 1              '     LED_run is on
  LED_int = 0              '     LED_int is off
goto eloop

end.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 26 de Mayo de 2007, 02:56:44
Tengo otro problema :8}, resulta que el sensor que uso es un vulvo resistivo pero logaritmico el guacho :shock:, alguien sabe como hacer el calculo? es sobre el mismo codigo que les mostre antes.

Gracias de antemano y espero sus respuestas.

Puede que sea un poco tarde, pero si aún no lo haces, te puedo decir lo siguiente: el valor de presión de aceite que mediste, debes tomarlo, y usarlo como exponente de e (el número de euler), osea así : presionlineal = e^(presionleida), en mikroBasic la funcion utilizada es Exp(presionleida). osea quedaría así: presionlineal = Exp(presionleida). Espero te sirva, saludos  8) :-/

PD: claro que hay que ocupar una variable de coma flotante, ya serán númeors decimales los que te entregue esa función. No se lo que sucede si no la declaras como coma flotante, los decimales los recorta (omite) o que, pero para asegurare la declaras como flotante.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 26 de Mayo de 2007, 03:26:48
aahhh....creo que cometí un error...... si el instrumento te entrega la medida de la presión logaritmica en base "e" ( Ln o logaritmo natural), debes hacer lo que te dije. Pero lo mas probable es que te la entregue en logaritmo base 10 (Log), así que lo que tendrás que hacer es: presionlineal = 10^(presionmedida). En MKB esto se hace con la función Pow. Se utiliza así :

presionlineal = Pow(10,presionmedida) 

saludos....
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 26 de Mayo de 2007, 03:31:37
Yo de neuvo, no es que me quiera tomar el foro jeje, es que se me olvidaba, necesito hacer una pregunta, a ver si alguien se anima a responder.

Si ocupo la interrupción por cambio de estado de los pines b7 a b4, pero solo quiero ocupar los pines b7 y b6. ¿Puedo ocupar los pines b6 y b5 como salidas mientras los otros dos estan siendo ocupados como entradas, las cuales producen interrupciones?

agradecería mucho sus respuestas.....saludos ;) :-/ :-) :D 8)
Título: Re: Comenzando con Mikrobasic
Publicado por: Nocturno en 26 de Mayo de 2007, 03:40:33
Sí puedes, configurando el TRIS como necesites.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 26 de Mayo de 2007, 04:47:54
Sí puedes, configurando el TRIS como necesites.

exelente! que bien que se pueda .....muchas gracias por responder...saludos ;)
Título: Re: Comenzando con Mikrobasic
Publicado por: enricar883 en 16 de Junio de 2007, 19:59:38
Hola a todos,

Hace tiempo que no entraba en el foro. Hice caso de vuestras recomendaciones y me he leido el manual de MKB y las miniguias, que por cierto muy bueno.

Por si alguien no lo sabe vengo de progamar en PBP.

Una cosa rara que me ocurre que un programa sencillo como el de los leds, lo pongo aqui me ocurre lo siguiente.

program BLINK_1

TRISA = 0

main:

PORTA.0 = 1
DELAY_MS(500)
PORTA.0 = 0
DELAY_MS(500)

GOTO main

END.



Modifico el tiempo en msegundos en Delay, grabo el proyecto, lo cargo en la placa que tengo de microchip Easypic4 y no me modifica la velocidad de los leds. En cambio el programa esta cambiado y carga con PICFLASH el Hex.

Despues de estar probando diferentes configraciones editando el proyecto, lo grabé una vez cerré el programa (Editor), lo vuelvo a abrir, cargo el programa en la placa y funciona.

Le ocurre esto a alguien?

No creo que esto sea normal. El MKB que tengo lo tengo con licencia y todo.

Por cierto la placa Easypic4 para hacer pruebas a traves de una conexion USB, estupenda, la recomiendo.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 18 de Junio de 2007, 01:54:30
a mi no me ha pasado, pero he leido en este foro a dos personas aparte de ti que les ha pasado lo mismo, que cambian el programa y no les modifica el archivo .hex  al compilar denuevo, y que deben cerrarlo y abrirlo denuevo, que ahi funciona. al parecer es un error del programa, que mala suerte, pq a mi me gusta mucho. Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 02 de Julio de 2007, 01:41:41
En una oportunidad, tuve que desinstalar el programa y volver a instalarlo para que compile, cosa de mandinga :shock:

Carlitos.
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 29 de Julio de 2007, 23:30:32
hola que tal pues quiero convertir el codifo de PBP a MKB  pero no me funciona , el led se queda prendido una vez presionado el boton
Código: [Seleccionar]
inicio:
if PORTB.0 = 0 then
high 1
else
low 1
endif
goto inicio
end

Código: [Seleccionar]
program luces

 TRISB=0
MAIN:

if PORTB.0 = 0 then
    PORTB.1=1
  else
    PORTB.1=0
    'DELAY_MS(500)
  end if
 
GOTO MAIN

END.


Título: Re: Comenzando con Mikrobasic
Publicado por: mariano_pic en 30 de Julio de 2007, 10:14:46
asi unciona mejor:

Código: [Seleccionar]

program test

MAIN:
 TRISB=%00000001
 portb=0

while (true)
if PORTB.0 = 0 then
    PORTB.1=1
  else
    PORTB.1=0
    'DELAY_MS(500)
  end if
  wend

END.

 :D
 :-)
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 30 de Julio de 2007, 12:04:40
hey gracias!!!, no lo puedo checar ahorita pero se ve bien, pero ¿por que el mio no funciona?

gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: mariano_pic en 30 de Julio de 2007, 12:32:05
por que tienes que poner como entrada el pin del puerto que vas a usar como entrada del pulsador  :-)
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 31 de Julio de 2007, 17:49:27
ok TRISB=%00000001 vdd??

muchas gracias, bueno ahora te cuento para que lo cuiero,

una migo tiene un auto(un renault 12 en buenas condiciones) y quiere ponerle retardo de luces, es decir cuando saque la llave se queden prendidos los faros por un tiempo (solo si traia las luces prendidas)

la ignicion es el boton y el led va a ser un transistor y va a un relevador.

como me aconsejan hacerle para ponerle luces automaticas? con un LDR, pero tendria que usar un convertidor analogico a digital? tengo entendido que algunos pic ya lo traen.

llevo como 6 dias con el mikrobasi y el isis, aun no se mucho
les pido si chequen mi diagrama y que tengo mal, no prende el relay.
Título: Re: Comenzando con Mikrobasic
Publicado por: BLACKPIC en 31 de Julio de 2007, 21:20:13
hola:
bueno amigo ya que quieres ver la simulacion en el proteus para ver si anda tu proyecto te recomiendo que busque ese mismo relay que esta en el circuito que te puse para que veas que si funciona algo sencillo pero espero que sea de ayuda.... busca ese mismo relay en la libreria del proteus. el que usaste no tiene animacion dentro del programa si no que funciona para el pcb del ares por eso es que no te anda en el run de tu circuito....

espero haverte ayudado con lo poco que puedo y se hasta a hora...
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 31 de Julio de 2007, 23:39:01
oye gracias no sabia eso de que unos no tenian animacion.
si me sirvio
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 01 de Agosto de 2007, 07:49:21
Hola KDS!

¿Solamente quieres hacer lo de las luces? Me parece que seria posible lograr una "luz de cortesia" que permanezca encendida un tiempo "T" despues de apagar el motor sin necesidad de un microcontrolador...

Por supuesto, el uso de un PIC te permitiria hacer otras cosas, como una luz de stop que destelle o cosas que puedas agregar mas tarde. :)
Saludos!
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 01 de Agosto de 2007, 23:12:20
eso pense primero, con un 555 .

pero despues surgieron otras ideas. ademas pienso que se veria mejor asi; quitas la llave, se quedan prendidas 15seg y se apaga 1seg y se prende y se apagan en 1 seg.
un ultimo destello. y pienso ponerle algomas pero nose.

te refieres a esto?
http://www.pablin.com.ar/electron/circuito/auto/tempoluz/index.htm
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 02 de Agosto de 2007, 11:26:06
Exacto! Algo similar a eso costaria menos, pero claro, te limita mucho mas.

Saludos!
Título: Re: Comenzando con Mikrobasic
Publicado por: Nocturno en 02 de Agosto de 2007, 11:32:26
No estoy seguro que cueste mucho menos, ¿habéis visto los precios de los 10F?
Título: Re: Comenzando con Mikrobasic
Publicado por: aitopes en 02 de Agosto de 2007, 12:39:57
nop....por que mi Basic no los contempla  :( :( :(

¿Sera que me tengo que pasar a CCS nomas? Hace casi un año que ando a los amagues. :)

¡Que fiaca me da!  :mrgreen:

PD: "Fiaca" = pereza.
Título: Re: Comenzando con Mikrobasic
Publicado por: Nocturno en 02 de Agosto de 2007, 15:06:02
Pues salta ya, perezoso. Tú mismo viste de primera mano cómo una solución con 10F resultó ser mucho más económica, sencilla y potente que otra igual con operacionales.
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 03 de Agosto de 2007, 00:06:46
pues este es mi codigo, si alguien tiene alguna idea digame!! bueno recuerden que llevo como 10 dias con esto del basic.
Código: [Seleccionar]
program luces

MAIN:
 TRISB=%00000101
 portb=0

while (true)

if PORTB.0 = 1 then

    if PORTB.2=1 then
    PORTB.1=1
    DELAY_MS(1000)
    else
     PORTB.1=0
    end if
   
  else
    PORTB.1=0

  end if
 
  wend

END.

Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 03 de Agosto de 2007, 21:40:24
como puedo hacer para enviar una señal (parpadear un led) continuamente e independientemente de los demas procesos, es decir quiero que parpade el led todo el tiempo y al mismo tiempo se ejecute el programa?

no se me courre como , ya que si pongo una linea esta se ejecuta a su tiempo y no todo el tiempo.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 03 de Agosto de 2007, 22:11:55
Usando el Hardware serie o pwm del pic o cun su timer
Título: Re: Comenzando con Mikrobasic
Publicado por: kds en 04 de Agosto de 2007, 13:46:47
Hola yo de nuevo, llevo ya rato intentando un buen codigo, hace mucho que no programaba.


Bueno, el codigo pasado no me gustaba por que si se va manejando y se prenden yapagan las luces despues tambien hay un retardo, y eso puede ser peligroso, como sea no me gustaba. Asi que este es el codigo, uso el portb.4 y 5 para los leds esos van a un transistor y luego a un rele, uso 2 por que son 2 faros. y pues el switch de la llave y el swtich de luces.


Código: [Seleccionar]
program luces

MAIN:
 TRISB=%00000011
 portb=0
 'portb.0 llave  AND  (PORT.1=1)
 'portb.1 swtich
 'portb.4  luz izq.
 'portb.5  luz der.
while (true)

    if (PORTB.0=1) then

       if (PORTB.1=1) then
          PORTB.4=1
          PORTB.5=1
       end if
       
       if (PORTB.1=0) then
          PORTB.4=0
          PORTB.5=0
       end if


    else
        if (PORTB.0=0) then
       
             if (PORTB.1=1) then
                 if (PORTB.4=1) AND (PORTB.5=1) then
                     delay_ms(3000)
                     PORTB.4=0
                     PORTB.5=0
                     delay_ms(300)
                     PORTB.4=1
                     PORTB.5=1
                     delay_ms(500)
                     PORTB.4=0
                     PORTB.5=0
                  else
                      PORTB.4=0
                      PORTB.5=0
                  end if
                 
             end if

             if (PORTB.1=0) then
                PORTB.4=0
                PORTB.5=0
             end if
    end if
end if
   
wend
END.



la verdad me parecen muchas lineas!!!, no se si hay una manera mas facil de hacer lo mismo.

una duda mas, si me lo permiten, si quiero convertir el voltaje de la "llave" y del switch para mandar una señal digital (5v)  (esto para las entradas) es con un rele? o como?


bueno gracias, salu2 desde México.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 14 de Agosto de 2007, 12:15:32
Hola compañeros, tengo un lcd 20x4 y no puedo imprimir en las lineas superiores, solamente lo hace en las 2 inferiores, cuando le agrego el 3 y 4 renglon no imprime nada, les paso el codigo para ver que me falta.

Lcd_Config(PORTB,0,1,2,3,PORTB,5,6,4)
  Lcd_Cmd(LCD_CURSOR_OFF)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_out(1,4,"Prototipo 2")
  Lcd_out(2,4,"Version 1.0")
  Lcd_out(3,4,"Prototipo 2")
  Lcd_out(4,4,"Version 1.0")

Lleva algún comando que no conozco.   :5] :5] :5]

Desde ya muchas gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 14 de Agosto de 2007, 15:57:34
Holaaaaaaaaa  :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Despúes de romperme el o-t-, me vuelvo a contestar solo!!!!!!!!!

Lcd_Config(PORTB,0,1,2,3,PORTB,5,6,4)
  Lcd_Cmd(LCD_CURSOR_OFF)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_First_Row = 0
  Lcd_Second_Row = 0
  Lcd_Third_Row = 0
  Lcd_Fourth_Row = 0
  Lcd_out(1,4,"Prototipo 2")
  Lcd_out(2,4,"Version 1.0")
  Lcd_out(3,4,"125")
  Lcd_out(4,4,"1.0")

Sera que pregunto boludeses, o somos pocos los que usamos MKB.

Saludos.....

Carlitos.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 14 de Agosto de 2007, 17:41:59

Sera que pregunto boludeses, o somos pocos los que usamos MKB.

Carlitos.

Mas bien lo segundo, osea son pocos o son "closetos". En lo Personal prefiero Proton a MKB  ya que es muy rebuscado en muchas cosas y a veces por tiempo o recursos no me es posible probar los codigos de MKB en mi PC del trabajo por eso casi no hay mucha respuesta de mi parte. Pero a fin de cuentas me alegra que hayas encontrado la solucion y la pregunta es ¿porque todos a cero?
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 14 de Agosto de 2007, 18:26:01
Navisimo los puse a todos en 1 y no funcionaba, los pase a 0 y funciona.

Aunque lo mio sea mediocre, hice prueba y error dado que en la ayuda de MKB se olvidaron de poner para que seria 1 y 0.

Disculpas.....

Saludos.

Carlitos.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 14 de Agosto de 2007, 18:29:43
Reinicie la PC los puse en uno y funciona  :oops:

No se......

Saludos  :shock:
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 14 de Agosto de 2007, 18:34:45
Si cambio los 0 por los 1 no me funcionan los ds1820  :shock:

 :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:

Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 14 de Agosto de 2007, 19:27:23
mmmm Por esas cosas deje de usarlo. Y total si funciona como quieres o ya no?
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 17 de Agosto de 2007, 21:33:50
Perdón overclokee el micro de la compu se me recalento y no compilaba bien.

Carlitos.
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 21 de Agosto de 2007, 17:06:19

hola, quisiera preguntar porque este trozo de código no me funciona y este otro si:

El que no me funicona:
(ejemplo posteado por Paola09)


program lcdmicroe

main:
dim text as char[20]

TRISA = 0
TRISb = 0

text="hola"
Lcd8_Init(PORTB, 7, 6, 5, 4, 3, 2, 1, 0, PORTA, 0, 1, 2) 'en b estan los datos del 7 al 0 y en a va rs,rw,e     
Lcd8_Cmd(Lcd_CURSOR_OFF)
Lcd8_Out(1, 1,text) ' Print text at LCD
end.


Y el que si que me funciona:


Program lcd

dim text as char[20]
   
main:

  TRISB = 0                   ' PORTB is output
  TRISA = 0                   ' PORTA is output
 
  Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2) ' Initialize LCD at PORTB and PORTA
  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)
  text = "mikroElektronika"
  Lcd8_Out(1, 1, text)        ' Print text at LCD

end.

Un saludo y gracias a todos de antemano.
Título: Re: Comenzando con Mikrobasic
Publicado por: MGLSOFT en 21 de Agosto de 2007, 18:32:16
En cualquier lenguaje de programacion luego de iniciar el LCD deberas mandar a borrar la pantalla, sino tendras resultados inesperados.
Una de las cosas que hace el borrado es posicionar el puntero de memoria en la pantalla de escritura.

El segundo ejemplo tiene la instruccion LCD Clear que hace esto que digo, mientras el primero no lo tiene, si se la colocas veras que funciona...

Espero te sirva la explicacion... :mrgreen: :mrgreen:
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 21 de Agosto de 2007, 20:30:18
Tengo un problema, coloque un LCD 20x4 donde tenia instalado un 16x2 por lo cual tuve que usar la libreria
  Lcd_First_Row = 0
  Lcd_Second_Row = 0
  Lcd_Third_Row = 0
  Lcd_Fourth_Row = 0

me encuentro con el problema que antes con el LCD 16x2 estaba usando RA2 y RA3 como entradas analogicas y todo funcionaba bien, ahora que uso el LCD 20x4 no enciende a menos que borre el codigo de una de las dos entradas.
Estoy usando un 16f876a. :shock:

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 22 de Agosto de 2007, 14:24:29
Hola, la verdad es que me da un poco de verguenza poner por aki el código q estaba haciendo, porq me imagino que no estara muy bien, pero no se como solucinar el problema que tengo.  Estoy haciendo una practica la cual consta de un lcd, en el que al iniciarse aparece un menu, en el que te da a elegir dos opciones: o eliges el valor 1 o el valor 2,( los cuales se eligen mediante pulsadores RA03 Y RA04) si elegimos el valor 1 nos lleva a otra pantalla donde nos indica que hemos elegido el numero 1 y lo mismo sucede si hubieramos elegido el valor 2, para volver al menu inicial bastaria con pulsar los dos pulsadores a la  vez, estoy utilizando un 16f84 con un lcd de 2x 16. El problema que tengo es que cuando  le doy para crear el .hex, me dice que no hay memoria  ram suficiente o algo asi : 0:0 E-0 Linker error: Not enough RAM  row __lib_lcd8custom.ppas  y 0:0 E-0 Linker error: Not enough RAM  out_char __lib_lcd8custom.ppas  y no me deja compilarlo. Supongo que cambiando a otyro pic mas potente no habria problema, pero tambien supongo que mi programa es muy básico y no lo estoy jhaciendo bien, estoy consumiendo mas memoria de lo se deberia,.

program menulcd


dim a as byte
dim b as byte

Sub procedure menu1

  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"has elegido 1")
  Lcd8_Out(2,1,"volver:pulsa 1y2")
 
  End Sub
 
 
  Sub procedure menu2

  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"has elegido 2")
  Lcd8_Out(2,1,"volver:pulsa 1y2")

  End Sub
 
 
main:

  TRISB = 0
  TRISA = %11000

  Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2)
  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"pulsa una opcion")
  Lcd8_Out(2,3,"1 o 2")
 
  if PORTA.4 = 1 then
        menu1
       a =1
      else
      goto main
     
      end if
     
   if PORTA.5 = 1 then
   
       menu2
        b =1
       else
     goto main
        end if
       
  if a = b then
 
  goto main
      end if
end.


Gracias de antemano, un saludo.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 22 de Agosto de 2007, 17:31:09
Tengo un problema, coloque un LCD 20x4 donde tenia instalado un 16x2 por lo cual tuve que usar la libreria
  Lcd_First_Row = 0
  Lcd_Second_Row = 0
  Lcd_Third_Row = 0
  Lcd_Fourth_Row = 0

me encuentro con el problema que antes con el LCD 16x2 estaba usando RA2 y RA3 como entradas analogicas y todo funcionaba bien, ahora que uso el LCD 20x4 no enciende a menos que borre el codigo de una de las dos entradas.
Estoy usando un 16f876a. :shock:

Gracias.


Y si estan a digital los pines del PIC como que me perdi en el ultimo mensaje
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 22 de Agosto de 2007, 17:34:28
Hola, la verdad es que me da un poco de verguenza poner por aki el código q estaba haciendo, porq me imagino que no estara muy bien, pero no se como solucinar el problema que tengo.  Estoy haciendo una practica la cual consta de un lcd, en el que al iniciarse aparece un menu, en el que te da a elegir dos opciones: o eliges el valor 1 o el valor 2,( los cuales se eligen mediante pulsadores RA03 Y RA04) si elegimos el valor 1 nos lleva a otra pantalla donde nos indica que hemos elegido el numero 1 y lo mismo sucede si hubieramos elegido el valor 2, para volver al menu inicial bastaria con pulsar los dos pulsadores a la  vez, estoy utilizando un 16f84 con un lcd de 2x 16. El problema que tengo es que cuando  le doy para crear el .hex, me dice que no hay memoria  ram suficiente o algo asi : 0:0 E-0 Linker error: Not enough RAM  row __lib_lcd8custom.ppas  y 0:0 E-0 Linker error: Not enough RAM  out_char __lib_lcd8custom.ppas  y no me deja compilarlo. Supongo que cambiando a otyro pic mas potente no habria problema, pero tambien supongo que mi programa es muy básico y no lo estoy jhaciendo bien, estoy consumiendo mas memoria de lo se deberia,.

program menulcd


dim a as byte
dim b as byte

Sub procedure menu1

  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"has elegido 1")
  Lcd8_Out(2,1,"volver:pulsa 1y2")
 
  End Sub
 
 
  Sub procedure menu2

  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"has elegido 2")
  Lcd8_Out(2,1,"volver:pulsa 1y2")

  End Sub
 
 
main:

  TRISB = 0
  TRISA = %11000

  Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2)
  Lcd8_Cmd(Lcd_clear)
  lcd8_cmd (Lcd_Blink_Cursor_On)

  Lcd8_Out(1, 1,"pulsa una opcion")
  Lcd8_Out(2,3,"1 o 2")
 
  if PORTA.4 = 1 then
        menu1
       a =1
      else
      goto main
     
      end if
     
   if PORTA.5 = 1 then
  
       menu2
        b =1
       else
     goto main
        end if
       
  if a = b then
 
  goto main
      end if
end.


Gracias de antemano, un saludo.

Pues asi mal hecho no se me hace el programa, podrias intentar usar un select case, o bien usar LCDOUT a 4bits en lugar de a 8 y por ultimo quitar los Procedimientos y ejecutarlos en vivo. Se me hace muy raro que no te deje compilarlo no son muchas lineas. Tal vez este el error en la libreria. o ¿es demo la version?
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 22 de Agosto de 2007, 18:07:48
En primer lugar gracias por responder, no, la version que utilizo es la completa, es curioso pero me sale los mismos mensajes de error cuando utilizo las librerias y escribo mas de una linea en el lcd, probare a aplicar tus recomendaciones,tambien he compilado el mismo codigo pero cambiando a otro pic como por ejemplo el 16f877a, y asi ya no da el error,
 un saludo y nuevamente gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Dani27v en 26 de Agosto de 2007, 17:20:05
 
 Alguien me  ayuda a buscar el error??? estoy haciendo practicas con el tim y el lcd, queria hacer un contador ( cada segundo) que se viera en el lcd, es decir que contara desde 0 hasta 255 ( valor maximo de la variable) y que mediante el porta.4 se reseteara a 0, más adelante  me gustaria  tambien poder hacer una pausa en el contaje cuando se pulsara otro pulsador, pero eso ya lo dejo para mas adelante, ahora quisiera  ver donde me equivoco, gracias a todos de antemano.

Código: [Seleccionar]
program lcdtempo


dim contador as word
dim segundo as char

sub procedure interrupt
  inc(contador)          ' Incrementamos el valor de counter cada vez que se produce la interrupcion
  TMR0   = 96
  INTCON = $20   ' T0IE = 1, T0IF = 0
end sub



main:

TRISB = 0
TRISA = %11000                  '..... definiciones


 OPTION_REG = $84 ' Asignacion del prescaler al Timer0
 contador= 0            ' Inicializacion de contador
 TMR0 = 96
 INTCON = $A0     ' Habilitamos la  interrupcion del TimerO
 

Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2)
Lcd8_Cmd(Lcd_clear)
lcd8_cmd (Lcd_Blink_Cursor_On)
Lcd8_Out(1, 1,"Tiempo restante:")


segundo ="0"

 while TRUE
   if contador= 400 then ' Si el contador es 400, incrementamos en 1 la variable segundo y reseteara counter

     inc ( segundo)
       
     Lcd8_Out(2, 7, "segundo" )  ' muestra el valor de segundo en la 2 linea del lcd
     
     contador = 0
        end if
    if porta.4 = 1 then            ' resetea contador
   
      segundo = "0"
     
        end if
       

       
 wend

end.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 27 de Agosto de 2007, 21:08:23
Gracias compañeros, solucione el problema cambiando del MKB 5 al MKB 5.002, ahora tengo otro problema mientras no compilo puedo escribir bien despues de compilar me aparece un cartel que dice:

Exeption ElistError in module mikrobasic.exe at 0001C2D2
List index out of bounds (-1)

Y tiene un boton de aceptar, alguien sabe que puedo hacer para que no aperezca mas.

Saludos y gracias.

Carlitos.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 01 de Septiembre de 2007, 09:39:57
Tenés razón Navisimo, somos pocos.

Igualmente yo me sigo contestando solo así, si le pasa a alguien ya sabe que es.

En el post anterior, pregunte por un cartel que me aparecia despues de compilar. Dicho cartel aparecia por que yo utilizaba loop y end loop, cuando pase a usar while true y wend desaparecio el cartel.

Saludos a todos.
Título: Re: Comenzando con Mikrobasic
Publicado por: PAWA en 24 de Septiembre de 2007, 14:10:07
  Hola a todos. Veo con mucho gusto que ya llevan buen camino recorrido con Mikrobasic. Yo actuamlmente programo en PBP con el Microstudio Plus, usualmente uno se  casa con el programa que mas dominamos y muchas veces no lo queremos abandonar, muchos nos preguntamos que si cual es mejor PBP, MKB, Proton etc.  Y una respuesta que he leido es que es el que mas dominas y estoy de acuerdo. En la pagina de proton existe un comparativo logicamente en la cual proton es el mejor para ellos. (http://www.picbasic.org/compiler_comparisons.php).
   Comparando PBP y Mikrobasic este ultimo se lo lleva de calle en cuestion de librerias, maneja numeros flotantes ademas realiza mas operaciones matematicas,   (Conste que yo programo en PBP).

Todo este choro es para preguntarles ustedes que tienen experiencia con MKB si es confiable en programas grandes si tienen la confianza de utilizarlo en una aplicacion industrial donde no debe de quedarse bloqueado o realizar cosas extrañas. 

Tengo la ultima version donde tiene librerias para ethernet y muchas mas que PBP  pero  no se que tan confiable sea.
Les agradeceria sus comentarios.

Saludos desde Mexicali Mexico.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 24 de Septiembre de 2007, 16:45:33
PAWA yo te recomiendo que intentes o Proton o SWORDFISH porque el mkb de repente se traba mucho.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 14 de Octubre de 2007, 07:18:20
HolaHola amigos. Quisiera hacerle suna pregunta, ya que le he dado muchas vueltas a un asunto y no puedo saber que es lo que anda mal. Espero me puedan hechar una manito. El asunto es el siguiente: no puedo usar los pines rb4 y rb5 e el 16F628. para probar hcie el siguiente programa:

program pruebas

main:

cmcon=7
trisa=0

inicio:
porta=%11111111
delay_ms(500)
porta=0
delay_ms(500)
goto inicio

end.


conecte leds al puerto B, y todos se encienden, menos los led de las patitas a4 y a5......no se que hacer, alguien de ustedes em podria decir que es lo que hago mal, o darme una `pista....se los agradeceria mucho....saludos

PD: en la palabra de configuracion selecciono todo desabilitado (MCLR, watch dog, etc) y selecciono oscilador interno, con a6 y a7 como I/O. Programo con mikrobasic, y grabo en el MPLAB, usando un programador que es una imitacion del picstart plus.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 14 de Octubre de 2007, 11:09:35
main:

cmcon=7
trisa=0

inicio:
porta=%11111111
delay_ms(500)
porta=0
delay_ms(500)
goto inicio

end.

En el código que pusiste los leds se encenderán en el porta.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 15 de Octubre de 2007, 00:31:04
Hola LordLafebre, muchas gracia sporturespuesta.

Sabes, no se si estoy cometiendo una tonteria o no, pero aun no lo logro hacerlo funcionar.....no se que podre estar haciendo mal, he probado el programa en siete pics diferentes (tengo 7 pics  16F628), pero en ninguno me prende los led de las patitas a4 y a5, ni haciendolo trabajar con el oscilador interno ni con cristal externo. Me he fijado bien en poner la palabra de configuracion con todo desactivado, y osc int con ra6 y 7 como I/O, tanto con microbasic, y despues en MPLAB (en este ultimo nada mas confirme). No se que hacer, me esta voliendo loco esto, ya que no se pq no resulta. Le ha sucedido esto a alguien? o tienen alguna pista de que epuedo estar haciendo mal?.

Puedo que algo tenga que ver lo que les voy a contar: yo antes usaba un programador basado en el JDM, junto con el icprog, los pics me los grababa unas 4 veces, y despues no os grababa mas, yo pense que estaban malos, pero de todas formas los guerda. Luego compre otro programador, basado en el pic start plus, y me grabo todos esos pic que pense que podrian estar malos, y todo ha ido bien, interrupciones, timers, todo, pero no habia usado las salidas ar4 ni ar5. Puede ser que el programador anterior haya dañado estas salidas?......lo malo es que mañana lunes aca es feriado (no se trabaja) y tendre que esperar hasta el martes para comprar otro pic y probar. Espero me puedan dar alguna idea.......saludos... :-)
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 15 de Octubre de 2007, 11:23:05
Si no mal recuerdo el RA4 es colector abierto por lo cual debe llevar una resistencia pullup, prueba con eso haber si funciona.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 15 de Octubre de 2007, 18:15:02
Hola:

Revisa tambien la configuración que haces en la primera pantalla, asegúrate de que la parte del reset, cristal y alimentación estén bien conectadas.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 15 de Octubre de 2007, 19:01:58
Navaismo, tienes toda la razón, el led lo puse a +5v por medio de una resistencia, y ya esta, parpadea al igual que los otros (solamente que se apagra cuando los demas se encienden, ya que ahora enciende con un cero), bueno, cada dia se aprende algo nuevo...de verda, muuuuchisimas gracias  :-).

Eso si, la patita ra5 si que no la he podido hacer funcionar, trate de hacerlo como me dijiste con la patita r14, pero no. Quizas mi antiguo programador dejo dañado ese pin en los micros, ya que es el Vpp, que crees tu?. Menos mal que en mi aplicacion la patita ra5 iba a ser la negacion de la ra4, asi que el problema es facilmente solucionable con un transistor y un par de resistencias para generar otra señal que sea la negada de ra4 (es que ya tengo ocupado todos los pines). Hoy a la noche tendre listo el codigo (creo), y lo publicare por si es que a alguien le sirve. y nuevamente, muchisimas gracias. Ah, y de todas formas mañana comprare un pic a ver si funciona la linea ra5, ya que yo recuerdo haberla hecho funcionar, creo haber probado dejar esa patita como I/O en vez de como rest, pero no estoy seguro.

Saludos ;)
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 15 de Octubre de 2007, 19:06:52
a que te refieres con la primera pantalla lordlafebre? a la que te aparece cuando haces un nuevo proyecto en MKB? si es eso, bueno, ahi es donde configuro los bits de configuracion, es ahi done desactivo todo, y pongo osc int ra6 y ra7 como salidas. bueno, y si no es eso, no se muy bien a que te refieres :P jeje.....saludos y gracias por reponder
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 16 de Octubre de 2007, 01:22:00
Hola:

Pues efectivamente, me refería a esa pantalla, me parece raro, mira, con todo mañana si tengo untiempito te paso un hex para que programes tu pic y lo compruebes, y vemos que es lo que pasa.
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 16 de Octubre de 2007, 01:40:15
Hola:

Necesito saber la frecuencia del cristal que estas usando para hacerte el ejemplo y probar a ver si está bien el pin.
Título: Re: Comenzando con Mikrobasic
Publicado por: rasec_1984 en 16 de Octubre de 2007, 05:05:02
Ya se que es lo que estoy haciendo mal con el pin ra5. Lei en el datasheet que este pin, cuando no esta siendo usado como reset, sólo puede ser usado como entrada, y no como salida, que tontera no?. asi que intercambie este pin por otro que lo estaba usando como entrada, lo deje como entrada y el otro como salida, y listo. Habia buscado en el datasheet antes, pero pense que el problema iba por los registros o alabras de configuracion....pero bueno...

Muchisimas gracias LordLafebre y Navaismo por su muy util y pronta ayuda. Saludos.

Ah, y el codigo lo tendre luego, pienso que le podria ser util a alguien, ya sea como para ocuparlo o para aprender losq ue estan empezando. Lo posteo aca o en otro lado?
Título: Re: Comenzando con Mikrobasic
Publicado por: LordLafebre en 16 de Octubre de 2007, 10:58:48
Hola:

El código lo puedes poner en la parte de ejemplos con MKB que se encuentra en este mismo subforo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 06 de Marzo de 2008, 15:27:43
Hola Compañeros, tengo un problema. Estoy usando un LCD 4X20, si lo conecto en 4 bit y uso este codigo:
Lcd_Config(PORTB,4,1,3,2,PORTC,4,6,5 )
   Lcd_Cmd(LCD_CURSOR_OFF)
   Lcd_Cmd(LCD_CLEAR)
   LCD_CMD(128)
   LCD_CMD(192)
   LCD_CMD(148)
   LCD_CMD(212)
Funciona bien.

Ahora cuando lo conecto a 8 bit no funciona, por supuesto en vez de usar LCD_CMD uso LCD8_CMD y hago las 4 conecciones restantes, no funciona.

¿Les, paso? :shock:

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 06 de Marzo de 2008, 15:48:13
mmmm si no mal recuerdo en una de las versiones habia problemas con lcd en 8 bits es la mas actual o una anterior?
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 07 de Marzo de 2008, 14:09:31
Gracias por contestarme Navisimo, la version que tengo es la 5.0.0.2. ¿Hay alguna mas nueva?
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Marzo de 2008, 14:20:38
Ups no que yo recuerde. Se me hace muy raro que siga habiendo bugs con esa libreria
Título: Re: Comenzando con Mikrobasic
Publicado por: MiCrOtRoNiC en 07 de Marzo de 2008, 15:43:38
Hola Compañeros, tengo un problema. Estoy usando un LCD 4X20, si lo conecto en 4 bit y uso este codigo:
Lcd_Config(PORTB,4,1,3,2,PORTC,4,6,5 )
   Lcd_Cmd(LCD_CURSOR_OFF)
   Lcd_Cmd(LCD_CLEAR)
   LCD_CMD(128)
   LCD_CMD(192)
   LCD_CMD(148)
   LCD_CMD(212)
Funciona bien.

Ahora cuando lo conecto a 8 bit no funciona, por supuesto en vez de usar LCD_CMD uso LCD8_CMD y hago las 4 conecciones restantes, no funciona.

¿Les, paso? :shock:

Gracias.

Prueba con la version 6.0.0
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 07 de Marzo de 2008, 21:56:51


Hola!!!  les hago una pregunta, ya que me estoy rompiendo la cabeza y la verdad es que no se como solucionarlo. hice un programaita sencillo para un 16F84 y queria poner una interrupcion en RB0, osea cuando presione un pulsador conectado a RB0 que ponga todo el puerto a 0, pero la verdad es que no se como hacerlo, alguien me podria ayudar??

el programita es mas o menos asi:

TRISB = %00000001  'declaro al puerto B como salidas salvo RB0 como ENT
TRISA = 255              'declaro el puerto A como entradas
PORTA = 0                 'pongo en 0 las entradas
PORTB = 0                 'pongo en 0 las salidas

main:
if PORTA.0 = 1            'SI, puerto A.0  esta en 1
then                           'ENTONCES,
PORTB.1 = 1               'Puerto B.0 se activa
delay_ms(1200)           'Duracion de la activacion de RA.0
portb.1= 0                   'Pongo a 0 RA.1
portb.2 =1                   'Puerto B.2  se activa
delay_ms(1200)           'duracion de la activacion de RB.2
portb.2 = 0                  'pongo a 0 RB.2
end if
goto main
end.

lo que yo quiero hacer es que cuando ponga a 1 RB0 se apague el resto del puerto.

Saludos y Muchas gracias!!
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 07 de Marzo de 2008, 22:49:26
Es en MKB??

Bueno lo unico que tienes que hacer es un IF que cuando el RB0 tenga un 1 del RB1 al RB7

ejemplo:

Declaras  el puerto B como salida del RB1 al  RB7 y el RB0 como entrada

TRISB=1 lo que equvale a %00000001

y en el programa pones

IF portb.0=1 then
PORTB=1  'apagas todo y mantienes el estado 1 del RB0
else
PORTB=%11111110 ' si no esta en 1 prendes todo y mantienes en 0 el rb0
endif   
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 08 de Marzo de 2008, 22:15:18
hola si es MKB, pero.... lo hice como vos me decis y no anda:S
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 09 de Marzo de 2008, 03:50:32
Pues, pon de nuevo el codigo modificado par5a saber que es lo que esta pasando. Y los fuses estan bien configurados?
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 09 de Marzo de 2008, 21:27:51
 yo lo hice de esta forma, pero la verdad es que no se si estoy errado o no, poruq ela verdad es que recien estoy empezando a entender el funcionamiento, lo mas basico, de este lenguaje aplicado a los pic
TRISB = %00000001 'declaro al puerto B como salidas salvo RB0 como ENT
TRISA = 255 'declaro el puerto A como entradas
PORTA = 0 'pongo en 0 las entradas
PORTB = 0 'pongo en 0 las salidas

main:

IF portb.0=1 then
PORTB=1 'apagas todo y mantienes el estado 1 del RB0
else
if PORTA.0 = 1 'SI, puerto A.0 esta en 1
then 'ENTONCES,
PORTB.1 = 1 'Puerto B.0 se activa
delay_ms(1200) 'Duracion de la activacion de RA.0
portb.1= 0 'Pongo a 0 RA.1
portb.2 =1 'Puerto B.2 se activa
delay_ms(1200) 'duracion de la activacion de RB.2
portb.2 = 0 'pongo a 0 RB.2
end if
endif
goto main
end.
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Marzo de 2008, 13:47:53
Mete la parte de los TRIS y PORT en el main. Si aun asi no funciona, modifica el IF prendiendo uno a uno los puertos.

Y otra cosa segun hyabia entendido tu querias poner el boton en RB0 y en tu programa veo que esta en RA0
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 10 de Marzo de 2008, 18:33:35
Aplanado, aqui te dejo un programita que te puede dar una idea de lo que quieres:
program Onof
' El programa enciende LED en pin RB0 del PORTB del F84
' cada vez que se presiona un pulsdor colocado en pin RB1 del PORTB.
' La activación es un cambio de 1 a 0 y espera hasta que se libere el pulsante
' es decir un cambio de 0 a 1.
dim a as byte 'esta variable se emplea solo como una condicion del ciclo While

main:
'******************************************************************************
' INICIALIZACIÓN DE PUERTOS Y PERIFÉRICOS
'******************************************************************************
     TRISB.0 = 0       ' Pin 0 del Puerto B salida
     TRISB.1 = 1       ' Pin 0 del Puerto B entrada
     a = 1
'******************************************************************************
' PROGRAMA PRINCIPAL
'******************************************************************************
     while a < 2   'Se cumple condicion siempre que a sea menor que 1
          if Button(PORTB,1,100,0) then ' Espera un pulso de 1 a 0

          'Button(port,pin, time, active_state)
          'El Parametro port especifica el puerto donde esta el boton;
          'el parametro pin es el numero del pin del puerto y va de 0...7;
          ' el parametro time es el periodo del antirebote en milisegundos;
          'el parametro active_state puede ser  0 o 1, y determina si el boton
          'esta en activo logico (1) o activo bajo (0).

             if PORTB.0 = 0 then
                SetBit(PORTB,0)       ' Si el LED estaba apagado lo enciende
             else
                ClearBit(PORTB,0)     ' Si estaba prendido lo apaga
             end if

            while PORTB.1 = 0        ' Espera sin hacer nada hasta que se
                                     ' halla liberado el pulsador
                   a = 1
            wend
          end if
     wend              ' Bucle infinito
end.
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 10 de Marzo de 2008, 20:21:03
LO AGREGUE DENTRO DEL MAIN, PERO NADA :s:s:s, CON RESPECTO AL ra.0, ES EL INICIO, OSEA CUANDO YO PRESIONO ESE BOTON SE HACE ESA MINI SECUENCIA DE PARPADEO, Y LO QUE YO KIERO LOGRAR ES QUE CUANDO PRESIONE RB.0 O CUALQUIER OTRO RA SE APAGUE TODO EL PUERTO B.



main:
IF portb.0=1 then
PORTB=1 'apagas todo y mantienes el estado 1 del RB0
else
TRISB = %00000001  'declaro al puerto B como salidas salvo RB0 como ENT
TRISA = 255        'declaro el puerto A como entradas
PORTA = 0          'pongo en 0 las entradas
PORTB = 0          'pongo en 0 las salidas
if PORTA.0 = 1     'SI, puerto A.0 (inicio) esta en 1
then               'ENTONCES,
f PORTA.0 = 1 'SI, puerto A.0 esta en 1
then 'ENTONCES,
PORTB.1 = 1 'Puerto B.0 se activa
delay_ms(1200) 'Duracion de la activacion de RA.0
portb.1= 0 'Pongo a 0 RA.1
portb.2 =1 'Puerto B.2 se activa
delay_ms(1200) 'duracion de la activacion de RB.2
portb.2 = 0 'pongo a 0 RB.2
end if
endif
goto main
end.


MUCHAS GRACIAS Y LES PIDO DISCULPEN MI IGNORANCIA, SALUDOS aPLANADO!
Título: Re: Comenzando con Mikrobasic
Publicado por: navaismo en 10 de Marzo de 2008, 20:50:20
Mira segun esto el programa debe quedar asi:

En los fuses configuras CP_OFF, XT_OSC, WDT_OFF

En el programa:
Código: FreeBasic
  1. program test
  2.  
  3. main
  4. TRISB=%00000001
  5. TRISA=%11111
  6.  
  7.  INI:
  8.   'Este IF lo que hace es: "si aprietas RA1 el PORTB menos el RB0 parpadeara una vez"
  9.   IF PORTA.1=1 THEN
  10.    PORTB=%11111110
  11.    DELAY_MS(500)
  12.    PORTB=%00000000
  13.    DELAY_MS(500)
  14.   ENDIF
  15.  
  16.  'Con este if lo que hacemos es: "Si apretamos el RB0 y su estado es 1 logico se enciendan el resto del portb, si no se aprieta el    ' resto del portb se mantiene apagado. Lo pongo individual para ver que realmete afecte al pin
  17.   IF PORTB.0=1 then
  18.     PORTB.1=1
  19.     PORTB.2=1
  20.     PORTB.3=1
  21.     PORTB.4=1
  22.     PORTB.5=1
  23.     PORTB.6=1
  24.     PORTB.7=1    
  25.   ELSE
  26.     PORTB.1=0
  27.     PORTB.2=0
  28.     PORTB.3=0
  29.     PORTB.4=0
  30.     PORTB.5=0
  31.     PORTB.6=0
  32.     PORTB.7=0    
  33.   ENDIF
  34.  
  35. GOTO INI
  36. END.


Espero te sirva ese codigo.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 17 de Abril de 2008, 10:33:20
Hola compañeros!!!

No puedo imprimir en un lcd 20 x 4 desde el puerto a de un 18f242.

¿Alguien podria darme una mano y decirme por que?

Desde ya muchas gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 17 de Abril de 2008, 19:19:05
 :)Hola Crli, bueno antes que nada creo que con un comentario solamente poco se te puede ayudar, debes colocar código del programa para ver en que parte se encuentra el problema.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 22 de Abril de 2008, 22:28:36
Moyin, tienes razón!!!

Ahi va el codigo, tiene un cristal de 20 mhz.

program taco

dim txt      as char[20]
dim xtx      as char[20]
dim Freq     as word
dim Tmp_Freq as word
dim Freqs     as word
dim Tmp_Freqs as word
dim Voltajebateria, bateria as word
dim Porcentbateria as word
dim Volbateriatest as string[16]
dim Porbateriatest as string[16]
dim T0Count  as byte


sub procedure Voltbateria
     bateria = adc_read(0)
     voltajebateria = (bateria*10/65)
     Porcentbateria = (voltajebateria*100/12)
     WordToStr(voltajebateria, volbateriatest)
     WordToStr(Porcentbateria, Porbateriatest)
     Lcd_Chr(3, 17, volbateriatest[2])
     Lcd_Chr(3, 18, volbateriatest[3])
     Lcd_Chr(3, 19, 46)
     Lcd_Chr(3, 20, volbateriatest[4])
     Lcd_Chr(4, 16, Porbateriatest[2])
     Lcd_Chr(4, 17, Porbateriatest[3])
     Lcd_Chr(4, 18, 46)
     Lcd_Chr(4, 19, Porbateriatest[4])
     Lcd_Chr(4, 20, "%")
end sub

sub procedure albat
  If adc_read(0) > 746 then
      Lcd_out(4,1,"VOLTAJE OPTI.")
  else
      Lcd_out(4,1,"VOLTAJE BAJO  ")
      delay_ms(300)
  end if
end sub

sub procedure Interrupt
      if TestBit(INTCON, T0IF) = 1 then
      inc(T0Count)
        if T0Count = 1 then
          Freq = Tmp_Freq*40
          Freqs = Tmp_Freqs*40/60
          Tmp_Freq = 0
          Tmp_Freqs = 0
          T0Count = 0
          TMR0H     = $0c
          TMR0L     = $0c
        end if
      ClearBit(INTCON, TMR0IF)
    else
       Inc(Tmp_Freq)
       Inc(Tmp_Freqs)
       ClearBit(INTCON, INT0IF)
    end if
end sub

sub procedure iniciolcd
   Lcd_Config(PORTC,2,3,0,1, PORTC,4,6,5)
   Lcd_Cmd(LCD_CURSOR_OFF)
   Lcd_Cmd(LCD_CLEAR)
    LCD_CMD(128)
    LCD_CMD(192)
    LCD_CMD(148)
    LCD_CMD(212)
end sub

sub procedure visualizacion
         Lcd_out(1,1,"TACOMETRO RPM")
         Lcd_out(2,1,"TACOMETRO RPS")
         Lcd_out(3,1,"VOLTAJE BATERIA")
         WordToStr(Freq, txt)
         WordToStr(Freqs, xtx)
         Lcd_Out(1, 16, txt)
         Lcd_Out(2, 16, xtx)
         Voltbateria
         albat
end sub


main:
 T0CON     = $00
 INTCON2.INTEDG0 = 0
 T0CON.TMR0ON = 1
 INTCON       = $01D5
 iniciolcd
 Interrupt

  while true
     Visualizacion
  wend
end.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 24 de Abril de 2008, 13:05:05
Gracias muchachos ya lo solucione!!!!

Se que esto queda mal pedirlo de esta forma, pero necesito que me ayuden a hacer un cronometro que mida segundos y milecimas, puede alguien darme una mano, dado que hice un contador pero no me cuenta en forma constante y tengo diferencias con la comparativa del cronometro. ¿En pocas palabras me dan una mano con los timers? He intentado hacerlo y recurro a ustedes como ultimo recurso.

Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 29 de Abril de 2008, 23:23:39
buenas noches Sres!!!! vuelvo a molestarlos con una pregunta, ya que siemrpoe me ayudaron y pude salir adelante, la historia es mas o menos asi:
hice un programita simple en MKB ke kuando yo levanto un 1 en una entrada, acciona otra, durante un tiempo X; despues de apretarla 3 veces  se activa otra:

if porta.1 = 1
then porbt.1 = 1
delay_ms(X)
portb.1 = 0
end if
hasta recontra facil
antes habia declarado algo asi
dim A as integer
A=0
entonces kedaria algo asi
dim A as integer
trisa XXXXXXX
porta XXXXXXX
trisbXXXXXX
portbXXXXXXX
main:
if porta.1 = 1
then porbt.1 = 1
delay_ms(X)
portb.1 = 0
a= a+1
end if
if a = 3
then portb.2=1
delay_ms(x)
portb.2=0
end if
end
pero................ cuando vuelva a activarlo no va a hacer las 3 repeticiones y volver a poner un 1 en la otra salida(PORTB:2), como hago para que despues de que activa la salida(PORTB.2) el contador se setee a cero????????

espero me hayan entendido!!
saludos y gracias por adelantado!!!
Título: Re: Comenzando con Mikrobasic
Publicado por: ivan braga en 30 de Abril de 2008, 02:25:43
   Olá Aplanado,

   Se eu entendi sua dúvida, então é simples.

   
Citar
if a = 3
then portb.2=1
delay_ms(x)
portb.2=0
a=0 // aqui você coloca novamente A com valor zero (0)
end if
Título: Re: Comenzando con Mikrobasic
Publicado por: Aplanado en 30 de Abril de 2008, 11:29:11

perfecto ivan funciono de maravilla! muchas gracias de nuevo!!!!!
Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: frape en 15 de Agosto de 2008, 07:26:38
Hola, acabo de pasarme a Mikrobasic, quiero convertir un proyecto que tengo hecho y funcionando en picbasic y por mas que leo la ayuda no consigo ver la forma de realizar una rutina equivalente al Lookup del PBP que es la siguiente:

 for f= 0 to 27   
        lookup f,["1011001010011111101101010001"],BitTx 
       
        if f=16 then
        low pintx
            pause 340
        endif

Esta rutina lo que hace es leer una cadena predefinida y cambiar el estado de un pin segun el valor leido en cada posicion, agradeceria me pudierais ayudar ya que estoy estancado en este punto para poder proseguir la conversion de mi codigo al Mikrobasic.

Un Saludo.

Título: Re: Comenzando con Mikrobasic
Publicado por: LAFUMAT en 13 de Febrero de 2009, 05:14:42
HOLA:

HE REALIZADO LOS EJEMPLOS Y HE LLEGADO A ENTENDER INCLUSO LAS LCD. ME GUSTA EL MKB, PUES HAY TRABAJOS QUE EN ASEMBLER SON LIOSOS.

ESTOY PROBANDO CON EL PIC 16F677, Y DE MOMENTO MANEJO LA LCD A 4 BITS SIN PROBLEMAS. AHORA LE HE CONECTADO UN MAX 6675, EL CUAL TRABAJA EN SPI Y ESTOY UTILIZANDO LA LIBRERIA SOFT_SPI. EL CASO ES QUE CREO QUE TODO FUNCIONA PERO, CLARO, EL PRIMER PROBLEMA QUE ME ENCUENTRO ES QUE NO SE USAR EN MKB COMO UNIR DOS VARIABLES TYPO BYTE A UNA TIPO WORD.

QUIERO TERMINAR DE REALIZAR ESTA PRACTICA CONECTANDO UNA TERMOCOUPLA. TENGO TODO, PERO CREO QUE AUNQUE HAGO BIEN LO DE LEER EL SPI, PUES TENGO QUE USAR UN WORD, LUEGO "LIMPIHARLO" Y A VER COMO HAGO PARA PASAR LA MEDIDA A LA LCD, AUNQUE DE MEMOENTO PARA IR APRENDIENDO ME CONFORMO CON QUE EN EL DSIPLAY ME SAQUE LOS NUMEROS CUALQUIERA...


POGO AQUI EL CODIGO QUE ESTOY PRACTICANDO.


Código: FreeBasic
  1. [move]program PRACTICA05
  2. 'DEFINO VARIABLES
  3.  
  4. dim X, Y, K, BUFFER1 as byte
  5.  
  6. DIM TMP AS BYTE
  7. DIM TMP2 AS BYTE
  8. DIM TEXT1, TEXT2 AS CHAR[8]
  9.  
  10. DIM TEMP AS WORD
  11. DIM TEMP2 AS FLOAT
  12.  
  13.  main:
  14. 'CONFIGURACION DE PUERTOS
  15. ANSEL = $00
  16. ANSELH = $00
  17. 'SSPCON = %00010000
  18. 'SSPSTAT = %01000001
  19. WPUA = $00
  20. IOCA = $00
  21. TRISA = $00
  22. PORTA = $00
  23. WPUB = %00010000
  24. IOCB = $00
  25. TRISB = %00010000
  26. PORTB = $00
  27. TRISC = $00
  28. PORTC = $00
  29. LCD_INIT(PORTC)
  30. LCD_CMD(LCD_CURSOR_OFF)
  31. SOFT_SPI_CONFIG(PORTB, 4,5,6)
  32. PORTB.7 = 1
  33. BUFFER1=$00
  34.  
  35. 'PROGRAMA
  36. P1:
  37. LCD_CMD(LCD_CLEAR)
  38. LCD_OUT(1,1, "PRACTICA 05")
  39. LCD_OUT(2,1,"FEBRERO 09")
  40. DELAY_MS(1500)
  41. P2:
  42. LCD_CMD(LCD_CLEAR)
  43. LCD_OUT(1,4,"LEYENDO")
  44. LCD_OUT(2,10,"......")
  45. DELAY_MS(1000)
  46. ' AQUIO LA RUTINA DE LEER EL MAX
  47. READ:
  48. TRISB = %00010000  'CONFIG PORT B
  49. SOFT_SPI_CONFIG(PORTB, 4, 5, 6)' RB7 ES CS
  50. PORTB.7=0 'CS LOW
  51. TMP=SOFT_SPI_READ (BUFFER1)
  52. TMP2= SOFT_SPI_READ (BUFFER1)
  53. PORTB.7=1   'CS HIGH
  54. 'PARA COLOCAR CADA BIT EN SU SITIO DENTRO DE UN WORD
  55. FOR X = 0 TO 7
  56. IF TMP2.X = 0  THEN TEMP.X = 0 ELSE TEMP.X = 1 END IF
  57. NEXT X
  58. FOR Y = 0 TO 7
  59. FOR K=8 TO 15
  60. IF TMP.Y = 0  THEN TEMP.K = 0 ELSE TEMP.K = 1 END IF
  61. NEXT K
  62. NEXT Y
  63.  
  64.  
  65.  'PARA VER SI SE HA DESCONECTADO LA TERMOCOUPLA
  66. IF TMP2.2 = 1 THEN
  67.    LCD_CMD(LCD_CLEAR)
  68.    LCD_OUT(1,1, "TERMOPAR")
  69.    LCD_OUT(2,1, "DESCONECTADO")
  70. END IF
  71. 'ROTO TRES A LA DERECHA
  72. TEMP= TEMP >>3
  73. 'FILTRO
  74. TEMP = TEMP AND $0FFF
  75. 'CONVIERTO A CADENA Y MUESTRO
  76. TEMP = TEMP
  77. BYTETOSTR(TMP2, TEXT1)
  78. BYTETOSTR(TMP, TEXT2)
  79. LCD_CMD(LCD_CLEAR)
  80. LCD_OUT(1,1, TEXT2)
  81. LCD_OUT(2,1, TEXT1)
  82.  
  83. BUFFER1=0
  84.  
  85. DELAY_MS(1500)
  86. GOTO P2
  87. END.[/move]

PD: POR CIERTO HE VISTO POR LA RED EJEMPLOS DE ESTO MISMO EN C Y PASCAL, PERO NO ME ACLARO....

Título: Re: Comenzando con Mikrobasic
Publicado por: LAFUMAT en 13 de Febrero de 2009, 17:28:10
hola de nuevo:

me voy contestando yo solo mientras aprendo...

he modificado el codigo, pues tenia cosas mal, pero he conseguido que me funcione "" :-/; ahora bien, la lectura del max por spi ha tenido que ser de forma manual, pues con la funcio soft_spi no me va.

de todas forma he visto que montado en una protoboard un poco uena no es buena idea, con lo que tengo pensado pasarlo a una PCB.

a ver si saco como colgar el esquema, pues lo he preparado de tal forma que sin cambiar nada puedo usar soft_spi o spi real.

bueno vuelco el codigo y admito sugerencias de limpiarlo, ademas me gustaria saber como sacr los grados con decimales porque ni idea....

Código: FreeBasic
  1. program PRACTICA05
  2. 'DEFINO VARIABLES
  3.  
  4. dim X, BUFFER1 as byte
  5. dim  M as byte
  6. 'DIM TMP AS BYTE
  7. DIM TeMP2 AS word
  8. DIM TEXT1  AS CHAR[16]
  9.  
  10. DIM TEMP AS WORD
  11. DIM TEMP_C AS WORD
  12. DIM MAT1,MAT2,MAT3 AS LONGWORD
  13.  
  14.  main:
  15. 'CONFIGURACION DE PUERTOS
  16. ANSEL = $00
  17. ANSELH = $00
  18. 'SSPCON = %00010000
  19. 'SSPSTAT = %01000001
  20. WPUA = $00
  21. IOCA = $00
  22. TRISA = $00
  23. PORTA = $00
  24. WPUB = %00000000
  25. IOCB = $00
  26. TRISB = %00010000
  27. PORTB = $00
  28. TRISC = $00
  29. PORTC = $00
  30. LCD_INIT(PORTC)
  31. LCD_CMD(LCD_CURSOR_OFF)
  32. 'SOFT_SPI_CONFIG(PORTB, 4,5,6)
  33. PORTB.7 = 1
  34. BUFFER1=$00
  35. TEMP=0
  36. TEMP_C=0
  37. 'PROGRAMA
  38. P1:
  39. LCD_CMD(LCD_CLEAR)
  40. LCD_OUT(1,1, "loco por")
  41. LCD_OUT(2,1,"INCORDIAR")
  42. DELAY_MS(1000)
  43. P2:
  44. 'aqui la rutina de leer el max manualmente
  45. read2:
  46. TRISB = %00010000  'CONFIG PORT B
  47. portb.6=0 ' es el pin del reloj
  48. 'portb.7=1     'pin del cs
  49. 'delay_ms(10)
  50. portb.7=0    'activamos leer
  51. delay_ms(25)
  52. portb.6=0
  53. delay_ms(25)
  54. portb.6=1
  55. delay_ms(25)
  56.  
  57. for M = 0 to 15 'step -1
  58. portb.6=1
  59. delay_ms(200)
  60. if portb.4 = 0 then temp.M=0 else temp.M=1 end if
  61. delay_ms(200)
  62. portb.6=0
  63. delay_ms(25)
  64. next M
  65.  
  66.  
  67. 'delay_ms(5)
  68. portb.7=1
  69.  
  70.  
  71. 'PARA COLOCAR CADA BIT EN SU SITIO DENTRO DE UN WORD
  72. FOR X = 0 TO 15
  73. IF TeMP.X = 0  THEN TEMP2.15-X = 0 ELSE TEMP2.15-X = 1 END IF
  74. NEXT X
  75.  
  76. TEMP=temp2
  77.  
  78.  'PARA VER SI SE HA DESCONECTADO LA TERMOCOUPLA
  79. IF TEMP.2 = 1 THEN
  80.    LCD_CMD(LCD_CLEAR)
  81.    LCD_OUT(1,1, "TERMOPAR")
  82.    LCD_OUT(2,1, "DESCONECTADO")
  83.    GOTO P2
  84.    ELSE GOTO BB
  85. END IF
  86. BB:
  87. 'ROTO TRES A LA DERECHA
  88. TEMP= TEMP >>3
  89. 'FILTRO
  90. MAT1=0
  91. MAT2=0
  92. 'MAT3=0
  93. 'TEMP = TEMP AND $0FFF 'sobra
  94. MAT1= TEMP * 1024
  95. MAT2= MAT1 / 4096
  96. 'MAT3 = MAT2 /10
  97.  
  98. TEMP_C = MAT2-28
  99. 'TEMP_C = TEMP_C
  100. 'CONVIERTO A CADENA Y MUESTRO
  101. WORDTOSTR(TEMP_C, TEXT1)
  102. LCD_CMD(LCD_CLEAR)
  103. LCD_OUT(1,1, "LECTURA:")
  104. LCD_OUT(2,2, TEXT1 )
  105.  
  106. LCD_OUT(2,7, " C")
  107. DELAY_MS(200)
  108.  
  109. GOTO P2
  110. END.

porcierto ¿dije que usaba el 16f677?, con reloj interno (4mhz)
Título: [*]Re: Comenzando con Mikrobasic
Publicado por: Nocturno en 13 de Febrero de 2009, 17:34:01
Jaja, es el código más movido que he visto  :D
Título: Re: [*]Re: Comenzando con Mikrobasic
Publicado por: JJESL en 09 de Marzo de 2009, 19:16:52
hola a todos. soy nuevo en la programación de pics pero tengo conocimientos de ensamblador. quiero aprender a programar en un nivel superior para agilizar en tiempos y por la facilidad que brindan las librerias. es por ello que he comenzado con mikrobasic.

De entrada tengo un problema con la funcion delay_ms(), me compila y graba perfectamente. pero noto que el pic no ejecuta esa función o simplemente se queda "atorado" al llegar a ese punto.
He hecho pequeños programas con funciones, if, for, while, etc y trabaja perfecto.
Estoy utilizando un 18F452, ya cheque bien el cristal, configuración default en el mikrobasic, puedo encender y apagar cualquier puerto, incluso leer de cualquier puerto. He verificado el codigo assembler que genera el programa de LED BLINKING (el famoso encender y apagar un led) y lo encuentro correcto. No se que este pasando.
Suplico su ayuda ya que estoy desesperado, no se que hacer.  :(. 

Nota: uso la versión 7 de mikrobasic con licencia.
Mi programador dice ser compatible con mikrobasic.
La suposición más fuerte que tengo es que debe haber algún error en la optimización de código que maneja MKB ó bien, error en configuración de las Flags del PIC.
Título: Re: Comenzando con Mikrobasic
Publicado por: LAFUMAT en 11 de Marzo de 2009, 09:26:25
hola:

sube el codigo y lo vemos.

a mi me pasaba que no me funcionaban bien algunas cosas por no configurar primero los registros y puertos con los que trabajar.

pero con la funcion delay nunca me paso.

revisa las config, y revisa las condiciones de los bit de configuracion del micro.

a ver que pasa...

Título: Re: Comenzando con Mikrobasic
Publicado por: wllapaco en 19 de Marzo de 2009, 14:52:14
si podrian ayudarme que realizo en el programa mikrobasic para utilizar dos pulsadores (uno que active y el otro que apague) RA.1 y RA.2 para una sola salida RB.1
Título: Re: Comenzando con Mikrobasic
Publicado por: septiembre_negro en 19 de Marzo de 2009, 23:55:57
En este mismo hilo  esta todo lo que buscas incluidos unos videotutoriales para comenzar en mikrobasic .
Título: Re: Comenzando con Mikrobasic
Publicado por: andresd0 en 28 de Marzo de 2009, 15:28:14
http://www.mikroe.com/download/basic_pic_pro.php
mikrobasic 2009 beta 1.14

cambio un poco  la interfaz con respecto a la 7.2
ahora ver como funca
Título: Re: Comenzando con Mikrobasic
Publicado por: juan5005031 en 03 de Abril de 2009, 03:02:09
hola a todos soy nuevo en el foro ye stoy usando el mikrobasic quisiera saber como generar el codigo .hex para cargarselo al pic porque le doy ctlr+f9 o el simbolo build y solo me genera un archivo .pbas por favor espero la mas pronta respuesta gracias...
Título: Re: Comenzando con Mikrobasic
Publicado por: EnriqueB en 17 de Abril de 2009, 14:55:03
Hola
Soy nuevo en el foro y en esto de programar PIC, y debute con un problema... Me compre un programador JDM, un PIC 16F88, baje el icprog, mikrobasic y me lance a al aventura. realice el siguiente programa en mikrobasic:

program Encender_led01
main:
  TrisB = 0
  While true
     PortB = 255
     Delay_ms(1000)
     PortB = 0
     Delay_ms(1000)
  wend
End.
 y para mi desgracia no funciona :(.
al conectar el pic se ponen en alto todas las salidas del puertoB enciende el led pero no se apaga mas, Cual será el problema, si alguien puede ayudarme se los agradezco, me comprometo en un futuro"cuando aprenda" a colaborar con ustedes. GRACIAS!!!
Título: Re: Comenzando con Mikrobasic
Publicado por: Moyin en 17 de Abril de 2009, 20:46:50
Que tal amigo bienvenido al foro, sabes que acabo de probar el programa que mencionas y no encuentro ningun problema, los simulo en proteus y trabaja muy bien lamentablemente no puedo implementarlo fisicamante ya que no cuento con un F88 pero no tiene mayor dificultad que implementarlo.

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: LAFUMAT en 21 de Abril de 2009, 03:09:01
hola amigo:

voy a ver si mi opinion te sirve. sin ver tu esquema te puedo contar que al simular suele ir bien, pero yo miraria de al principio del programa configurar los puertos, es decir, pon el TRISB en salida, etc.

yo estuve liado una semana con ese problema.


creo que se deberia explicar que al comiezo del programa hay que configurar el PIC, sus salidas entradas, timers etc, igual que en ensamblador.


puede ser que mi respuesta no valga de mucho, pero la doy desde la mejor de las intanciones...


un saludo
Título: Re: Comenzando con Mikrobasic
Publicado por: hech en 29 de Abril de 2009, 19:58:41
soy nuevo en programacion en mikrobasic ehpogramado en el ensamblador pero quiesiera aprender a programar en es te software y quisiera tener manuales para poder empezar, espero que alguien me pase su informacion o ponga los enlaces para bajar los textos, espero tambien poner un video de uso de proteus haciendo uso de mikrobasic en un viedeo que vi ,cobre la visualizacion de una imagen en un lcd grafica , la imgen lo saco de paint fue chebere de ahi mi interes en este lenguaje de programacion
Título: Re: Comenzando con Mikrobasic
Publicado por: LAFUMAT en 30 de Abril de 2009, 12:14:26
HOLA AMIGO:

EN LA PAGINA DE MIKROELECTRONICA, ADEMAS DE PODER BAJARTE EL COMPILADOR (DEMO) , COMPRAR LA LICENCIA (ES BARATA), PUES ESTAN  EL MANUAL DE REFERENCIA, Y PUEDES DESCARGARTE TAMBIEN EJEMPLOS, PUES POSTEAN ADEMAS DE LOS PROGRAMAS DE EJEMPLOS, LOS ESQUEMAS DE SUS PLACAS DE EVALUACION...


ESPERO HABER SERVIDO DE ALGO...

Y PERDON  A TODO POR LAS MAYusculas, es que no me doy cuenta...

un saludo a tod@s
Título: Re: Comenzando con Mikrobasic
Publicado por: kdtguerrag en 05 de Junio de 2009, 00:56:17
Que tal amigos, espero me puedan ayudar con un problemita, programe una alarma simple en un pic16f877a con basic, existen dos opciones: la 1 sistema activado lee a ver si se conecto un sensor y activa una sirena, la 2 esta constantemente leyendo un teclado para validar que se presiono una tecla y activar el sistema, el problema es que cuando esta en el modo desactivado osea leyendo el teclado se salta el programa hacia activado sin ninguna accion externa, y claro el sistema se activa y la sirena se enciende, es normal que suceda este tipo de saltos? y hay alguna forma de corregir esto.

Muchas gracias por la valiosa ayuda

Saludos
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 21 de Junio de 2009, 17:01:39
No se a que te referis con 2 opciones ó sistemas.
Yo creo que tenes que hacer un solo sistema que lea si esta activada ó desactivada. Si esta activada, lee los sensores y si alguno te manda un bit alto, se dispara la sirena y los sucesos que vos quieras. Si esta desactivada, no lee los sensores.

Espero que sea de tu ayuda.
Título: Re: Comenzando con Mikrobasic
Publicado por: Mc Guiver en 13 de Julio de 2009, 20:11:05
Estimado kdtguerrag:
                                Sería mucho mas facil para nosotros si publicaras el programa para ver en donde le estás errando.
saludos
Mc. Guiver
Título: Re: Comenzando con Mikrobasic
Publicado por: aduri en 21 de Septiembre de 2009, 07:44:07
Bye
I'm sorry, I'm Italian and I try to speek in english.
This is my first post.

I'm testing my sw to decode GPS Nmea183 string.
This sw works but the visualization in my LCD 2x32 char is not good (conflict with serial???)  and
I don't undestand why, if I set only lcd_out(2,6,NSLatitudine), i read the Longitude too in the lcd.

Código: [Seleccionar]
program gps_other
'PIC16F628A
'lcd 2x32
'serial gps on rb1

dim rxIndex as byte
dim rxDone as byte
dim rxGPSData as byte
dim rxDataGarbage as byte
dim conta as byte
dim GP as char[10]
dim sincro as char[7]
dim UTC as char[10]
dim Latitudine as char[10]
dim Longitudine as char[10]
'dim Altitudine as char[4]
dim NS as char[1]
dim EW as char[1]
'dim SatNum as char[4]
dim Ora as char[10]
dim NSLatitudine as char[11]
dim EWLongitudine as char[12]

'Questa e' la successione di stringhe del mio GPS    4800bps 8 n
'$GPGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0*00
'$GPGSV,3,1,09,01,30,312,00,02,24,112,00,04,28,063 ,00,05,77,128,00*73
'$GPGSV,3,2,09,06,15,209,00,14,38,269,00,20,10,000 ,00,25,13,309,00*77
'$GPGSV,3,3,09,30,58,254,00,,,,,,,,,,,,*4D
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
'$GPRMC,204620.999,V,4530.6671,N,00916.9484,E,0.0, 0.0,250805,0.0,W*63


'Io analizzo solo la stringa
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
' ora UTC lat N/S long E/W


main:
lcd_init(portb)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
' lcd_cmd( LCD_CURSOR_OFF) ' send command cursor off
lcd_out(1,1,"GPS data") ' print txt to LCD, 1nd row, 1st column
USART_init(4800)
'Lcd_Config(PORTA,2,3,0,7,6,1,4)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
lcd_out (1,9,"Attesa...")   'modif.
inizio:
Ora = " "
GP = " "
sincro = " "
rem NSLatitudine = " "
rem EWLongitudine = " "
rem Altitudine = " "
rem SatNum = " "

if USART_Data_Ready=1 then
rxDataGarbage = USART_Read
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
end if

'filtro frase "$GPGGA,"

rxDone = 0
rxIndex = 0
while rxDone=0
 if USART_Data_Ready=1 then
     rxGPSData = USART_Read
       if (rxGPSData="$") then
             rxDone = 1
        else goto inizio
       end if
 end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
  if USART_Data_Ready=1 then
      rxGPSData = USART_Read
       if (rxGPSData="G") then
           rxDone = 1
       else goto inizio
       end if
  end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
    if USART_Data_Ready=1 then
         rxGPSData = USART_Read
         if (rxGPSData="P") then
            rxDone = 1
          else goto inizio
          end if
    end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
 if USART_Data_Ready=1 then
     rxGPSData = USART_Read
       if (rxGPSData="G") then
             rxDone = 1
        else goto inizio
       end if
 end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
  if USART_Data_Ready=1 then
      rxGPSData = USART_Read
       if (rxGPSData="G") then
           rxDone = 1
       else goto inizio
       end if
  end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
    if USART_Data_Ready=1 then
         rxGPSData = USART_Read
         if (rxGPSData="A") then
            rxDone = 1
          else goto inizio
          end if
    end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
    if USART_Data_Ready=1 then
         rxGPSData = USART_Read
         if (rxGPSData=",") then
            rxDone = 1
          else goto inizio
          end if
    end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   UTC[rxIndex] = rxGPSData ' UTC (ora)
                if (rxGPSData=44) then
                   rxdone=1
                end if
inc(rxIndex)
end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   Latitudine[rxIndex] = rxGPSData ' Latitudine
if (rxGPSData=44) then
   rxdone = 1
end if
inc(rxIndex)
end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   NS[rxIndex] = rxGPSData ' Nord o Sud
if (rxGPSData=44) then
   rxdone = 1
end if
inc(rxIndex)
end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   Longitudine[rxIndex] = rxGPSData ' Longitudine
if (rxGPSData=44) then
   rxdone = 1
end if
inc(rxIndex)
end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   EW[rxIndex] = rxGPSData ' Est o Ovest
if (rxGPSData=44) then
   rxdone = 1
end if
inc(rxIndex)
end if
wend

' Crea l'array ora
ora[0] = UTC[0] 'ore "20"
ora[1] = UTC[1]
ora[2] = ":"
ora[3] = UTC[2] 'minuti "46"
ora[4] = UTC[3]
ora[5] = ":"
ora[6] = UTC[4] 'secondi "20"
ora[7] = UTC[5]
' Crea l'array NSLatitudine
NSLatitudine[0] = Latitudine[0] ' gradi
NSLatitudine[1] = Latitudine[1] ' gradi
NSLatitudine[2] = "'" ' apice
NSLatitudine[3] = Latitudine[2] ' primi
NSLatitudine[4] = Latitudine[3] ' primi
NSLatitudine[5] = Latitudine[4] ' punto per decimali
NSLatitudine[6] = Latitudine[5] 'decimali
NSLatitudine[7] = Latitudine[6] 'decimali
NSLatitudine[8] = Latitudine[7] 'decimali
NSLatitudine[9] = Latitudine[8] 'decimali
NSLatitudine[10] = " "
NSLatitudine[11] = NS[0] 'nord/sud
' Crea l'array EWLongitudine
EWLongitudine[0] = Longitudine[0] ' gradi
EWLongitudine[1] = Longitudine[1]
EWLongitudine[2] = Longitudine[2]
EWLongitudine[3] = "'"
EWLongitudine[4] = Longitudine[3] ' primi
EWLongitudine[5] = Longitudine[4]
EWLongitudine[6] = Longitudine[5]
EWLongitudine[7] = Longitudine[6]
EWLongitudine[8] = Longitudine[7]
EWLongitudine[9] = Longitudine[8]
EWLongitudine[10] = Longitudine[9]
EWLongitudine[11] = " "
EWLongitudine[12] = EW[0]

lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(2,1,"           ") '11 spazi vuoti x pulire
lcd_out(1,1,"UTC: ")
lcd_out(1,6,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"

'delay_ms(3000)
lcd_out(3,1,"Lat: ")
lcd_out(2,6,NSLatitudine)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"

lcd_out(3,1,"Lon: ")
'delay_ms(3000)
'lcd_out(3,6,EWLongitudine)
'delay_ms(3000)
'lcd_out(2,19," ") ' spazi vuoti x pulire
goto inizio
end.




I understood how to work with a LCD 2x32:

Código: [Seleccionar]
program lcd_2_x_32
'gestione std 4x20
'infatti prima riga 1 e 3
'seconda riga 2 e 4
dim Ora as char[10]
dim NSLatitudine as char[12]
Ora="22:44:30  "
NSLatitudine="+44'24.3817N"
lcd_init(portb)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(1,1,"UTC:")
lcd_out(1,5,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
NSLatitudine="+44'24.3817N"
'delay_ms(3000)
lcd_out(2,1,"Lat:")
lcd_out(2,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(3000)
lcd_out(1,1,"Lat:")
lcd_out(1,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(2000)
lcd_out(2,1,"UTC:")
lcd_out(2,5,ora)
delay_ms(3000)

end.

But while reading the serial port, the LCD management doesn't work as it should.

Thank for your help
Antonio

Título: Re: Comenzando con Mikrobasic
Publicado por: atricio en 29 de Septiembre de 2009, 14:13:47
HOLA alguien me puede ayudar por favor he estado leyendo un poco del tema pero en el inicio dice que hay un video de como crear un proyecto pero le doy click al link y me direje a una pagina que no hay nada de eso me pueden ayudar como crear un nuevo pryecto o me ayudan un link para poder ver ese video muchas gracias de antemano
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 06 de Octubre de 2009, 14:24:57
Hola a todos, he estado haciendo algunos proyectos con el timer0 y las interrupciónes, el problema es que cuando le doy debug en mikrobasic el contador de programa (PC) no salta a la interrupción y tampoco aumenta el timer0 despues de haber ocurrido el timpo necesario para que esto ocurra. El problema es solo en la simulación de MikroBasic ya que cuando lo compilo y simulo en Proteus todo va bien.

Realizo esta pregunta porque me gustaría encontrar errores dentro de mikrobasic, ya que es mucho más facil así y me ahorraría mucho más tiempo.
Título: Re: Comenzando con Mikrobasic
Publicado por: franco_gdl en 26 de Octubre de 2009, 20:46:34
Hola que tal a todos les mando saludos desde Jalisco Mexico, bueno espero que alguien me pueda ayudar con este programa. El programa esta realisado para utilizar el PIC 16F84A.
El programa consta de 3 switch(Push botom).
1 - El primer switch en RB0 utilizando interrupcion,  selecciona que pin de salida habilitar RA1 o RA2.
2 - El segundo switch en RB1 utilizado para aumentar frecuencia de salida en RA1 o RA2.
3 - El tercer switch en RB2 utilizado para disminuir frecuencia de salida en RA1 o RA2.
El problema que tengo es que si lo simulo en ISIS, si funciona pero cuando lo programo el PIC, no hace nada.
A continuacion el codigo quedo asi:

Program Prueba21

' Utilizando el IC PIC16F84.
' El PortB0 se utilizara para seleccionar funcion.
' El PortB1 se utilizara para aumentar frecuencia.
' El PortB2 se utilizara para disminuir frecuencia.
‘ El PortA1 y PortA2 se utilizan para salidas y controlar motores.

dim b0,b1,b2,b3,a as integer


'****RUTINA DE INTERRUPCION***********************************************.

sub procedure interrupt
  if TestBit(INTCON,INTE) = 1 then' pregunta causante de interrupcion.
   delay_ms(10)
     a = a + 1
     if (a) >= 3 then
     a = 0
     end if
  ClearBit(INTCON,INTF)
  end if
 end sub


'*************************************************************************
main:
     ClearBit(OPTION_REG,INTEDG)' configura interrupcion por flanco de bajada.
     SetBit(INTCON,INTE)' configura pin RB0 como interrupcion.
     SetBit(INTCON,GIE) ' habilita interrupciones globales.
     trisa = 0
trisb = 1
trisb  = 1
trisb.1 = 1
trisb.2 = 1


b0 = 550 ' Se utiliza para generar el tiempo.
b1 = 550 ' Se utiliza para generar el tiempo.
b2 = 0   ' contador utilizado para seleccionar funcion.
b3 = 10


uno:
     if a = 0 then goto main
     else goto dos
     end if
dos:
     if a = 1 then goto tres
     else goto four
     end if

tres:
    porta.1 = 1
    gosub retardo
    porta.1 = 0
    gosub retardo
    goto check
    goto uno

four:
     if a = 2 then goto five
     else goto uno
     end if

five:
     porta.2 = 1
     gosub retardo
     porta.2 = 0
     gosub retardo
     goto check
     goto uno

'******checa si se aumenta o disminuye la velocidad*************.
check:
      delay_ms(10)
      if portb.1 = 0 then goto incre  ' checa si se preciono la tecla
      else goto otro                  ' para aumentar velocidad.
      end if
bye:  goto uno

otro:
      delay_ms(10)                     ' checa si se preciono la tecla
      if portb.2 = 0 then goto dismi  ' para disminuir la velocidad.
      else goto uno
      end if
incre:
      if b0 = 1 then goto mini
      else goto incr
      end if
 mini:
      b0 = 1
      b1 = 1
      goto uno

 incr:
      b0 = b0 - B3
      b1 = b0
      if b0 = 10 then goto adjust
      else goto uno
      end if

adjust:
       b3 = 1
       goto uno


dismi:
      if b1 >= 350 then goto adjust1
      else goto nel
nel:  if b1 = 1 then goto adjust2
      else goto contup
      end if
      end if

adjust1:
        b0 = 350
        b1 = 350
        goto bye

adjust2:
        b0 = 10
        b1 = 10
        goto contup

contup:
       b0 = b0 + 10
       b1 = b0
       goto bye


retardo:                       'generador del tiempo.
        Vdelay_ms(b0)
        Vdelay_ms(b1)
        return
END.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 08 de Noviembre de 2009, 02:13:35
Hola franco_gdl, a continuacion menciono algunos de tus problemas

Problemas con las Entradas.
Cada vez que utilizas un pulsador este necesita resistencias de preset como muestra la siguiente figura y una rutina de antirrebote.
(http://img5.imageshack.us/img5/9706/pulsadores.jpg)
Si no deseas utilizar la rutina anti-rebote puedes utilizar circuitos anti-rebotes
(http://img11.imageshack.us/img11/7600/pulsadores2.jpg)
El primer circuito mostrado en la figura anterior es válido si y solo si utilizas entradas Schmitt Trigger que para el  16F84 son RA4 y RB0.

Problemas con la PWM
Si lo que deseas es sacar una PWM por una de las patillas del PIC lo mejor es que utilices el TIMER0 ya que es mucho más exacto que utilizar retardos a como tú lo has estado haciendo

Codigo que recomiendo que utilices
Código: [Seleccionar]
program GenerarPWM

dim cont,DutyCyc,a as byte  'Definimos Variables a utilizar
                            'cont=Conteo
                            'DutyCyc=DutyCycle
                            'a=activacion y seleccion de pin de salida

sub procedure interrupt
    TMR0=217              'Para que el desborde ocurra cada (256us-217us)*256=10ms
                          'Es decir el Periodo de PWM es de 1000ms
                          'Para variar el Periodo puedes variar el limite de conteo o
                          'puedes variar el valor del preescaler.
    cont=cont+1
    if cont<=DutyCyc then 'Si el conteo es menor o igual que el DutyCycle entonces
        PORTA=a           'El PORTA tendra el valor de a ej. a = 2dec = 00000010bin
    else                  'de lo contrario
        PORTA=0           'el PORTA sera 0
    end if
    if cont>=100 then     'Si el conteo es mayor o igual a 100
        cont=0            'se reiniciara a 0
    end if
    INTCON.T0IF=0         'Desactivamos el flag de interrupccion del TMR0 para poder
                          'salir de la interrupcion sino entrara infinitamente
end sub

main:
    TRISA=0               'todas como salida
    TRISB=255             'todas como entrada
    OPTION_REG=%00000111  'Resistencias de weak pull-up desabilitadas
                          'Fuente de reloj para TIMER0 interna (CLKOUT)
                          'Asignacion de Preescaler al TIMER0
                          'Preescaler 1:256
    INTCON=%10100000      'Interrupciones Generales Habilitadas
                          'Interrupcion por desbordamiento del Timer0 habilitada
    DutyCyc=50            'Se carga DutyCycle con valor inicial de 50
    while 1
        if PORTB then         'Si alguno de los pines del puerto se ha pulsado
            if PORTB.0 then   'Si pulso RB0
                Delay_5ms     'Espera para los rebotes
                while PORTB.0 wend          'Espera hasta que deje de pulsar
                a=a+1                       'incrementa a
                if a>2 then a=0 end if      'si a es mayor que 2 entonces a=0
            end if
            if (PORTB.1=1)and(DutyCyc<100) then   'Si pulso RB1 y DutyCycle menor a 100
                Delay_5ms                         'Espera 5ms para los rebotes
                while PORTB.1=1 wend              'Espera hasta que deje de pulsar

                DutyCyc=Dutycyc+10                'Incrementar en 10 el DutyCycle
            end if
            if (PORTB.2=1)and(DutyCyc>0) then     'Si pulso RB2 y DutyCycle menor a 0
                Delay_5ms                         'Espera para los rebotes
                while PORTB.2=1 wend              'Espera hasta que deje de pulsar
                DutyCyc=Dutycyc-10                'Decrementar en 10 el DutyCycle
            end if
        end if
    wend
end.

Los retardos de 5ms se agregan para evitar lectura incorrecta durante los rebotes, ya que estos son cambios aleatorios de 0 y 1, como muestra la figura anterior.

Tambien existen algunos pic con modulos PWM, para poder utilizar estos modulos simplementes tienes que utilizar las funciones propias de MikroBasic.
Título: Re: Comenzando con Mikrobasic
Publicado por: franco_gdl en 09 de Noviembre de 2009, 22:41:26
Gracias por la ayuda voy a poner esos circuitos antirebote sale, que estes bien y gracias por la ayuda.
Título: Re: Comenzando con Mikrobasic
Publicado por: Fer_TACA en 10 de Noviembre de 2009, 15:32:30
Una pregunta simple:

¿Cual me aconsejan Mikrobasic o Proton ?

llevo tiempo pegandome con el manual en castellano de Proton :lol: :lol: y avanzo muy poco.

Fer.
Título: Re: Comenzando con Mikrobasic
Publicado por: aduri en 07 de Mayo de 2010, 05:45:43
Hello friends,
I tried to make a SWR meter.
Now I obtained a correct result of ROS but I read on LCD only a integer part of result but not the decimal and in a wrong position (0.001 instead of 1.000)

Help me please

Antonio

Código: [Seleccionar]
program adc_SWR



dim ch as byte
adc_rd as word
adc_rd1 as word
Text as char[17]
tlong as longint
ros as word
tlong1 as longint

main:
 PORTD = 0 ' clear PORTD
 TRISD = 0 ' designate PORTD as output (LCD is connected to PORTD)
 INTCON = 0 ' disable all interrupts
 Lcd_Init(PORTD) ' Lcd_Init_
 Lcd_Cmd( LCD_CURSOR_OFF) ' send command to LCD (cursor off)
 Lcd_Cmd(LCD_CLEAR) ' send command to LCD (clear LCD)
 'Text = "mikroElektronika" ' assign text to string a
 'Lcd_Out(1,1, Text) ' print string a on LCD, 1st row, 1st column
 OPTION_REG = $80
 ADCON1 = $82 ' configure VDD as Vref, and analog channels
 TRISA = $FF ' designate porta as input
 Delay_ms(2000)
 Text = "Voltage: " ' assign text to string a
Lcd_Out(2, 1, Text) ' print string a on LCD, 2nd row, 1st column
 Lcd_Out(1, 16, "Vdir/Vrif")
 Lcd_Out(2, 1, "R.O.S. = ")
while TRUE
' adc_rd = ADC_read(0) ' get ADC value from 1st channel
adc_rd = 200 ' valore caricato x debug
tlong = adc_rd*5000 ' trasformazione per fondo scala 5 volt
adc_rd = tlong >> 10 ' divisione per 1024 (10 bit)
ch = adc_rd div 1000 ' prepare value for diplay
 Lcd_Chr(1, 3, 48+ch) ' write ASCII at 1st row, 9th column
 Lcd_Chr(1, 4, ".")
ch = (adc_rd div 100) mod 10
 Lcd_Chr(1, 5, 48+ch)
ch = (adc_rd div 10) mod 10
 Lcd_Chr(1, 6, 48+ch)
ch = adc_rd mod 10
 Lcd_Chr(1, 7, 48+ch)
 delay_ms(1)

' adc_rd1 = ADC_read(1) ' get ADC value from 2nd channel
adc_rd1 = 20 ' valore caricato x debug
tlong = adc_rd1*5000 ' trasformazione per fondo scala 5 volt
adc_rd1 = tlong >> 10 ' divisione per 1024 (10 bit)
ch = adc_rd1 div 1000 ' prepare value for diplay
 Lcd_Chr(1, 9, 48+ch) ' write ASCII at 2nd row, 9th column
 Lcd_Chr(1, 10, ".")
ch = (adc_rd1 div 100) mod 10
 Lcd_Chr(1, 11, 48+ch)
ch = (adc_rd1 div 10) mod 10
 Lcd_Chr(1, 12, 48+ch)
ch = adc_rd1 mod 10
 Lcd_Chr(1, 13, 48+ch)
 delay_ms(1)

ros=(adc_rd+adc_rd1) / (adc_rd-adc_rd1)
'tlong1 = ros
'ros = tlong1 >> 10
ch = ros div 1000 ' prepare value for diplay
 Lcd_Chr(2, 12, 48+ch) ' write ASCII at 2nd row, 9th column
 Lcd_Chr(2, 13, ".")
ch = (ros div 100) mod 10
 Lcd_Chr(2, 14, 48+ch)
ch = (ros div 10) mod 10
 Lcd_Chr(2, 15, 48+ch)
ch = ros mod 10
 Lcd_Chr(2, 16, 48+ch)
 delay_ms(1)
wend
end.
Título: Re: Comenzando con Mikrobasic
Publicado por: aduri en 07 de Mayo de 2010, 05:56:52
Escuse me
I loaded two number 200 and 20 in adc_rd and adc_rd1 to make a debug.

Bye
Antonio
Título: Re: Comenzando con Mikrobasic
Publicado por: NORTEÑO en 07 de Junio de 2010, 14:53:07
Hola a todos y todas este es mi primer mensajito referido a mikrobasic.
es fabuloso y de facil iniciacion para los que nos iniciamos en este campo.
Por lo que propongo un apartado de diferentes ejemplitos de programas y
procedimientos que no esten publicados.

Espero que se reactive un poco este foro.
ESCRIBIR EN ESPAÑOL.

GRACIAS A TODOS.
Título: Re: Comenzando con Mikrobasic
Publicado por: marcelo2112 en 06 de Octubre de 2010, 14:49:45
Hola, recien termino de instalar el mikrobasic para hacer unas pruebas, pero me encuentro con que al compilar no me genera el HEX. Como hay que hacer?Gracias.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 06 de Octubre de 2010, 18:13:19
Hello friends,
I tried to make a SWR meter.
Now I obtained a correct result of ROS but I read on LCD only a integer part of result but not the decimal and in a wrong position (0.001 instead of 1.000)

Help me please

Antonio


Hola Anduri, te recomiendo que utilices la función WordToStr de MikroBasic para convertir un un numero tipo word o long int a String.

En tu código aparece esto
Código: FreeBasic
  1. ' adc_rd = ADC_read(0) ' get ADC value from 1st channel
  2. adc_rd = 200 ' valore caricato x debug
  3. tlong = adc_rd*5000 ' trasformazione per fondo scala 5 volt
  4. adc_rd = tlong >> 10 ' divisione per 1024 (10 bit)
  5. ch = adc_rd div 1000 ' prepare value for diplay
  6.  Lcd_Chr(1, 3, 48+ch) ' write ASCII at 1st row, 9th column
  7.  Lcd_Chr(1, 4, ".")
  8. ch = (adc_rd div 100) mod 10
  9.  Lcd_Chr(1, 5, 48+ch)
  10. ch = (adc_rd div 10) mod 10
  11.  Lcd_Chr(1, 6, 48+ch)
  12. ch = adc_rd mod 10
  13.  Lcd_Chr(1, 7, 48+ch)
  14.  delay_ms(1)

Te recomiendo que utilices
Código: FreeBasic
  1. ' adc_rd = ADC_read(0) ' get ADC value from 1st channel
  2. adc_rd = 200 ' valore caricato x debug
  3. tlong = adc_rd*5000 ' trasformazione per fondo scala 5 volt
  4. adc_rd = tlong >> 10 ' divisione per 1024 (10 bit)
  5. WordToStr(adc_rd,txt)
  6. if(txt[0]=' ') then      'Si el primer elemento de la cadena txt es un espacio
  7.    txt[0]='0'            'Lo debemos convertir a 0
  8. end if
  9. Lcd_Chr(1,3,txt[0])    'Imprimimos el primer elemento de la cadena
  10. Lcd_Chr_Cp('.')        'Imprimimos el punto
  11. Lcd_Out_Cp(txt[1])     'Imprimimos el resto de la cadena comenzando del segundo elemento.
  12. ........

txt debe ser declarado como una cadena de la siguiente manera
Código: FreeBasic
  1. dim txt as string[5]

Si utilizas la version pro de MikroBasic puedes utilizar la funcion WordToStrWithZeros, con la cual podrías eliminar la pregunta si es cero.
Título: Re: Comenzando con Mikrobasic
Publicado por: meledu en 13 de Noviembre de 2010, 11:57:13
Hola amigos tengo un aporte aunque no es mio en realidad solo es una modificacion del codigo de nuestro amigo dogflu hecho para psi y que yo modifique para poder ser usado en mikrobasic, Se trata de el uso del timer1 como timer, este se desborda cada 1ms ,de esta manera se puede usar un rutina para control de tiempos sin necesidad de usar el Waitms o el delay ms en este caso, esepro les sirva,
enciende un led conectado a rb0 cada 1/2 segundo y otro conectado a rb1 cada 1 segundo y bueno aqui lo tienen
se esta usando la interrupcion del timer1 y un procedimiento para controlar el tiempo que se va a contar(biene a ser la pausa)
Como les dije en un comienzo, es una modificacion del codigo de Dogflu , espero no haver hecho mal, puesto que lo cuelgo sol por fines didacticos.

program temporizador

' Declarations section
'------------------------------ Variables del Timer -------------------------------------------------
Dim pause As Word  'contiene el valor para simular el comando waitms
Dim aux_pause As Word  'variable auxiliar del pause que lleva la cuenta de los ms
Dim timer_1ms As Byte  'base de tiempos que se incrementa cada 1 mseg, timer del PAUSE
Dim timer_100ms As Byte  'base de tiempo que se incrementa cada 100 mseg
Dim timer_base As Byte  'valor referencial para el timer_100ms
'------------------------------------ Variables del Programa ----------------------------------------
Dim flash_led_verde As Bit
Dim led_verde As Bit
Dim n As Byte


  sub procedure Interrupt()
    If PIR1.TMR1IF = 1 Then  'comprueba que es esta la interrupción activa
     timer_base = timer_base + 1
     If timer_1ms < 1 Then timer_1ms = timer_1ms + 1  'contador para el control de 1 mseg
     End if
     If timer_base >= 100 Then
      timer_100ms = timer_100ms + 1
      timer_base = 0  'reset al timer
     End if
   
     If timer_100ms = 5 Then  ''cuenta 500 milisegundos
      If flash_led_verde = 1 Then  ''verifica si el flash del led verde esta habilitado
       If led_verde = 0 Then
        portb.0 = 1  ''activa el led verde
        led_verde = 1  ''indica que el led verde esta activo
        Else
        portB.0 = 0  ''apaga el led verde
        led_verde = 0  ''indica que el led verde esta desactivado
       End if
      End if
      timer_100ms = 0
     End if
    End if
   
    TMR1H = 0xec  'carga el registro del timer1, para que desborde cada 1mSeg.
    TMR1L = 0x78
    PIR1.TMR1IF = 0  'borra el flag de salto del tmr1
  end sub

 sub procedure pause_ms()  'rutina de espera, rutina que reemplaza al WAITMS ,pause establece el tiempo que se va a esperar
           aux_pause = 0  'variable auxiliar que lleva la cuenta de los ms
           timer_1ms = 0
           While aux_pause <= pause  'pause determina el tienmpo maximo a contar,en mseg
            aux_pause = aux_pause + 1
            If timer_1ms > 0 Then timer_1ms = 0  'al borrar el contador se activa y cuenta 1 mseg
            end if
            While timer_1ms < 1
            Wend
           wend
 end sub


main:  '   Main program

    TRISB.0 = 0
    TRISB.1 = 0
    PORTB.0 = 0
    PORTB.1 = 0
    T1CON.TMR1CS = 0  'asigna el reloj nterno al timr1.Se incrementa con cada ciclo de instruccion
    T1CON.T1CKPS0 = 0  'factor del preescaler del timer1,0
    T1CON.T1CKPS1 = 0  'factor del preescaler del timer1,0     El factor del prescaler es 1:1
    TMR1H = 0xec  'carga el byte alto del registro del trm1 (EC78 mapara 20Mhz ó FC18 para 4Mhz)
    TMR1L = 0x78  'carga el byte bajo del registro del tmr1     cuenta 5000 a 20Mhz ó 1000 a 4Mhz (1ms)
    T1CON.TMR1ON = 1  'habilita al timer1.Comienza a incrementarse
    PIE1.TMR1IE = 1  'activa las interrupciones del timer1
    INTCON.PEIE = 0x01  'Bit de habilitacion de las interrupciones de perifericos
    INTCON.GIE = 1
   
    flash_led_verde =1
   
    while(true)
     PORTB.1 = 1 'enciendo el led
     pause = 1000   'cargo una pausa de 1 segundo (1000ms)
     pause_ms       ' voy a la rutina de espera del tiempo cargado en pause(1000 ms)
     PORTB.1 = 0    'apago el led
     pause = 1000
     pause_ms
    wend
end.
Título: Re: Comenzando con Mikrobasic
Publicado por: paul_cueva en 17 de Noviembre de 2010, 22:05:18
holaaaaa

perdon la ignorancia pero no puedo hacer que el mikrobasic 5.0 me genere archivos .HEX o .ASM despues de compilar el programa.
me queda guardado como .Pbas pero nada mas...

que pasara?

saludos!!

Mira yo tenía el mismo problema.. si tienes windows7 sólo dale clic derecho al ícono del programa y pon abrir ejecutar como administrador
Título: Re: Comenzando con Mikrobasic
Publicado por: fryab en 14 de Diciembre de 2010, 19:41:55
hola a todos tengo un pequeño problema con un programa que estoy desarroyando soy nuevo en esto de la programacion el proplema es que quiero sacar señal del programa para que me controle el ic max icm7218a para display de 7 seg. y no se como les pongo el programa para que lo chequen y me digan si me pueden ayudar

Código: [Seleccionar]
dim LCD_RS as sbit at RB4_bit ' Conexiones del módulo Lcd
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit ' Final de las conexiones del módulo Lcd
dim text as string [16]
dim text1 as string [16]
dim text2 as string [16]
dim ch, adc_rd as word
dim tlong as longword
dim i,m as longword
cr as word
pwm9 as byte


main:
i =365
TRISB = 0
PORTB = 0xFF
INTCON = 0
TRISA = 1
portd=255
trisd=255
portc.7=0
trisc.7=0
PWM1_Init(1000)
PWM1_Start()
DELAY_MS(2000)
Lcd_Init()
Lcd_Cmd(_LCD_CURSOR_OFF)
Lcd_Cmd(_LCD_CLEAR)
text = "PRUEBA"
text1 = "DE LCD"
Lcd_Out(1,1,text)
Lcd_Out(2,1,text1)
Delay_ms(2000)
lcd_cmd(_lcd_clear)
ADCON1 = 0x80
TRISA = 0xFF
text2 = "T="

while 1
  adc_rd = ADC_Read(0)
  Lcd_Out(2,1,text2)
  tlong = adc_rd * 50000
  tlong = tlong / 1023
  ch = (tlong / 1000) mod 10

  Lcd_Chr(2,4,48+ch)
  ch = (tlong / 100) mod 10
  Lcd_Chr_CP(48+ch)
  Lcd_Chr_CP(".")
  ch = (tlong / 10) mod 10
  Lcd_Chr_CP(48+ch)
  Lcd_Chr_CP("C")
  Delay_ms(1)
  cr = (i / 100) mod 10
  Lcd_Chr(1,1,48+cr)
  cr = (i /10) mod 10
  Lcd_Chr_CP(48+cr)
  cr = i mod 10
  Lcd_Chr_Cp(".")
  Lcd_Chr_CP(48+cr)
  cr=i/1 mod 10
  Delay_ms(1)
      delay_ms(50)
    m=i
    PWM1_Set_Duty((adc_rd*1000)/(m)-1)
   if Button(PORTd, 4,1,1) then
    i = i+1
    delay_ms(200)
  end if
  if Button(PORTd, 5,1,1) then
    i = i - 1
    delay_ms(200)
  end if
  if ADC_Read(0)*(5000.0/1024.0)>=i+10 then
       portc.7=1
  end if
  if adc_read(0)*(5000.0/1024.0)<=i-10 then
     portc.7=1
  end if
  if portd.7=1 then
     portc.7=0
     delay_us(200)
     
  end if
wend
end.

es una copilacion de varios programas para crear algo mas completo no todo es de mi intelecto pero funciona solo que quiero visualizar en 6 display de 7seg. tanto la señal de entrada como la de control

saludos a todos y grax. de antemano.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 14 de Diciembre de 2010, 21:40:16
Hola fryab.

Hace poco hice una librería para manejar el MAX7219 mediante mikroC, este dispositivo se encarga de hacer lo mismo que el tuyo, pero la diferencia es que este utiliza transmisión de datos spi, esto significa que solo utiliza 4 pines del pic, dejando libres el resto, y si deseas conectar otro en cascada solo necesitas, una línea más.

A continaución te pongo el link.

http://www.todopic.com.ar/foros/index.php?topic=29792.0 (http://www.todopic.com.ar/foros/index.php?topic=29792.0)

Supongo que te será facil migrar de MikroC a MikroBasic, ya que son del mismo fabricante y además utilizan casi las mismas funciones.
Título: Re: Comenzando con Mikrobasic
Publicado por: fryab en 17 de Diciembre de 2010, 16:00:35
Hola fryab.

Hace poco hice una librería para manejar el MAX7219 mediante mikroC, este dispositivo se encarga de hacer lo mismo que el tuyo, pero la diferencia es que este utiliza transmisión de datos spi, esto significa que solo utiliza 4 pines del pic, dejando libres el resto, y si deseas conectar otro en cascada solo necesitas, una línea más.

A continaución te pongo el link.

http://www.todopic.com.ar/foros/index.php?topic=29792.0 (http://www.todopic.com.ar/foros/index.php?topic=29792.0)

Supongo que te será facil migrar de MikroC a MikroBasic, ya que son del mismo fabricante y además utilizan casi las mismas funciones.

estube checando la libreria poro no ago que funcione en mikrobasic no se si me pudieras echar la mano con ello grax
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 20 de Diciembre de 2010, 00:18:28
Hola fryab.

 :| Cuando te refieres a echar la mano me suena a que quieres que haga tu trabajo.

Lo que quiero decir es que cuando se pide ayuda, se pide sobre algo específico, es decir debes preguntar sobre alguna función o sobre alguna línea del código que no entiendes.

Disculpa si suena algo grocero en ningun momento intento ofender, lo que ocurre es que este foro es para que aprendas, por eso debo ser un poco estricto.

Lo que te puedo recomendar es que utilices el código que he puesto en ese link y que trates de entenderlo. Si deseas ni siquiera tienes que migrar de MikroC a MikroBasic, es decir, puedes utilizar mi codigo como base para realizar tu codigo,  ;-) siempre y cuando que al final de tu proyecto aparezca referencia.
Título: Re: Comenzando con Mikrobasic
Publicado por: Carli en 05 de Enero de 2011, 13:36:34
¿Display de 7 segmentos ó lcd?
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 06 de Enero de 2011, 15:02:18
Hola Carli!

Te recomiendo que seas mas especifico en tus preguntas.
Título: Re: Comenzando con Mikrobasic
Publicado por: sejotre en 24 de Abril de 2011, 20:17:51
tengo una duda : es posible usar el lenguaje de pbp en mikrobasic?
yo actualmente estoy usando el mplab con pbp pero estoy queriendo cambiar
que compiladores ( preferentemente en castellano) aceptan pbp?
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 24 de Abril de 2011, 21:05:06
aunque ambos son lenguajes basic no son compatibles.
Título: Re: Comenzando con Mikrobasic
Publicado por: sejotre en 24 de Abril de 2011, 21:25:09
gracias por tu pronta respuesta Biglis
entonces repregunto que compiladores aceptan el lenguaje pbp ?
yo recien estoy dando mis primeros pasos y quisiera terminar de aprender el pbp antes de empezar con otro lenguaje....
Título: Re: Comenzando con Mikrobasic
Publicado por: ArvMCU en 25 de Junio de 2011, 00:18:58
Hola, que tal

Recientemente he trabajado con el sofware I2C del mikroBasi y estaba programando un SAA1064, pero al grabarlo al PIC y probarlo, surge el problema de que si programe que me visualize la palabra "HOLA", solamente se encienden 2 displays y visualiza "H" y "L" y cuando intento encender los demas displays, tambien visualiza lo mismo, como si trabajara en modo estático y la palabra de contro que le mando es para que sea dinámico. Entonces quería saber si me puedes ayudar con este problemita, o algún ejemplo que tengas de un SAA1064 con mikroBasic en modo Dinámico, en otra ocasión escribo el código para ver si tiene fallas. Saludos y buen día.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 25 de Junio de 2011, 00:26:53
Seria bueno que nos muestres el codigo y el circuito que has realizado, asi podriamos encontrar mejor cual es tu problema.
Título: Re: Comenzando con Mikrobasic
Publicado por: jorge_613 en 25 de Junio de 2011, 03:01:41
Hola muchachos NECESITO que por favor me ayuden con el siguiente codigo
Quiero hacer lo que esta en este video..

NR=1


Pero no se como hacer en MikroBasic, ya que esta en un lenguaje no conozco, si alguien podrai traducirmelo
o indicarme como hacerlo, se lo agradecira :(

Pd: en el adjunto dejo el diseño del video en proteus.


Intente hacerlo de esta manera:
Código: [Seleccionar]
program serie

sub procedure serie()
Usart_Init(9600)
Usart_Write("h")
Usart_Write("o")
Usart_Write("l")
Usart_Write("a")
delay_ms(1000)
end sub

main:

serie()

end.

Pero no me funciono :s
Vean el vídeo pro favor y orientarme, sin mas que decir. gracias.!!
Título: Re: Comenzando con Mikrobasic
Publicado por: DaYeS en 25 de Junio de 2011, 05:22:08
Hola muchachos NECESITO que por favor me ayuden con el siguiente codigo
Quiero hacer lo que esta en este video..
NR=1
Pero no se como hacer en MikroBasic, ya que esta en un lenguaje no conozco, si alguien podrai traducirmelo
o indicarme como hacerlo, se lo agradecira :(
Pd: en el adjunto dejo el diseño del video en proteus.
Intente hacerlo de esta manera:
Pero no me funciono :s
Vean el vídeo pro favor y orientarme, sin mas que decir. gracias.!!

Que bueno el video, yo cuando hago uno va a tirones... será que tengo que ir cambiando la makina????.

Que tal jorge, acabo de ver el video, y creo que hay cosas que las puede evitar, sobre todo si estas empezando, por ejemplo el cristal externo que pone no hace falta, ya que el 16f628a lleva uno interno de 4 Mhz, como el que pone externo, y el programa no se ve que necesite gran precisión, y otra cosa creo que más importante, la que lia para ver los datos del puerto serie, si el proteus ya lo tiene, para que lanza el hiperterminal, crea puertos virtuales....

Todo eso si te das cuenta el proteus lo lleva integrado. El lenguaje en el que lo hace es C, con CCS, la verdad es que es uno de los más utilizados y faciles de aprender...

A lo que vamos, navaismo puso bajo el nombre "Ejemplitos de Microbasic y Proteus" el siguiente código:

Código: [Seleccionar]

program PTOSERIE
DIM DATA AS BYTE                    'VARIABLES DE TRANSMISION Y DEL FOR
MAIN:
TRISB=0
PORTB.3 = 1                        'ENCENDIDO DE UN LED PARA VER QUE FUNCIONA
SOFT_UART_INIT(PORTA,1,2,1200,0)   'CONFUIGRACION COMUNICACION SERIE: PORTA.2=RX; PORTA.1=TX BAUD=T1200
DELAY_MS(1000)                     'PAUSA DE UN SEGUNDO
PORTB.3 = 0                        'APAGO DE LED; FIN DE LA CONFIGURACION
ENVIO:
FOR DATA=0 TO 10
 SOFT_UART_WRITE(DATA)             'ENVIO DE DATOS
 DELAY_MS(1000)
NEXT DATA
FOR DATA=10 TO 0 STEP -1
SOFT_UART_WRITE(DATA)             'ENVIO DE DATOS
 DELAY_MS(1000)
NEXT DATA
GOTO ENVIO                                 'ciclo infinito
END.


Lo único que le tienes que modificar es la velocidad de los datos, creo que ponia 9600, y habilitar la interrupción de datos de puerto serie, en la sección de interrupciones del datasheet del micro viene muy bien explicado, sino soló tienes que preguntar.

Salu2
Título: Re: Comenzando con Mikrobasic
Publicado por: jorge_613 en 25 de Junio de 2011, 12:29:55
Gracias Dayes pro responder, creo que eres el unico que lo hace xDDDDDD

Viendo el codigo que me colocaste la forma entonces de escribir una cadena seria de eesta forma:

Código: [Seleccionar]
program Pserie
DIM DATA AS string[4]                   'VARIABLES DE TRANSMISIÓN Y DEL FOR
MAIN:
TRISB.3=0
PORTB.3 = 1                        'ENCENDIDO DE UN LED PARA VER QUE FUNCIONA
SOFT_UART_INIT(PORTB,1,2,9600,0)   'CONFUIGRACION COMUNICACION SERIE: PORTA.2=RX; PORTA.1=TX BAUD=T1200
DELAY_MS(1000)                     'PAUSA DE UN SEGUNDO
PORTB.3 = 0
                       'APAGO DE LED; FIN DE LA CONFIGURACION
'ENVIO:
DATA="hola"
 SOFT_UART_WRITE(data[0])     'ENVIO DE DATOS
 DELAY_MS(1000)
 SOFT_UART_WRITE(data[1])
 DELAY_MS(1000)
 SOFT_UART_WRITE(data[2])
 DELAY_MS(1000)
 SOFT_UART_WRITE(data[3])
 DELAY_MS(1000)

 DELAY_MS(1000)

'GOTO ENVIO                                 'ciclo infinito
END.

Aun si no encuentro la forma de que me muestre ya sea por el Virtual Terminal o por la Hypeterminal de Windows
la palabra "hola" en este caso.

Buscare sobre las interrupciones, aunque aun no entiendo muy bien de que trata.
Gracias amigo.
Título: Re: Comenzando con Mikrobasic
Publicado por: jorge_613 en 25 de Junio de 2011, 18:22:07
Oye dayes ahora que veo lafuncion
soft_uart_write() es para aquellos pics que no soporten UART o usart
donde se debe congiurar algun pin como rx y tx..
Pero en mi caso no es asi, cua es la libreria que debria utiliza entonces? :S

tratando de usar: usart_write_text("Work")
Tampoco me funciona :S



He podido "enviar"  al puerto virtual la siguiente cadena:

Código: [Seleccionar]
sub procedure escribir()
  'while true
  delay_ms(9000)
  Usart_Write_text("no funciona")   ' Send data via USART
  delay_ms(5000)
    'wend
   end sub
   
main:

Usart_Init(9600)
escribir()

Y se envia, pero aun no encuentro la forma de poder luego mostrarlo ya sea en la
hypeterminal de windows o en la Vterminal :S :(
Título: Re: Comenzando con Mikrobasic
Publicado por: DaYeS en 26 de Junio de 2011, 07:03:47
Que tal Jorge.

La terminal en proteus, si te fijas en las herremientas, por defecto izquierda, tienes "Virtual Instrument mode" donde tienes la virtual terminal.

Código: [Seleccionar]
UART1_Write()

Supongo que es lo que buscas, de todas maneras mikrobasic no lo he utilizado nunca, pero aquí tienes una buena referencia. AQUÍ (http://www.mikroe.com/eng/downloads/get/37/mikrobasic_pic_pro_manual_v101.pdf)

Salu2
Título: Re: Comenzando con Mikrobasic
Publicado por: jorge_613 en 26 de Junio de 2011, 15:41:06
Que tal Jorge.

La terminal en proteus, si te fijas en las herremientas, por defecto izquierda, tienes "Virtual Instrument mode" donde tienes la virtual terminal.

Código: [Seleccionar]
UART1_Write()

Supongo que es lo que buscas, de todas maneras mikrobasic no lo he utilizado nunca, pero aquí tienes una buena referencia. AQUÍ (http://www.mikroe.com/eng/downloads/get/37/mikrobasic_pic_pro_manual_v101.pdf)

Salu2

Gracias Dayes, ha funcionado.. ^^
Bueno ahora ver como coencto todo esto a un celuclar y poder enviar sms
a otro dispositivo celular. gracias. dayes ^^
Título: Re: Comenzando con Mikrobasic
Publicado por: DaYeS en 26 de Junio de 2011, 17:56:35
Gracias Dayes, ha funcionado.. ^^
Bueno ahora ver como coencto todo esto a un celuclar y poder enviar sms
a otro dispositivo celular. gracias. dayes ^^

Me alegro que te haya servido, no se con que celu te vas a conectar, o si es un módulo. Estoy comenzando un proyecto con un módulo GSM que tb me comunico con el mediante hayes (comandos AT). Ya estube trabajando con esto, aasí que espero avanzar rápido, lo digo por si necesitas una mano con tú proyecto/pruebas. Lo malo que lo estoy desarrollando en C, debido a que es gratuito y no quería tener problemas con licencias y esas cosas...

Bueno lo dicho Jorge, para eso estamos en este foro, para echarnos manos, y a ser posible que no sean al cuello, jaja. :D :D :D

Salu2
Título: Re: Comenzando con Mikrobasic
Publicado por: jorge_613 en 26 de Junio de 2011, 18:10:50
Gracias Dayes, ha funcionado.. ^^
Bueno ahora ver como coencto todo esto a un celuclar y poder enviar sms
a otro dispositivo celular. gracias. dayes ^^

Me alegro que te haya servido, no se con que celu te vas a conectar, o si es un módulo. Estoy comenzando un proyecto con un módulo GSM que tb me comunico con el mediante hayes (comandos AT). Ya estube trabajando con esto, aasí que espero avanzar rápido, lo digo por si necesitas una mano con tú proyecto/pruebas. Lo malo que lo estoy desarrollando en C, debido a que es gratuito y no quería tener problemas con licencias y esas cosas...

Bueno lo dicho Jorge, para eso estamos en este foro, para echarnos manos, y a ser posible que no sean al cuello, jaja. :D :D :D

Salu2

Si haré lo mismo que trabajare con comandos AT, ahora mismo tengo un Motorola ZN200 (GSM)  trabaja muy bien con comando AT, EL principal inconvenitne que veo es que tiene puerto Microusb...y bueno yo trabajre con mikrobasic xD.
De seguro ns ayudaremos.
Gracias y Saludos.
Título: Re: Comenzando con Mikrobasic
Publicado por: Goodfrey en 20 de Septiembre de 2011, 10:24:54
Buenas como están todos por acá, les escribo por lo siguiente necesito una rutina de I2C para mikrobasic y el ejemplo que esta en la ayuda no me funciona me da errores de tiempo en el inicio por favor si alguien puede ayudarme me seria de gran ayuda por favor... el código es el siguiente...

program I2C_Simplemain:
    ANSEL  = 0             ' Configure AN pins as digital I/O    ANSELH = 0
    PORTB = 0    TRISB = 0              ' Configure PORTB as output
    I2C1_Init(100000)      ' initialize I2C communication
    I2C1_Start()           ' issue I2C start signal
    I2C1_Wr(0xA2)          ' send byte via I2C (device address + W)
    I2C1_Wr(2)             ' send byte (address of EEPROM location)
    I2C1_Wr(0xAA)          ' send data (data to be written)
    I2C1_Stop()            ' issue I2C stop signal    Delay_100ms()
    I2C1_Start()           ' issue I2C start signal
    I2C1_Wr(0xA2)          ' send byte via I2C  (device address + W)
    I2C1_Wr(2)             ' send byte (data address)
    I2C1_Repeated_Start()  ' issue I2C signal repeated start
    I2C1_Wr(0xA3)          ' send byte (device address + R)
    PORTB = I2C1_Rd(0)     ' Read the data (NO acknowledge)
    I2C1_Stop()            ' issue I2C stop signalend.

y el error que me da esta en la siguiente imagen espero su respuesta... gracias...
Título: Re: Comenzando con Mikrobasic
Publicado por: javirat en 15 de Enero de 2012, 18:42:55
Hola a todos!
Tengo problemas al correr el ejemplo que viene en MikroBasicPro de la pantalla LCD, ya que cuando lo compilo y lo paso a mi micro (uso el BIGPIC5 que viene con el micro 18f8520) no me aparece nada en la pantalla. Es raro porque sólo ese ejemplo no me funciona, cuando por ejemplo pruebo el "Led_blinking" me resulta bien y sin problemas, pero todos los ejemplos que tienen que ver con el uso de la pantalla LCD no funciona.

Este es el codigo que uso, el cual es hecho por Mikroelectronica y como dije anteriormente, viene incluido en la carpeta de ejemplos.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 16 de Enero de 2012, 01:19:26
Probaste cambiando los pines del LCD y encendiendo correctamente los interruptores de habilitacion del LCD y los puretos del PIC que por lo general traen las tarjetas de MikroElectronica
Título: Re: Comenzando con Mikrobasic
Publicado por: deec75 en 19 de Febrero de 2012, 10:18:00
holaaaaa

perdon la ignorancia pero no puedo hacer que el mikrobasic 5.0 me genere archivos .HEX o .ASM despues de compilar el programa.
me queda guardado como .Pbas pero nada mas...

que pasara?

saludos!!

Hola, mira lo que pasa es que estas utilizando la version de prueba y por lo tanto solo puedes escribir unas lineas.Prueba haciendo un programa pequeño y veras que si genera el codigo .Hex (a mi me pasó lo mismo)
Título: Re: Comenzando con Mikrobasic
Publicado por: PEDRO_54K en 29 de Febrero de 2012, 22:44:42
Hola  :) soy nuevo en el foro y en el mundo de los pics, quisiera saber si me podrian ayudar con un problema que tengo al simular un programa en proteus, el problema es que RA4 no enciende y no me explico porque. el codigo en mikrobasic es el siguiente:

Citar
program ejercicio1


main:
'   Main program
trisa=%00000

PORTA.4=1
delay_ms(50)
porta.4=0
delay_ms(50)
porta.3=1
delay_ms(50)
porta.3=0
delay_ms(50)
porta.2=1
delay_ms(50)
porta.2=0
delay_ms(50)
porta.1=1
delay_ms(50)
porta.1=0
delay_ms(50)
porta.0=1
delay_ms(50)
porta.0=0
delay_ms(50)
goto main

end.
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 01 de Marzo de 2012, 12:26:03
RA4 es un pin Colector Abierto. Esto significa que debes conectar una resistencia de pull-up a Vcc, lo cual te permitirá producir el 1 y 0 lógico necesario para salidas TTL.
Título: Re: Comenzando con Mikrobasic
Publicado por: PEDRO_54K en 05 de Marzo de 2012, 19:48:01
RA4 es un pin Colector Abierto. Esto significa que debes conectar una resistencia de pull-up a Vcc, lo cual te permitirá producir el 1 y 0 lógico necesario para salidas TTL.

Funcionó, muchas gracias por la aclaración  :mrgreen:
Título: ayuda con glcd 128x64 y mikrobasic
Publicado por: agustin280 en 15 de Marzo de 2012, 03:01:54
hola amigos del foro, estoy  trabajado con un glcd 128x64 y con el compilador mikrobasic pro for pic, el problema consiste en que no puedo mostrar un valor numerico en el glcd,
ya que necesito mostrar el resultado del conversor AD  en el glcd, pense que era problema de mi conversion y decidi guardar un valor en una variable, para asi cancelar temporalmente el conversor AD y mostrar primero un valor guardado en una variable cualquiera, mi variable la denomine "t" y le cargue un valor de 10, pero a la hora de querer mostrar el nuemro 10 en el glcd solo me salen unos puntos, sinceramente no se si estoy por el camino correcto por eso necesito de su ayuda, ojala pudieran orientarme, de antemano gracias, les dejo mi codigo, un saludo cordial desde mexico.

atte: agustin nieva
Título: Re: Comenzando con Mikrobasic & EasyPIC 7
Publicado por: chapkaPIC en 15 de Marzo de 2012, 13:49:35
Estimados, muy buenas.

No he encontado una consulta similar, por ello la realizo, pido disculpas si ya se hizo, y no la ví, como asimismo si no está realizada en el foro adecuado.

He comprado la EasyPic7 y soy un novato usuario de éste producto y se me presenta una duda, es correcto (según mi interpretación) que todos los pulsadores de los puertos son seteados como Pull-Up ó Pull-Down a la vez, a través del jumper J17?, o sea que si necesito en un trabajo tener entradas como 1 y 0 no me será posible.

Desde ya muchas gracias.
Saludos.
Título: ayuda con glcd 128x64 con mikrobasic
Publicado por: agustin280 en 15 de Marzo de 2012, 16:58:04
hola buen dia, pido disculpas, aqui les dejo mi codigo para ver si me pueden orientar en las visualizasion de una variable que contiene un numero decimal, en el glcd, he intentado pero solo me salen unos puntos en el glcd, no se por donde este mi error, si alguien pudiera ayudarme lo agradeceria por favor, este es mi codigo, el cual en una variable "t" guardo un valor de 10, deseo mostrar ese numero en el glcd, ya que lo que deseo realmente es visualizar el estado del conversor AD, pero priemro necesito empezar por visualizar una variable, de ante mano gracias.
nota: si alguien se pregunta por que coloco el numero 48 en la instruccion glcd_write_data, es por que lei que para mostrar un valor en ASCII se neceita escribir el numero 48+(la variable), no se si estoy en lo correcto, agradeceria su ayuda.



program new_example_glcd_16f877a
' Declarations section
dim GLCD_DataPORT as byte at PORTD
dim GLCD_CS1 as sbit at RC0_bit ' Conexiones del módulo Glcd
GLCD_CS2 as sbit at RC1_bit
GLCD_RS as sbit at RC2_bit
GLCD_RW as sbit at RC3_bit
GLCD_EN as sbit at RC4_bit
GLCD_RST as sbit at RC5_bit

dim GLCD_CS1_Direction as sbit at TRISC0_bit
GLCD_CS2_Direction as sbit at TRISC1_bit
GLCD_RS_Direction as sbit at TRISC2_bit
GLCD_RW_Direction as sbit at TRISC3_bit
GLCD_EN_Direction as sbit at TRISC4_bit
GLCD_RST_Direction as sbit at TRISC5_bit ' Final de conexiones del módulo Glcd

dim t as byte     'variavle t del tipo byte


main:

INTCON = 0                ' Todas las interrupciones deshabilitadas
ADCON0=%11010001
ADCON1=%00000000
TRISA = 0x00
 PORTA =0
 t= 10
 Glcd_Init()  ' Glcd_Init_EP5
Glcd_Set_Font(@font5x7, 5, 7, 32) ' Seleccionar el tamaño de fuente 5x7
Glcd_Fill(0) ' Borrar el GLCD

Glcd_Write_Text("ING. ELECTRONICA",10,0,1)
Glcd_Write_Text("GLCD Y PANEL TACTIL",10,7,1)

 Glcd_Set_Side(1)
 Glcd_Set_X(10)
 Glcd_Set_Page(4)


 Glcd_Write_data(48+t)
 

end.
 
Título: Re: Comenzando con Mikrobasic & EasyPIC 7
Publicado por: bigluis en 16 de Marzo de 2012, 22:06:22
Estimados, muy buenas.

No he encontado una consulta similar, por ello la realizo, pido disculpas si ya se hizo, y no la ví, como asimismo si no está realizada en el foro adecuado.

He comprado la EasyPic7 y soy un novato usuario de éste producto y se me presenta una duda, es correcto (según mi interpretación) que todos los pulsadores de los puertos son seteados como Pull-Up ó Pull-Down a la vez, a través del jumper J17?, o sea que si necesito en un trabajo tener entradas como 1 y 0 no me será posible.

Desde ya muchas gracias.
Saludos.

No si conectas las entradas de pull-up del EasyPic, pero puedes conectar resitencias externas y dejar desconectadas las resistencias de Pull-up.

Lo otro que podrias hacer es realizar la inversión por software, es decir invertir la entrada que necesites sin necesidad de agregar otras resistencias al circuito.
Título: Re: Comenzando con Mikrobasic
Publicado por: daniel3514 en 19 de Marzo de 2012, 02:15:26
Saludos, la duda es como se configuran en Mikrobasic lo puertos de un pic para que sean TTL, por ejemplo de 16f887, hay algo mas aya del TRIS?? gracias
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 19 de Marzo de 2012, 12:20:26
Eso depende de cada PIC, por ejemplo el PIC16F887 posee ciertos pines que pueden ser utilizados como entradas analógicas o como entradas o salidas para otros módulos. Por lo tanto debes configurar esos pines como entradas digitales. Eso lo logras desactivando los módulos o configurando las entradas para esos módulos.

Debes buscar en la hoja de datos como se configura el comparador analógico y como se configura las entradas analógicas para que funcionen como entradas digitales.

por ejemplo

Código: [Seleccionar]
PORTA = 0     //Limpias todos los valores de PORTA
ANSEL = 0     //Declaras que todas las entradas son digitales
TRISA = 0x0C  //RA3 y RA2 entradas los demás pines salidas.
Título: Re: Comenzando con Mikrobasic
Publicado por: alanfr en 07 de Mayo de 2012, 20:35:09
buenas gente como esta?? che pregunta media boluda que complilador usan?? :oops: :oops:
Título: Re: Comenzando con Mikrobasic
Publicado por: bigluis en 07 de Mayo de 2012, 23:14:17
MikroBasic, MikroC, PicBasicPro, PIC-C de CCS, C18, High-tech C, C30, C32.  :D
Título: Re: Comenzando con Mikrobasic
Publicado por: Gabriel_85 en 11 de Diciembre de 2012, 14:46:02
Hola amigos, soy nuevo en esto de programar en mikrobasic y necesito generar un PWM con TMR0 usando el pic 16f877A, es para comandar una un dispositivo que funciona a 50 Hz.

espero me puedan ayudar gracias...!
Título: Re: Comenzando con Mikrobasic
Publicado por: kamisama en 19 de Abril de 2014, 15:01:23
Hola, estimados:

Me instale el Mikrobasic 3.5 para hacer unas pruebas y el 6 directo de la pagina de Mikro electronica.
El 6 directamente no me genera un COF para poder cargarlo en el ISIS, o sea no sirve
El 3.5 me genera el COF pero algunas lineas de codigo estan desfazadas con respecto a la direccion de programa. Pense que era algo menor y me puse a traducir algo que habia hecho en BASCOM porque BASCOM me ocupa mucha Flash (casi 4k). La cuestion de fondo es que me canse de leer y se complicaba hasta cargar una valor al TIMER1, sin tener que recurrir a los PDF para accesar a la direccion directamente.

En fin, a la par que hacia la traduccion y veia como acomodar todo, hice un par de pruebas, y solo me funciono una. Luego algo supersimple ya no me cargo ni valores en variables (si lo simulo en el simulador incorporado anda, pero en Proteus NO, nunca carga nada en las locaciones de memoria).

Arriba de esto solo tengo los DIM de cada variable y un Symbol y Const pero los deshabilite a ver si era eso y nada.
En este ejemplo T_ON nunca se carga con nada, el LCD si me tira el dato y el led cambia de estado, hasta que se inicializa el timer y obviamente como no carga valores se queda chimuelo y me salen mensajes de Proteus variables.

Me da bronca porque perdi casi 2 dias con esto y algo basico no lo simula. Espero sus opiniones o consejos, saludos. Me baje tambien el COFMaker pero me parecio muy enredado y lo desinstale.

Main program
    T_on = 10
    T_off = 50
    DDRC=%11111111
    Lcd_Init()                        ' Initialize LCD
    Lcd_Cmd(_LCD_CLEAR)               ' Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF)          ' Cursor off
    led_ton=1
    LCD_Out(1,2,"Hello World 04")                 ' Write text in first row
    Delay_ms(1000)
    led_ton=0

    inicializar
    inittimer1
end.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 22 de Agosto de 2016, 12:46:28
buenos dias amigos............estoy comenzando en este programa ( MikroBasic) comenze con cosas sensillas y me fue bien pero al entrar en el tema de los TMRX jajaj se me trancoel serrucho, probe con un rrigrama de ejemplo que esta en el mismo programa, lo modifique para que funcionara con el pic qe me interesa usar el 18F2K20 y no funciona.....he revisado y nada el TMR0 no funciona.........espero me ayuden........a salir de mi ignorancia jajajajajprogram TMR0
' *
' * Project name:
'     Timer0_Interrupt (Using Timer0 to obtain interrupts)
' * Copyright:
'     (c) Mikroelektronika, 2008.
' * Revision History:
'     20081218:
'       - initial release
' * Description:
'     This code demonstrates how to use Timer0 and it"s interrupt.
'     Program toggles LEDs on PORTB.
' * Test configuration:
'     MCU:             PIC18F87J60
'     Dev.Board:       LV18FJ
'     Oscillator:      HS, 25.0000 MHz
'     Ext. Modules:    -
'     SW:              mikroBasic PRO for PIC
' * NOTES:
'     - Turn on diodes on PORTB.
' *
dim counter as word
dim Tem as byte

sub procedure Interrupt()
  if (TMR0IF_bit <> 0) then
    Inc(counter)                ' Increment value of counter on every interrupt
    TMR0L  = 96
    TMR0IF_bit = 0              ' clear TMR0IF
  end if
end sub

main:
  ' CMCON  = CMCON or 0x07        ' turn off comparators
  ' ADCON1 = ADCON1 or 0x0F       ' turn off analog inputs

  counter = 0                   ' Initialize counter
  TRISB = 0                     ' PORTB is output
  PORTB = 0xFF                  ' Initialize PORTB

  T0CON  = %10000000            ' 0xC4  Set TMR0 in 8bit mode, assign prescaler to TMR0
  INTCON = %11100000            ' 0xC0 Set GIE, PEIE
  TMR0IE_bit = 1                ' Enable TMRO interrupt
  PIE1.TMR1IE = 1
  while TRUE                   ' endless loop
    if (counter > 1250) then
      PORTB = not PORTB         ' Toggle PORTB LEDs
      counter = 0               ' Reset counter
    end if
  wend
end.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 23 de Agosto de 2016, 15:12:25
Cambie de PIC y pasa lo mismo y consegui este otro programa en una version 7.0.0.2 de Mikrobasic y lo revise y ajuste y quedo asi el programa


' *
' * Project name
'     TMR0 (Simple 'Hello World' demonstration of interrupt handling)
' * Copyright:
'     (c) mikroElektronika, 2008
' * Revision History:
'     20080225:
'       - initial release.
' * Description
'     This code demonstrates using interrupts and TMR2. Program toggles LEDs on
'     PORTB and PORTD each second.
' * Test configuration
'     MCU:            P16F887
'     Dev.Board:      EasyPIC5
'     Oscillator:     HS, 08.0000 MHz
'     Ext. Modules:   -
'     SW:             mikroBasic v7.1
' * NOTES
'     None.
' *

program TMR0

dim cnt as word

sub procedure interrupt
  Inc(cnt)                ' Increment value of cnt on every interrupt
  TMR0   = 96
  INTCON = %11100000      ' $20 Set T0IE, clear T0IF
end sub

main:
  OPTION_REG = %10000000  ' $84 Assign prescaler to TMR0
  ANSEL  = 0              ' Configure AN pins as digital I/O
  ANSELH = 0
  TRISB = 0               ' PORTB is output
  PORTB = $FF             ' Initialize PORTB
  TMR0  = 96              ' Timer0 initial value
  INTCON = %11100000      ' $A0 Enable TMRO interrupt
  cnt = 0                 ' Initialize cnt

  while TRUE
    if (cnt = 400) then
      PORTB = not PORTB      ' Toggle PORTB LEDs
      cnt = 0             ' Reset cnt
    end if
  wend
end.

ejecute la depuracion en Mikrobasic y solo veo el ultmo ciclo while funcionar nada mas
pero por casualidad lo simule en Proteus.........y si funciona................entonces por que esto
no se ve funcionar al depurarse en MikroBasic...............estoy todo confundido amigos
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 03 de Septiembre de 2016, 03:57:03
buenas noches amigos tengo un problema...............tengo el mikrobasic 7.0.02, he simulado en proteus teclado 4X4, ADC, LED, pero no he poido simular entradas de pic.....osea pulsadores, la libreria BOTTON.uso un pic 16F887............tengo windows XP...... el codigo es este

program Pulsador

main:

    TRISB = $FF             ' Configuración de los Puertos
    TRISC = $00
    PORTC = $00

Pulsadores:
    If PORTB.0 = 1 Then     ' Verificamos el estado del pulsador.
       delay_ms(10)         ' Hace una pausa de 50 milisegundos.
       If PORTB.0 = 1 Then  ' Verificamos el estado del pulsador.
          PORTC.0 = 1       ' Enciende el Led D1, conectado en RC0
          delay_ms(200)         ' Hace una pausa de 50 milisegundos.
          'PORTC.0 = 0       ' Enciende el Led D1, conectado en RC0
       End If               '
    End If
    ' PORTC = $00
    NOP
GoTo Pulsadores             ' Salta a la etiqueta "Pulsadores"
end.

en modo de depuracion del MKB funciona perfecto pero en proteus.........nada de pulsadores....
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 01 de Octubre de 2016, 01:12:16
amigos.................tengo un problemita.............tengo ya como 2 meses aprendiendo Mikrobasic pro ver 6.6.2 he aprendido muchas cosas y es muy simple hacer muchas cosas que en asm requieren de mucho trabajo............mi problema es el siguiente estoy trabajando con el 18f25K20, escribi un programa para usar lcd 12x2 trabajan todos los programas y el LCD trabaja hasta 16 Mhz del micro por cuando habilito el PLL no se ve la LCD y he hecho pruebas y todo funciona pero no se ve la LCD.

 Osea la LCD funciona has la frecuencia de los 16 mhz del pic...............pues recierden que activando el pll del pic se multiplica internamente la frecuencia por 4 osea de 16mhz con el pll se comvierte en 64 mhz y necesito esa precuencia por que necesito generar un tren de pulsos ajustables que se generan con TMR0 y el TMR1..................gracias de antemano
Título: Re:Comenzando con Mikrobasic
Publicado por: KILLERJC en 01 de Octubre de 2016, 11:08:11
Osea la LCD funciona has la frecuencia de los 16 mhz del pic...............pues recierden que activando el pll del pic se multiplica internamente la frecuencia por 4 osea de 16mhz con el pll se comvierte en 64 mhz y necesito esa precuencia por que necesito generar un tren de pulsos ajustables que se generan con TMR0 y el TMR1..................gracias de antemano

Entonces quiere decir que cuando lo subiste a 64Mhz, algun tiempo no estas respetando, los delays obviamente que van a ser los mismos, pero tal ves algo como activar el pin RS y luego activar otra señal (como E) necesita un mayor tiempo que antes no estaba contemplado por que era muy pequeño para 16Mhz. Te sugiero que revises el datasheet del dirver del LCD como un ( HD44780 ) donde tenes una tabla de tiempo a respetar y una imagen de las señales.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 01 de Octubre de 2016, 17:33:28
Buenas tardes.............te explico uso la libreria del LCD en modo de 4 bir del MikroBasic, por lo tanto ajusta el automaticamente esos tiempo, la otra libreria que uso es Botton, para el uso de pulsadores para los  menu, no uso delays pues la librerias se encargan de eso, el pin de reset del micro lo active y desactive pero todo igual he pensado en de repente hacer un reajuste en la libreria del LCD pero no se su formato ni donde encontrarla, pues quisas hay que modificar lo retardos y necesito el procesador a 64 Mhz
Pense inclusive usar la tecnica de usar la pantalla con 3 pines y asi controlar los tiempo necesarios para que funcione la LCD a esa frecuencia................tienes informacion como hacer eso con 3 pines??.............lei hace un tiempo eso pero no encuentro en que lugar fue..............usan un registro de desplazamiento si mas no me equivoco............
Título: Re:Comenzando con Mikrobasic
Publicado por: KILLERJC en 01 de Octubre de 2016, 19:14:08
Citar
Buenas tardes.............te explico uso la libreria del LCD en modo de 4 bir del MikroBasic, por lo tanto ajusta el automaticamente esos tiempo, la otra libreria que uso es Botton, para el uso de pulsadores para los  menu, no uso delays pues la librerias se encargan de eso, el pin de reset del micro lo active y desactive pero todo igual he pensado en de repente hacer un reajuste en la libreria del LCD pero no se su formato ni donde encontrarla, pues quisas hay que modificar lo retardos y necesito el procesador a 64 Mhz

Crei que tenias una libreria creada por vos. Por eso te decia que tengas en cuenta eso, si estas usando la de MikroBasic no se decirte si es que posee una limitacion o no en velocidad.

Citar
Pense inclusive usar la tecnica de usar la pantalla con 3 pines y asi controlar los tiempo necesarios para que funcione la LCD a esa frecuencia................tienes informacion como hacer eso con 3 pines??.............lei hace un tiempo eso pero no encuentro en que lugar fue..............usan un registro de desplazamiento si mas no me equivoco............

Si con un registro de desplazamiento, y usando el SPI o 3 pins y simulando un SPI por software. En ves de enviar los datos de forma paralela, lo estas enviando de forma serial y luego con el registro de desplazamiento lo pasas a "paralelo" de nuevo. Librerias de eso no tengo. Pero si tuvieras una libreria a codigo abierto simplemente se cambiaria la funcion que envia los datos que en ves de actuar sobre los pines, cargue el valor en el SPI. Pero obviamente esto es para el caso que tengas una libreria a codigo abierto, realizada por vos mismo, o por ultima conseguir ya una libreria realizada para que funcione de esta forma.

Desconosco si ya MikroBasic tiene incorporada la misma. Ya que no trabajo con esta.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 02 de Octubre de 2016, 00:49:09
haaaaa.........buen entre aqui por que decia comenzando con mikrobasic...............crei que tenian una idea mas clara o mas experiencia en estos menesteres........... :shock:
Título: Re:Comenzando con Mikrobasic
Publicado por: KILLERJC en 02 de Octubre de 2016, 02:12:07
haaaaa.........buen entre aqui por que decia comenzando con mikrobasic...............crei que tenian una idea mas clara o mas experiencia en estos menesteres........... :shock:

Fue un error mio, el suponer que tenias una libreria creada por vos mismo, por eso conteste de la forma que lo hice. Diciendo que agregues mas tiempo. Que a pesar de no usar basic, el problema viene por ahi, por lo que parece.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 02 de Octubre de 2016, 11:44:38
Ok es que pense que conocian algun metodo o truco para superar este problema
Título: Re:Comenzando con Mikrobasic
Publicado por: Stban en 02 de Octubre de 2016, 13:16:14
Hola,

aportando un poco, Mikrobasic debe tener una instrucción que permite ajustar los tiempos de envio de datos de instrucción y datos.
Algo como esto:
LCD_INSTRUCTIONUS 2000      'the time of delay of instruction in microseconds (us)

LCD_DATAUS 50                        'the time of delay of data in microseconds

Yo uso PBP y Proton IDE y tiene esos comandos, de hecho asi resolví un problema que tuve en la comunicación USB de un PIC18F4550 con la PC.

Saludos
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 03 de Octubre de 2016, 18:04:39
mil gracias amigo. :-/ :-/ ((:-)) ((:-)).........ya me pongo a investigar esos comandos....................por casualidad sabes como comunicarte con 3 pines.............a un LCD con MikroBasic?????
Título: Re:Comenzando con Mikrobasic
Publicado por: Stban en 03 de Octubre de 2016, 21:44:39
Parece que ya existe una libreria, según esto, solo espero que sea compatible con el software que usas: http://download.mikroe.com/documents/compilers/mikrobasic/pic/help/spi_lcd_library.htm

Saludos
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 04 de Octubre de 2016, 00:54:31
Amigo  Stban probe los comandos que dijiste y me dio un error.........
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 12 de Octubre de 2016, 00:47:22
Yo de nuevo................estoy probando el uso del TMR0,,,,,,,,,,,me tope con un problema aun siguendo las recomendacion de que al leer debe leerse primero TMR0L y luego TMR0H................y para escribir se debe escribir primero en TMR0H y luego en TMR0L.....................no logro escribir en TMR0H pero si en el TMR0L.................aqui esta el programa use un contador de 16 bit y utilice Cont_H para ver si el valor alto se le va a cargar al TMR0H....................y nada............

' Declarations section

dim Cont_H as byte
dim txt as char[7]
dim Conteo as word

sub procedure interrupt

  TMR0H = Hi(Conteo) ' Conteo
  TMR0L = Lo(Conteo) ' Conteo
  INTCON.TMR0IF = 0                ' 0xA0 Enable TMRO interrupt 10100000
  PORTC.0 = 1
end sub

main:
  oldstate_al = 0
  oldstate_bl = 0
  oldstate_ah = 0
  oldstate_bh = 0
  ANSEL  = 0                    ' Configure AN pins as digital I/O
  ANSELH = 0
  TRISB = $F0                         ' Configuracion del PORTB
  PORTB = $0F
  TRISC = 0                     ' PORTC is output
  PORTC = 0                     ' Initialize PORTB
  Conteo = $0000
  ' INTCON = %11100000            ' 0xA0 Enable TMRO interrupt 10100000
  ' T0CON = %10000000             ' 0xA0 Enable TMRO interrupt 10100000
 
  while TRUE
 
  Cont_H = Hi(Conteo)
  TMR0H = Cont_H
  TMR0L = Lo(Conteo)

  wordTostr(TMR0L, txt)             ' Transform counter value to string
  Lcd_Out(2, 7, txt)             ' Display counter value on LCD

  wordTostr(TMR0H, txt)             ' Transform counter value to string
  Lcd_Out(1, 7, txt)             ' Display counter value on LCD

     Conteo = Conteo + 1
     if Conteo >= $FFFD then
        Conteo = $FFFD

  wend
end.

Desactive la interrupcion del TMR0 para solo ver la carga de los registros de este......pero el alto con carga nada
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 12 de Octubre de 2016, 18:27:39
Si no recuerdo mal el timer0 tiene un bit para seleccionar si trabajará con el registro a 8 o a 16bits, si no lo has tenido en cuenta puedes intentarlo por ese camino. Siempre que he usado el Tmr0 he configurado el bit a mano por lo que no se que modo toma por defecto.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 23 de Octubre de 2016, 13:24:12
REsolvi el problema estaba mal configurado el INTECON..................tengo un problemita ahora, esta relacionado mas con el manejo de las variable y decimales......escribi un programa quesalta 0.1 por paso si se deja presionado por mas de 1 segundo aproximadamente salta 0.5 por paso pero no logro mostrar el valor en la lcd con su decimal...................probe rutinas por alli que usan pero no logro.......creo que no menejo bien los tipor de variable les muestro el programa que logre por fin pero tiene un detalle

program Decimales

dim oldstate_a, oldstate_b as byte
dim TEA, TEB as byte

dim txt as char[7]

dim  RPM as float


  TEA = 0
  TEB = 0
  oldstate_a = 0
  oldstate_b = 0
  ANSEL  = 0                    ' Configura los AN como I/O Digitales
  ANSELH = 0
  TRISB = $F0                   ' Configuracion del PORTB
  PORTB = $0F                   ' Configuracion de salida del PORTB
  TRISC.0 = 0                   ' El Puerto C es Digital
  PORTC.0 = 0                   ' Initialize PORTB
 
  Lcd_Init(PORTC)
  Delay_ms(2)
 
  LCD_Cmd(LCD_CLEAR)            ' lear display
  Delay_ms(2)
 
  LCD_Cmd(LCD_CURSOR_OFF)       ' turn cursor off
  Delay_ms(2)
 
  Lcd_Out(1, 1,"RPM:" )
  Delay_ms(2)

  while TRUE
 
  FloatTostr(RPM, txt)          ' Transforma el Conteo de Cont_L en String
  Lcd_Out(1, 7, txt)            ' Muestra Count_L en el LCD

' Rutina para Subir y bajar el valor de contador

  ' Boton de bajar el valor de las RPM, Si se mantiene pulsada
  ' por mas de un segundo incrementa 0.5 en cada paso

  if Button(PORTB, 4, 1, 1) then
     oldstate_a = 1
     if TEA >= 60 then          ' Si se mantiene pulsado por mas de un segundo
        Delay_ms(300)           ' activa una rutina de Icrementos de 0.5 a la Vez
        RPM = RPM + 0.5
        if RPM >= 80.0 then
           RPM = 80.0
        end if
    else
        Delay_ms(1)
        TEA = TEA + 1
    end if
  end if
  if oldstate_a and Button(PORTB, 4, 1, 0) then
     if TEA <= 59 then          ' Si se suelta el boton antes de segundo
        RPM = RPM + 0.1         ' no hace ninguno incremento
     end if
     if RPM >= 80.0 then
        RPM = 80.0
     end if                     ' Se reinicia la deteccion de tecla pulsada
     TEA = 0
     oldstate_a = 0
  end if

  ' Boton de bajar el valor de las RPM, Si se mantiene pulsada
  ' por mas de un segundo incrementa 0.5 en cada paso

  if Button(PORTB, 5, 1, 1) then
     oldstate_b = 1
     if TEB >= 60 then
        Delay_ms(300)
        RPM = RPM - 0.5
        if RPM <= 0.1 then
           RPM = 0.1
        end if
    else
        Delay_ms(1)
        TEB = TEB + 1
    end if
  end if
  if oldstate_b and Button(PORTB, 5, 1, 0) then
     if TEB <= 59 then
        RPM = RPM - 0.1
     end if
     if RPM <= 0.1 then
        RPM = 0.1
     end if
     TEB = 0
     oldstate_b = 0
  end if

  wend
end.

muestra el valor bien en la LCD pero muestra otros decimales que no me hacen falta por ejemplo 0.00000 o 0.59996 y solo me interesa el entero y un desimal espero una ayuda gracias de antemano          '
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 26 de Octubre de 2016, 06:12:55
Estuve revisando el manual del mikrobasic y no he encontrado nada que permita hacerlo, incluso revisando los foros hay gente que tiene el mismo problema y sin resultados. Té pongo un pequeño código que da formato con un decimal a los datos de tipo float. He intentado realizarlo en mikrobasic pero será que es una versión demo la que tengo y solo me tira errores.
Así que te la pego en versión de mi lenguaje Basic.

'Formateando los datos de tipo Float con 1 decimal
'By COS, Basic PSI
Hseropen 4800  'Abre puerto serie por hardware
main:
   Dim _float As Single  'Declara float
   Dim _txt As String  'Declara cadena
   _float = 0.123  'Asiga valor al float
   _txt = #_float  'Pasa a cadena el float

   Dim x As Byte  'Indice cadena
   Dim flag As Bit  'Control
   x = 0
   flag = 0
   While flag = 0  'Control bucle
      Hserout _txt(x)  'Parte entera al puerto serie
      If _txt(x) = "." Then flag = 1  'Flag de control
      x = x + 1  'Indice cadena
      If flag = 1 Then Hserout _txt(x)  'Parte decimal al puerto serie
   Wend
End

Con un poco más de tiempo se puede realizar una función que incluso permita indicar el numero de decimales que se desea mostrar.
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 26 de Octubre de 2016, 11:13:05
La versión con función y selección de numero de decimales:

'Función que da formato a los datos tipo Float
'By COS, Basic PSI
Hseropen 4800  'Abre puerto serie por hardware
main:
   Dim float As Single  'Declara float
   float = 0.1234  'Asiga valor al float
   Call floatformat(float, 2)  'Pasa a cadena con x decimales
   Hserout floatformat
   WaitMs 10

End                                               
'Da formato a los datos tipo Float
'Entrada: Float y numero de decimales
'Salida: Cadena
Function floatformat(_float As Single, _decimales As Byte) As String
   Dim x As Byte  'Indice cadena
   Dim flag As Bit  'Control
   x = 0
   flag = 0
   floatformat = #_float  'Pasa a cadena
   While flag = 0  'Control bucle
      If floatformat(x) = "." Then flag = 1  'Flag de control
      x = x + 1  'Indice cadena
      If flag = 1 Then
         x = x + _decimales
         floatformat(x) = 0  'Se marca fin de cadena
      Endif
   Wend
End Function 
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 26 de Octubre de 2016, 21:57:48
Si amigo he investigado tambien, y mas o menos encontre algo parecido pero no lo habia probado.......dejame ver ese codigo y te aviso mil gracias por el aporte
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 04 de Diciembre de 2016, 00:39:20
buenas noches amigo traigo otro problemita con esto de los decimales.............el programa que muestro abajo es para mostrar en una LCD las revoluciones de un PAP con una caja de reduccion  tiene un boton para subir y otro para bajar las revoluciones con un paso de 0.1 en el programa uso 2 maneras de manejar los decimales pero ambas no funcionan muy bien en la primera linea del LCD uso una rutina basada en la variable tlong uso 2 enteros y un decimal............pero no se ven los decimales solo el cero, el segundo uso la conversion de floar a string pero despues del punto decimal muestas varios decimales.........pero si se aprecia el salto de 0.1 alguien puede darme una ayudita????

program ArribaAbajo

dim Cont_H, Cont_L, oldstate_a, oldstate_b,TEA, TEB, Ret, SLCD, ch as byte

    txt as char[7]

    VR, Valor as word

    RPM, RPS, FE, RR, NPPG, NPPP as float

    tlong   as  longint

' Configuracion de los pines de LCD
sub procedure Interrupt()
       Cont_H = Hi(VR)          ' Valor alto del TMR0
       TMR0H = Cont_H
       Cont_L = Lo(VR)          ' Valor Bajo del TMR0
       TMR0L = Cont_L
       INTCON.TMR0IF = 0        ' Limpia la bandera de interrupcion del TMR0
       PORTC.0 = 1              ' Activa el Pin C.0 para controlar el PAP
       for Ret = 0 to 3
       next Ret
       PORTC.0 = 0              ' Apaga el Pic C.0 para quenerar un pulso
end sub

main:
' Datos para calcular el valor del TMR0
  FE = 16000000                 ' Frecuencia de trabajo de Entrada
  NPPP = 16                     ' Numero de Pulsos Por Pulso
  NPPG = 200                    ' Numero de Pulsos Por Giro
  RR = 15.3                     ' Relacion de Reduccion
 
' Datos para calcular el valor del TMR0
  TEA = 0
  TEB = 0
  oldstate_a = 0
  oldstate_b = 0
  ANSEL  = 0                    ' Configura los AN como I/O Digitales
  ANSELH = 0
  TRISB = $F0                   ' Configuracion del PORTB
  PORTB = $0F                   ' Configuracion de salida del PORTB
  TRISC.0 = 0                   ' El Puerto C es Digital
  PORTC.0 = 0                   ' Initialize PORTB
  RPM = 0                       ' Valor de inicializacion del TMR0
  INTCON = %11100000            ' Activacion del TMRO
  T0CON = %10001000             ' Configuracion de la entrada del
                                ' TMRO y el PRESCALER (Se desactivo el Pres)
  Lcd_Init(PORTC)
  Delay_ms(2)
 
  LCD_Cmd(LCD_CLEAR)            ' lear display
  Delay_ms(2)
 
  LCD_Cmd(LCD_CURSOR_OFF)       ' turn cursor off
  Delay_ms(2)
 
  Lcd_Out(1, 1,"RPM:" )
  Delay_ms(2)

  while TRUE

  tlong = RPM * 100
     
  ch = (tlong / 1000) mod 10    ' extract 10 digit
  LCD_Chr(1,7,48+ch)            ' write ASCII digit at 2nd row, 9th column

  ch = (tlong / 100) mod 10     ' extract 1 digit
  LCD_Chr_CP(48+ch)             ' write ASCII digit at cursor point

  LCD_Chr_CP(".")

  ch = (tlong / 10) mod 10      ' extract .1 digit
  LCD_Chr_CP(48+ch)             ' write ASCII digit at cursor point

  FloatTostr(RPM, txt)          ' Transforma el Conteo de RPM en String
  Lcd_Out(2, 7, txt)            ' Muestra RPM en el LCD

' Rutina para Subir y bajar el valor de contador
' Boton de bajar el valor de las RPM, Si se mantiene pulsada
' por mas de un segundo incrementa 0.5 en cada paso

  if Button(PORTB, 4, 1, 1) then
     oldstate_a = 1
     if TEA >= 60 then          ' Si se mantiene pulsado por mas de un segundo
        Delay_ms(300)           ' activa una rutina de Icrementos de 0.5 a la Vez
        RPM = RPM + 0.5
        if RPM >= 70.0 then
           RPM = 70.0
        end if
    else
        Delay_ms(1)
        TEA = TEA + 1
    end if
  end if
  if oldstate_a and Button(PORTB, 4, 1, 0) then
     if TEA <= 59 then          ' Si se suelta el boton antes de segundo
        RPM = RPM + 0.1         ' no hace ninguno incremento
     end if
     if RPM >= 70.0 then
        RPM = 70.0
     end if                     ' Se reinicia la deteccion de tecla pulsada
     TEA = 0
     oldstate_a = 0
  end if

' Boton de bajar el valor de las RPM, Si se mantiene pulsada
' por mas de un segundo incrementa 0.5 en cada paso

  if Button(PORTB, 5, 1, 1) then
     oldstate_b = 1
     if TEB >= 60 then
        Delay_ms(300)
        RPM = RPM - 0.5
        if RPM <= 0.1 then
           RPM = 0.1
        end if
    else
        Delay_ms(1)
        TEB = TEB + 1
    end if
  end if
  if oldstate_b and Button(PORTB, 5, 1, 0) then
     if TEB <= 59 then
        RPM = RPM - 0.1
     end if
     if RPM <= 0.1 then
        RPM = 0.1
     end if
     TEB = 0
     oldstate_b = 0
  end if
 
' Calculo de las RPS
 
  RPS = RPM / 60
 
' Calculo del valor del TMR0 para Dividir La Frecuencia
' de salida para el Driver de PAP

  VR = 65536 - ( FE / ( NPPP * NPPG * RPS * RR ))
 
  wend
end.
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 04 de Diciembre de 2016, 21:26:28
¿Qué micro estas usando?.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 05 de Diciembre de 2016, 14:43:43
Huy disculpen uso el 18F25K20.............
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 06 de Diciembre de 2016, 08:33:30
Pues a mi me sale como en la imagen:

Creo que tienes algún error en las funciones del LCD, te recomiendo que hagas pruebas con la rutina de los enteros + decimal fuera del programa.
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 06 de Diciembre de 2016, 10:16:55
Explicame que hciste????
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 06 de Diciembre de 2016, 16:00:08
No he hecho nada, solo la traducción a mi lenguaje que es muy similar al que usas.
Cambie los comandos para el manejo del LCD que son diferentes y pare el TMR0 para acelerar la simulación.
Por lo que se deduce que te fallan las funciones para el control del LCD.

'Program arribaabajo
Include "_Button.bas"
Define SIMULATION_WAITMS_VALUE = 1  'Acelera los delayms
'Configura LCD
Define LCD_BITS = 4  'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTC  'Bus de datos sera el puerto C
Define LCD_DBIT = 0  'Bus de datos seran los 4 bit menos significativos del puerto C
Define LCD_RSREG = PORTC  'Bit de control RS sera del puerto C
Define LCD_RSBIT = 7  'Se usara el RC7 como RS
Define LCD_EREG = PORTC  'Bit de control E sera del puerto C
Define LCD_EBIT = 6  'Se usara el RC6 como E
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comando del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera despues de inicializar el Display.

Dim cont_h As Byte
Dim cont_l As Byte
Dim oldstate_a As Byte
Dim oldstate_b As Byte
Dim tea As Byte
Dim teb As Byte
Dim ret As Byte
Dim slcd As Byte
Dim ch As Byte

'Dim txt As String

Dim vr As Long  'word
Dim valor As Word

Dim rpm As Single
Dim rps As Single
Dim fe As Single
Dim rr As Single
Dim nppg As Single
Dim nppp As Single

Dim tlong As Long

main:
   'Datos para calcular el valor del TMR0
   fe = 16000000  'Frecuencia de trabajo de Entrada
   nppp = 16  'Numero de Pulsos Por Pulso
   nppg = 200  'Numero de Pulsos Por Giro
   rr = 15.3  'Relacion de Reduccion

   'Datos para calcular el valor del TMR0
   tea = 0
   teb = 0
   oldstate_a = 0
   oldstate_b = 0
   AllDigital  'TODAS LAS ENTRADAS COMO DIGITALES
   'ansel = 0  'Configura los AN como I/O Digitales
   'anselh = 0

   TRISB = $f0  'Configuracion del PORTB
   TRISB.4 = 1
   PORTB = $0f  'Configuracion de salida del PORTB
   TRISC.0 = 0  'El Puerto C es Digital
   PORTC.0 = 0  'Initialize PORTB
   rpm = 0  'Valor de inicializacion del TMR0
   'INTCON = %11100000  'Activacion del TMRO
   'T0CON = %10001000  'Configuracion de la entrada del tmro y el prescaler(se desactivo el pres)
   Lcdinit  'lcd_init(PORTC)
   WaitMs 2

   Lcdcmdout LcdClear  'lcd_cmd(lcd_clear)  'lear display
   WaitMs 2

   'lcd_cmd(lcd_cursor_off)  'turn cursor off
   WaitMs 2

   Lcdcmdout LcdLine1Pos(1)
   Lcdout "RPM:"
   WaitMs 2

   Dim _true As Byte

   While _true = _true
      tlong = rpm * 100

      ch = (tlong / 1000) Mod 10  'extract 10 digit
      Dim aux_ch As Byte
      aux_ch = 48 + ch
      
      Lcdcmdout LcdLine1Pos(7)
      Lcdout aux_ch  'write ASCII digit at 2nd row, 9th column

      ch = (tlong / 100) Mod 10  'extract 1 digit
      aux_ch = 48 + ch
      Lcdout aux_ch  'lcd_chr_cp(48 + ch)  'write ASCII digit at cursor point

      Lcdout "."  'lcd_chr_cp(".")

      ch = (tlong / 10) Mod 10  'extract .1 digit
      aux_ch = 48 + ch
      Lcdout aux_ch  'write ASCII digit at cursor point

      Lcdcmdout LcdLine2Pos(7)
      Lcdout #rpm  'lcd_out(2, 7, txt)  'Muestra RPM en el LCD

      'Rutina para Subir y bajar el valor de contador
      'Boton de bajar el valor de las RPM, Si se mantiene pulsada
      'por mas de un segundo incrementa 0.5 en cada paso

      If _button(port_b, 4, 1, 1) > 0 Then
         oldstate_a = 1
         If tea >= 5 Then  'Si se mantiene pulsado por mas de un segundo
            WaitMs 300  'activa una rutina de Icrementos de 0.5 a la Vez
            rpm = rpm + 0.5
            If rpm >= 70.0 Then rpm = 70.0
         Else
            WaitMs 1
            tea = tea + 1
         Endif
      Endif
      If oldstate_a > 0 And _button(port_b, 4, 1, 0) > 0 Then
         If tea <= 59 Then  'Si se suelta el boton antes de segundo
            rpm = rpm + 0.1  'no hace ninguno incremento
         Endif
         If rpm >= 70.0 Then
            rpm = 70.0
         Endif  'Se reinicia la deteccion de tecla pulsada
         tea = 0
         oldstate_a = 0
      Endif

      'Boton de bajar el valor de las RPM, Si se mantiene pulsada
      'por mas de un segundo incrementa 0.5 en cada paso

      If _button(port_b, 5, 1, 1) > 0 Then
         oldstate_b = 1
         If teb >= 60 Then
            WaitMs 300
            rpm = rpm - 0.5
            If rpm <= 0.1 Then
               rpm = 0.1
            Endif
         Else
            WaitMs 1
            teb = teb + 1
         Endif
      Endif
      If oldstate_b > 0 And _button(port_b, 5, 1, 0) > 0 Then
         If teb <= 59 Then
            rpm = rpm - 0.1
         Endif
         If rpm <= 0.1 Then
            rpm = 0.1
         Endif
         teb = 0
         oldstate_b = 0
      Endif

      'Calculo de las RPS

      rps = rpm / 60

      'Calculo del valor del TMR0 para Dividir La Frecuencia
      'de salida para el Driver de PAP

      vr = 65536 - (fe / (nppp * nppg * rps * rr))

   Wend
End                                               
'Configuracion de los pines de LCD
On Low Interrupt
   cont_h = vr.HB  'Valor alto del TMR0
   TMR0H = cont_h
   cont_l = vr.LB  'Valor Bajo del TMR0
   TMR0L = cont_l
   INTCON.TMR0IF = 0  'Limpia la bandera de interrupcion del TMR0
   PORTC.0 = 1  'Activa el Pin C.0 para controlar el PAP
   For ret = 0 To 3
   Next ret
   PORTC.0 = 0  'Apaga el Pic C.0 para quenerar un pulso
Resume
Título: Re:Comenzando con Mikrobasic
Publicado por: akira_ve en 07 de Diciembre de 2016, 00:56:40
ok que lenguaje usas???
Título: Re:Comenzando con Mikrobasic
Publicado por: dogflu66 en 07 de Diciembre de 2016, 05:18:37
Lenguaje Basic PSI (PicSimulatorIde).