TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: navaismo en 06 de Septiembre de 2006, 12:36:25

Título: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 06 de Septiembre de 2006, 12:36:25
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)

           Tambien disponibles en el fabuloso mundo de EL REBUJITO!!! (http://www.elrebujito.es/modules.php?name=Downloads&d_op=viewdownload&cid=33)


GRACIAS SAMSHIEL POR EL INDICE :-/ :-/








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

Prender y apagar Led en PORTA.0 de un 16F84A

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


Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 06 de Septiembre de 2006, 12:43:21
Ahora el Uso del LCD personalizando los puertos que queremos usar en este caso PORTA y PORTB, para dejarlo mas o menos como si fuese el PBP.

Los archivos generados y  la conexion del pic al lcd las dejo en el archivo rar. Notese que es una simulacion basica, para hacer el circuito fisicamente habra que cuidar los capacitores ceramicos y la resistencia que va del pic al LCD


Código: FreeBasic
  1. program LCD
  2.  
  3. 'CONFIGURAMOS COMO VAMOS A SACAR LOS DATOS
  4. ' D7 = PORTA.3
  5. ' D6 = PORTA.2
  6. ' D5 = PORTA.1
  7. ' RS = PORTB.0
  8. ' RW = PORTB.1
  9. ' EN = PORTB.2
  10.  
  11. main:
  12.   Lcd_Config(PORTA,3,2,1,0,PORTB,0,1,2)
  13.   Lcd_Cmd(LCD_CLEAR)
  14.   Lcd_Cmd(LCD_CURSOR_OFF)
  15.   Lcd_Out(1,1,"hola amigos")
  16.   Lcd_Out(2,1," todopic  " )
  17.   DELAY_MS (1000)
  18. goto main
  19. end.

(http://img490.imageshack.us/img490/8219/lcdwa1.jpg)



Facil no?


Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 06 de Septiembre de 2006, 13:05:24
Barriendo el Mensaje sobre el LCD


Bueno seguimos con lo bassico, ahora vamos a barrer el mensaje anterior por el LCD

Código: FreeBasic
  1. program LCD
  2.  
  3. 'CONFIGURAMOS COMO VAMOS A SACAR LOS DATOS
  4. ' D7 = PORTA.3
  5. ' D6 = PORTA.2
  6. ' D5 = PORTA.1
  7. ' RS = PORTB.0
  8. ' RW = PORTB.1
  9. ' EN = PORTB.2
  10.  
  11. dim i as byte
  12.  
  13. main:
  14.   Lcd_Config(PORTA,3,2,1,0,PORTB,0,1,2)
  15.   Lcd_Cmd(LCD_CLEAR)                   ' limpiamos pantalla
  16.   Lcd_Cmd(LCD_CURSOR_OFF)              ' apagamos el cursor
  17.   for i = 0 to 26                      ' comenzamos con el barrido del mensaje
  18.   Lcd_Cmd(Lcd_Shift_Right)
  19.   Lcd_Out(1,16,"hola amigos")
  20.   Lcd_Out(2,16," todopic  " )
  21.   delay_ms(300)
  22.   next i                               ' pausa para volverlo hacer
  23.  delay_ms(1500)
  24. goto main
  25. end.


El diagrama Es el mismo que viene en el archivo Rar del post anterior. Para barrerlo a la inversa  usariamos en lugar de Lcd_Cmd(Lcd_Shift_Right). esta linea Lcd_Cmd(Lcd_Shift_Left)

Ok los dejo. ya se me hace tarde.

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 13:44:17
Hola

Bueno mi ejemplito es mucho mas sencillo que los anteriores, pero como apenas ando arrancando aun me cuesta un poco mientras me acostumbro :), para mi es practicamente un lenguaje nuevo, despues de tanto assembler  :).

bueno al grano, el ejemplo consiste en la intercalación del estado de los leds ubicados en el puertob, por medio de la instrucción not el cual permite una negación lógica de los valores del puerto. el parapadeo se hace cada 0.5 segundos.

aqui el código:
Código: Visual Basic
  1. program luces
  2.  
  3. main:
  4.  
  5.      TRISB=0  'puerto B como salida
  6.     PORTB=0
  7.  
  8.  turn:
  9.      DELAY_MS (500)
  10.      PORTB = NOT PORTB   'invierte el valor de los bits del puerto
  11.     GOTO turn
  12. end.

y aqui el esquema

(http://img68.imageshack.us/img68/1817/lucesqn4.png)


ups. olvide agregar los archivos  :D :D
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 15:52:20
Pues siguiendo con mis pequeños ejemplitos, ahora agrego el de juego de luces para mostrar el manejo de los arrays y del for mirandolo a incremento o decremento. Espero les sea útil  :).

Código:

Código: Visual Basic
  1. program juego_de_luces
  2. dim luces as byte [4]
  3. dim i as byte
  4. luces[0] = %10000001
  5. luces[1] = %01000010
  6. luces[2] = %00100100
  7. luces[3] = %00011000
  8. main:
  9.  
  10.      TRISB=0
  11.      P:   i=0
  12.           for i=0 to 3
  13.           PORTB= luces [i]
  14.           delay_ms (100)    'retardo de .1seg
  15.          next i
  16.           for i=2 to 0 step -1
  17.           PORTB= luces [i]
  18.           delay_ms (100)
  19.           next i
  20.       goto P
  21. end.

el esquema que aplique es el mismo que use en el primer ejemplo.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 06 de Septiembre de 2006, 17:09:09
Lectura simple de un ADC en el LCD

Bueno aqui otro programilla, este si me costo trabajo. :D :D


Código: FreeBasic
  1. program adcMKB
  2.  
  3. dim tiempo  as word             ' variable de almacenamiento del adc
  4.     tiempot as string[5]        ' variable para poder ver en el lcd el resultado
  5.  
  6. main:                           ' canal RA0 como analogico
  7.  ADCON1 = 142                   ' canal de entrada
  8.  TRISA.0 = 1
  9.  
  10.  Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
  11.  Lcd_Cmd(LCD_CURSOR_OFF)
  12.  Lcd_Cmd(LCD_CLEAR)
  13.                                                 ' lectura del adc RA0
  14.  tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
  15.  wordtostr(tiempo,tiempot)
  16.                                                 ' aqui lo desplegamos en el lcd
  17.  lcd_out(1,3,tiempot)
  18.  delay_ms(1000)
  19.  
  20. goto main
  21. end.


(http://img336.imageshack.us/img336/9008/adc1nq9.jpg)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: samshiel_pic en 06 de Septiembre de 2006, 17:58:58
Bueno otro de luces distinto al PAOLA09

Código: Visual Basic
  1. program luz1
  2.  
  3. DIM X AS BYTE
  4. TRISB = 0
  5.  
  6. MAIN:
  7. P:   X=0
  8.      FOR X=0 TO 7
  9.      PORTB.X=1
  10.      DELAY_MS(500)
  11.      NEXT X
  12.  
  13.      FOR X=7 TO 0 STEP -1
  14.      PORTB.X=0
  15.      DELAY_MS(500)
  16.      NEXT X
  17.  
  18.      
  19. GOTO P
  20. END.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 18:04:02
Bueno continuando con los ejemplos, ahora muestro otro sencillo para ejemplizar el uso de los modulos que nos permiten por medio de un programa principal, hacer un llamado a sub procedimientos, algo similar al manejo de las librerias.

en este caso según el estado de un pin en el puerto A se realiza la rutina de parpadeo de todo el puerto B o el juego de luces.

código principal:
Código: Visual Basic
  1. program mezcla_luces
  2.  
  3.  include "luces"            'se asignan los sub procedimientos a aplicar
  4. include "juego_de_luces"
  5. main:
  6.      TRISA=1
  7.      TRISB=0
  8.      PORTB=0
  9.  
  10.  G:  if PORTA=0 then
  11.      turn            'llamado de sub procedimiento
  12.     else
  13.      play
  14.      end if
  15.      goto G
  16. end.

código sub procedimiento parpadeo puerto B:
Código: Visual Basic
  1. module luces
  2.   sub procedure turn ()
  3.  turn:
  4.      PORTB = NOT PORTB   'invierte el valor de los bits del puerto
  5.     DELAY_MS (500)
  6. end sub
  7. end.

código subprocedimiento juego de luces:

Código: Visual Basic
  1. module juego_de_luces
  2.  
  3. sub procedure play ()
  4. dim luces as byte [4]
  5. dim i as byte
  6. luces[0] = %10000001
  7. luces[1] = %01000010
  8. luces[2] = %00100100
  9. luces[3] = %00011000
  10.  
  11.      P:   i=0
  12.           for i=0 to 3
  13.           PORTB= luces [i]
  14.           delay_ms (100)    'retardo de .1seg
  15.          next i
  16.           for i=2 to 0 step -1
  17.           PORTB= luces [i]
  18.           delay_ms (100)
  19.           next i
  20.           PORTB=0
  21.  end sub
  22. end.

el esquema varia en un unico detalle y es el agregar un switch en la entrada del puerto a.
(http://img170.imageshack.us/img170/1782/mezclalucescw5.png)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 06 de Septiembre de 2006, 20:52:50
En este caso mi finalidad es mostrar el uso de los subprocedure dentro de un solo programa haciendo las veces de subrutina, es importante que las variables que se vayan a usar para el procedimiento sean asignadas en el mismo , asi sean globales, para eso aproveche la anidación de sub procedimientos.

el programa se encarga de hacer un conteo de 0 a9 ya sea ascendente o descendente según el estado del puertoA.

aqui el código:

Código: Visual Basic
  1. program contadores
  2.  
  3.  
  4. dim i as byte
  5. dim cont as byte [10]
  6.  
  7. sub procedure asgcont
  8. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  9. cont[1]=%00000110
  10. cont[2]=%01011011
  11. cont[3]=%01001111
  12. cont[4]=%01100110
  13. cont[5]=%01101101
  14. cont[6]=%01111100
  15. cont[7]=%00000111
  16. cont[8]=%01111111
  17. cont[9]=%01100111
  18. end sub
  19.  
  20. sub procedure ascendente
  21. asgcont
  22. P:   i=0
  23.           for i = 0 to 9
  24.             PORTB = cont[i]
  25.             delay_ms (300)
  26.           next i
  27. end sub
  28.  
  29. sub procedure descendente
  30. asgcont
  31. G:  for i = 9 to 0 step -1
  32.           PORTB = cont[i]
  33.            delay_ms (300)
  34.           next i
  35. end sub
  36.  
  37. main:
  38.      TRISA=1
  39.      TRISB=0
  40. C:   if PORTA=0 then
  41.      ascendente
  42.      else
  43.      descendente
  44.      end if
  45.      goto C
  46.  
  47. end.
                                     (http://img56.imageshack.us/img56/2360/contadorgc1.png)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Veguepic en 07 de Septiembre de 2006, 19:44:15
Estoy  :shock: :shock:

Increiblemente facil, solo mirando los ejemplos que han posteado he podido hacer estos dos programas.

Led 1 .- va prendiendo desde rb0 a rb7 y luego los apaga.
Led 2 .- el clasico del auto fantastico usando for

Código: Visual Basic
  1. program LED1
  2.  
  3. TRISB = 0
  4. PORTB = 0
  5.  
  6. MAIN:
  7.  PORTB.0 = 1
  8.  DELAY_MS(500)
  9.  PORTB.1 = 1
  10.  DELAY_MS(500)
  11.  PORTB.2 = 1
  12.  DELAY_MS(500)
  13.  PORTB.3 = 1
  14.  DELAY_MS(500)
  15.  PORTB.4 = 1
  16.  DELAY_MS(500)
  17.  PORTB.5 = 1
  18.  DELAY_MS(500)
  19.  PORTB.6 = 1
  20.  DELAY_MS(500)
  21.  PORTB.7 = 1
  22.  DELAY_MS(500)
  23.  PORTB.0 = 0
  24.  DELAY_MS(500)
  25.  PORTB.1 = 0
  26.  DELAY_MS(500)
  27.  PORTB.2 = 0
  28.  DELAY_MS(500)
  29.  PORTB.3 = 0
  30.  DELAY_MS(500)
  31.  PORTB.4 = 0
  32.  DELAY_MS(500)
  33.  PORTB.5 = 0
  34.  DELAY_MS(500)
  35.  PORTB.6 = 0
  36.  DELAY_MS(500)
  37.  PORTB.7 = 0
  38.  DELAY_MS(500)
  39. GOTO MAIN
  40. END.


Código: Visual Basic
  1. program LED2
  2.  
  3. DIM     I AS BYTE
  4.  
  5. TRISB = 0
  6. PORTB = 0
  7.  
  8. MAIN:
  9.  I = 0
  10.    FOR I = 0 TO 7
  11.      PORTB = 0
  12.      PORTB.I = 1
  13.      DELAY_MS (200)
  14.      NEXT I
  15.  I = 7
  16.    FOR I = 7 TO 0 STEP -1
  17.      PORTB = 0
  18.      PORTB.I = 1
  19.      DELAY_MS (200)
  20.      NEXT I
  21. GOTO MAIN
  22. END.

(http://img458.imageshack.us/img458/765/led1y2ya3.th.jpg) (http://img458.imageshack.us/my.php?image=led1y2ya3.jpg)

Creo que no es necesario comentarlo pues no he usado nada nuevo.

Ya me empieza a gustar esto, cuidense que ya los alcanzo.  :mrgreen: :mrgreen:
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Veguepic en 08 de Septiembre de 2006, 00:30:08
Este es un mensaje que se va desplazando por la pantalla del LCD.

Código: Visual Basic
  1. program LCD2
  2.  
  3. DIM  i as byte
  4.  
  5. main:
  6.   Lcd_Config(PORTB,7,6,5,4,PORTB,0,1,2)
  7.  
  8. Repetir:
  9.   i = 1
  10.   For i = 1 to 16
  11.     Lcd_Cmd(LCD_CLEAR)
  12.     Lcd_Cmd(LCD_CURSOR_OFF)
  13.     Lcd_Out(1,i,"Hola Todopic")
  14.     Lcd_Out(2,i,"Saludos" )
  15.     DELAY_MS (100)
  16.     next i
  17. goto Repetir
  18. end.

(http://img215.imageshack.us/img215/7689/lcd2tc1.th.jpg) (http://img215.imageshack.us/my.php?image=lcd2tc1.jpg)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Veguepic en 08 de Septiembre de 2006, 13:25:41
En este ejemplo se muestran los caracteres ASCII mas usados, usando for

Código: Visual Basic
  1. program LCD3                           'mostrar caracteres ASCII
  2.  
  3. dim i,n,m as byte                      'variables
  4.  
  5. main:
  6.   Lcd_Config(PORTB,3,2,1,0,PORTA,0,1,2)
  7.  
  8. empezar:
  9.   i = 33                               'inicio caracteres ASCII visibles
  10.  
  11. repetir:
  12.   if i < 128 then                      'condicional ultimo caracter a mostrar
  13.    Lcd_Cmd(LCD_CLEAR)
  14.     Lcd_Cmd(LCD_CURSOR_OFF)
  15.     n = 1                              'inicializa n a 1
  16.    m = 1                              'inicializa m a 1
  17.    for m = 1 to 2                     'bucle de las filas
  18.      for n =1 to 16                   'bucle de las columnas
  19.        Lcd_Chr(m, n, i)               'muestra caracter i fila m columna n
  20.        DELAY_MS (50)                  'demora 50 milisegundos
  21.        i = i + 1                      'incremento i
  22.      next n                           'incremento n bucle for
  23.    next m                             'incremento m bucle for
  24.   else                                'caso i > = 128 va a empezar
  25.    goto empezar
  26.   end if
  27. goto repetir
  28. end.

(http://img57.imageshack.us/img57/3821/lcd3hr9.th.jpg) (http://img57.imageshack.us/my.php?image=lcd3hr9.jpg)

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 08 de Septiembre de 2006, 17:09:04
Bueno contunuando con mis contadores, vuelvo a implementar el contador ascendente o descendente según el valor del Puerto A0 , en este caso quise mostrar como es el uso de las interrupción usando la interrupcion de TMR0 y a la vez implemento el uso de los sub procedimientos.

el esquema es el mismo que use en el ejemplo del contador anterior.

código:
Código: Visual Basic
  1. program cont2
  2. dim cont as byte [10]
  3. dim a    as byte
  4. dim b as byte
  5. sub procedure interrupt 'cada 3 veces que se ejecute esta interrupción se procede al incremento
  6. inc (b)
  7.   if b = 3 then
  8.      b= 0
  9.         if PORTA = 0 then
  10.            dec (a)
  11.             if a = -1 then
  12.               a = 9
  13.             end if
  14.         else
  15.           inc (a)
  16.           if a = 10 then
  17.              a = 0
  18.           end if
  19.         end if
  20.   end if
  21. INTCON = $20          ' Set T0IE, claer T0IF
  22. end sub
  23.  
  24. sub procedure asgcont
  25. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  26. cont[1]=%00000110
  27. cont[2]=%01011011
  28. cont[3]=%01001111
  29. cont[4]=%01100110
  30. cont[5]=%01101101
  31. cont[6]=%01111100
  32. cont[7]=%00000111
  33. cont[8]=%01111111
  34. cont[9]=%01100111
  35. end sub
  36.  
  37. main:
  38.   OPTION_REG = $87       ' Assign prescaler to TMR0 escala 1:256
  39.  TRISB  =   0
  40.   PORTB  =   1
  41.   TMR0   =   0
  42.   INTCON = $A0           ' Enable TMRO interrupt
  43.  a = 0
  44.   asgcont
  45.  
  46. P: PORTB = cont[a]
  47.    goto  P
  48. end.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 08:11:36
Hola ahora otro ejemplo de uso del display. Su funcionamiento es el siguiente:



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 ' VALORES DEL 0 AL 9 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=3     'RA0 Y RA1 COMO ENTRADAS
  22.     TRISB=0     'PORTB COMO SALIDAS
  23.     x=0         ' X=0 POR QUE VAMOS A EMPEZAR EN EL CERO
  24.     PORTB = cont[x]  'PONGO EL CERO EN EL DISPLAY
  25. MIRO:if PORTA.0=1 then  'SI PULSAS RA0
  26.        delay_ms(50)  'ESPERA 50ms PARA EVITAR LOS REBOTES
  27.        if PORTA.0=0 then ' Y AHORA ESPERA EL FLANCO DE SUBIDA
  28.           x=x+1    'PARA SUMAR X+1
  29.           if x=10 then    'SI X ES 10
  30.            x=0     'X VALE 0
  31.           end if
  32.         end if
  33.      end if
  34.      
  35.      if PORTA.1=1 then   'IGUAL QUE ARRIBA PERO CON RA1
  36.        delay_ms(50)
  37.         if PORTA.1=0 then
  38.           x=x-1
  39.           if x=-1 then
  40.              x=9
  41.           end if
  42.         end if
  43.      end if
  44.      PORTB = cont[x]'Y DESPUES DE TODO MUESTRO EL NUMERO
  45.     goto MIRO 'VUELTA A MIRAR BOTONES
  46. END.


Espero que todo este bien esplicadito. Pues asi todo bien comentado es como uno se da cuenta bien de las cosas.

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: samshiel_pic en 10 de Septiembre de 2006, 10:54:00
Ahora usando la libreria button hacemos 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)


Código: Visual Basic
  1. program pruebacnlibrarbutton
  2. dim a as byte
  3. dim x as byte
  4. dim y as byte
  5.  
  6. dim cont as byte [10]
  7.  
  8. sub procedure asgcont
  9. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  10. cont[1]=%00000110
  11. cont[2]=%01011011
  12. cont[3]=%01001111
  13. cont[4]=%01100110
  14. cont[5]=%01101101
  15. cont[6]=%01111100
  16. cont[7]=%00000111
  17. cont[8]=%01111111
  18. cont[9]=%01100111
  19. end sub
  20.  
  21. MAIN:
  22. asgcont
  23.    TRISA=3     'RA0 Y RA1 COMO ENTRADAS
  24.   TRISB=0     'PORTB COMO SALIDAS
  25.   x=0         ' X=0 POR QUE VAMOS A EMPEZAR EN EL CERO
  26.   PORTB = cont[x]  'PONGO EL CERO EN EL DISPLAY
  27.  
  28. p: if Button(PORTA,0, 1, 1) then
  29.     a = 255
  30.     end if
  31.     if a and Button(PORTA, 0, 5, 0) then
  32.      x=x+1    'PARA SUMAR X+1
  33.     if x=10 then    'SI X ES 10
  34.        x=0
  35.     end if
  36.     a = 0
  37.    end if
  38.  
  39.    if Button(PORTA, 1, 1, 1) then
  40.    y = 255
  41.    end if
  42.    if y and Button(PORTA, 1, 5, 0) then
  43.       x=x-1
  44.       if x=-1 then
  45.          x=9
  46.       end if
  47.    y = 0
  48.    end if
  49.    PORTB = cont[x]
  50.    goto p
  51. end.


Si alguien sabe otra forma mas sencilla de utilizar el comando button por favor me gustaria que posteara un  ejemplo.
El esquema es el mismo al anterior.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: samshiel_pic en 11 de Septiembre de 2006, 10:56:44
Bueno  siguiendo con mi cabezoneria de exprimir los mismos ejercicios pero utilizando otros comandos  :mrgreen: ahi va otro de contadores en este caso con el uso del comando CASE.

Código: Visual Basic
  1. program display7segcase
  2. DIM CONT AS BYTE
  3. TRISB = 0
  4.  
  5. CONT = 0
  6. ARRIBA:select case CONT
  7.             case 0
  8.             PORTB=%00111111
  9.  
  10.             case 1
  11.             PORTB=%00000110
  12.  
  13.             case 2
  14.             PORTB=%01011011
  15.  
  16.             case 3
  17.             PORTB=%01001111
  18.  
  19.             case 4
  20.             PORTB=%01100110
  21.            
  22.             case 5
  23.             PORTB=%01101101
  24.  
  25.             case 6
  26.             PORTB=%01111100
  27.  
  28.             case 7
  29.             PORTB=%00000111
  30.  
  31.             case 8
  32.             PORTB=%01111111
  33.  
  34.             case 9
  35.             PORTB=%01100111
  36.  
  37.       end select
  38.  
  39.       CONT=CONT+1
  40.       if CONT>9 then
  41.          cont=0
  42.       end if
  43.       DELAY_MS(250)
  44.       goto ARRIBA
  45. end.

(http://img56.imageshack.us/img56/2360/contadorgc1.png)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 12 de Septiembre de 2006, 11:56:33
Hola, bueno este es un ejemplo que hicimos Max y yo con el que por medio de una entrada análoga se controla la velocidad de parapadeo del puerto B. el esquema es el mismo que Max ha usado antes.
 
código:

Código: Visual Basic
  1. program ADCBlink
  2.  
  3. dim n           as byte
  4. dim x           as word
  5. dim tiempo      as word
  6. dim tiempot     as string[5]
  7. dim msj         as char[20]
  8.  
  9. sub procedure adc
  10.     tiempo = ADC_Read(0)
  11.     if tiempo <= 200 then
  12.     x = 1000  n=1
  13.     else
  14.         if (tiempo > 200) AND (tiempo <= 500) then
  15.         x = 500  n=2
  16.         else
  17.             If (tiempo > 500) AND (tiempo <= 1024) then
  18.             x = 250  n=3
  19.             end if
  20.           end if
  21.     end if
  22.  
  23.     select case n
  24.            case 1   msj = "Lento"
  25.            case 2   msj = "Medio"
  26.            case 3   msj = "Rapido"
  27.     end select
  28.   wordtostr(tiempo,tiempot)
  29.   lcd_out(1,5,tiempot)
  30.   lcd_out(2,5,msj)
  31. end sub
  32.  
  33. sub procedure BLINK
  34.     dim j as byte
  35.     dim a as char[3]
  36.     lcd_cmd(lcd_clear)
  37.     wordtostr(x,a)
  38.     lcd_out(1,1,a)
  39.     j=0
  40.        for j=0 to 4
  41.           PORTB = not PORTB
  42.           Vdelay_ms(x)
  43.         next j
  44.  END SUB
  45.  
  46.  main:
  47.         ADCON1 = 142
  48.         TRISA = 1
  49.         TRISB = 0
  50.         TRISD = 0
  51.         PORTB = 0
  52.         Lcd_Config(PORTD,3,2,1,0,PORTD,4,5,6)
  53.         Lcd_Cmd(LCD_CURSOR_OFF)
  54.         Lcd_Cmd(LCD_CLEAR)
  55.         adc
  56.         delay_ms(500)
  57.         BLINK
  58.         delay_ms(1000)
  59.         goto main
  60. end.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: liminix en 29 de Septiembre de 2006, 23:15:23
Pues siguiendo con mis pequeños ejemplitos, ahora agrego el de juego de luces para mostrar el manejo de los arrays y del for mirandolo a incremento o decremento. Espero les sea útil  :).

Código:

Código: Visual Basic
  1. program juego_de_luces
  2. dim luces as byte [4]
  3. dim i as byte
  4. luces[0] = %10000001
  5. luces[1] = %01000010
  6. luces[2] = %00100100
  7. luces[3] = %00011000
  8. main:
  9.  
  10.      TRISB=0
  11.      P:   i=0
  12.           for i=0 to 3
  13.           PORTB= luces [i]
  14.           delay_ms (100)    'retardo de .1seg
  15.          next i
  16.           for i=2 to 0 step -1
  17.           PORTB= luces [i]
  18.           delay_ms (100)
  19.           next i
  20.       goto P
  21. end.

el esquema que aplique es el mismo que use en el primer ejemplo.

HOLA  AMIGUITA  QUE  TAL  SE  ME  ACORRIO  ALGO  AVER  SI  SE PODRIA  MODIFICAR  LOS  TIEMPOS  DE ENCENDIDOS  DE  LEDS
OSEA  LA  FRECUENCIA  CON  QUE  ESTOS  ENCIENDEN EN  TU  PROGRAMA
CON  UNOS  PULSADORES
PARA SUBIR  Y  BAJAR
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 05 de Octubre de 2006, 18:13:21
Que pena escribir tan tarde andaba un poco ocupada con un asusnto familiar. el ejmplo es sencillo lo único que adicione con respecto al anterior fue el uso del Vdelay el cual permite tener retardos con el uso de una variable, contrario a la función delay que solo admite constantes.

He usado los pines de A0 y A1 para incrementar y decrementar respectivamente.

el código:

Código: Visual Basic
  1. program juego_de_luces_inc_dec
  2. dim x as word
  3. dim luces as byte [4]
  4. dim i as byte
  5. luces[0] = %10000001
  6. luces[1] = %01000010
  7. luces[2] = %00100100
  8. luces[3] = %00011000
  9.  
  10. main:
  11.      TRISA=3 'A.0 INC /A.1 DEC
  12.     TRISB=0
  13.      x = 100
  14. P:   if PORTA.0=0 then
  15.         x=x+100
  16.         if x>1000 then
  17.            x=1000
  18.         end if
  19.      else
  20.          if PORTA.1=0 then
  21.            x=x-100
  22.            if x<100 then
  23.               x=100
  24.            end if
  25.          end if
  26.      end if
  27.      i=0
  28.      for i=0 to 3
  29.           PORTB= luces [i]
  30.           Vdelay_ms (x)    'retardo de x seg
  31.     next i
  32.      for i=2 to 0 step -1
  33.           PORTB= luces [i]
  34.           Vdelay_ms (x)
  35.      next i
  36.       goto P
  37. end.

y el esquema:

(http://img245.imageshack.us/img245/989/leddelayfe9.png)

Aun se puede mejorar un poco, solo es una aplicación sencilla.  :)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 24 de Noviembre de 2006, 04:41:38
Otro muy sencillo: Envio de datos byte al puerto Serie

Código: FreeBasic
  1. program PTOSERIE
  2.  
  3. DIM DATA AS BYTE                    'VARIABLES DE TRANSMISION Y DEL FOR
  4.  
  5. MAIN:
  6.  TRISB=0
  7.  PORTB.3 = 1                        'ENCENDIDO DE UN LED PARA VER QUE FUNCIONA
  8.  SOFT_UART_INIT(PORTA,1,2,1200,0)   'CONFUIGRACION COMUNICACION SERIE: PORTA.2=RX; PORTA.1=TX BAUD=T1200
  9.  DELAY_MS(1000)                     'PAUSA DE UN SEGUNDO
  10.  PORTB.3 = 0                        'APAGO DE LED; FIN DE LA CONFIGURACION
  11.  
  12.  ENVIO:
  13.  FOR DATA=0 TO 10
  14.   SOFT_UART_WRITE(DATA)             'ENVIO DE DATOS
  15.   DELAY_MS(1000)
  16.  NEXT DATA
  17.  
  18.  FOR DATA=10 TO 0 STEP -1
  19.   SOFT_UART_WRITE(DATA)             'ENVIO DE DATOS
  20.   DELAY_MS(1000)
  21.  NEXT DATA
  22.  GOTO ENVIO                                 'ciclo infinito
  23. END.

y el diagrama un led a PORTB.3 y el PORTA.2 a la coneccion del RS232 pueden usar cualquiera de los 2 circuitos siguientes:

circuito1 (http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=13389.0;attach=1512;image)
circuito2 (http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=13389.0;attach=1513;image)

ambos estan en el foro tecnico en circuitos de E/S
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: impostor en 06 de Febrero de 2007, 18:15:17
 :-/este es mi aporte para este foro , soy nuevo en el mundo de los pic y es un gran paso para mi.
este es un contador de objetos .........el swiche se cambia por un sensor xxxx que creas apropiado


program displayseg2

dim a as byte
dim b as byte
dim i as byte
dim cont as byte [10]
 dim conta as byte [10]
sub procedure asgcont
cont[0]= %00000000' el valor correspondiente al 0 para el display
cont[1]= %00000001
cont[2]= %00000010
cont[3]= %00000011
cont[4]= %00000100
cont[5]= %00000101
cont[6]= %00000110
cont[7]= %00000111
cont[8]= %00001000
cont[9]= %00001001
end sub
sub procedure asg
conta[0]= %00000000' el valor correspondiente al 0 para el display
conta[1]= %00000001
conta[2]= %00000010
conta[3]= %00000011
conta[4]= %00000100
conta[5]= %00000101
conta[6]= %00000110
conta[7]= %00000111
conta[8]= %00001000
conta[9]= %00001001
end sub
main:
     TRISA=%10000
     TRISB=%0000000
     PORTB=0
     PORTA=0
C:
  if PORTA.4=1 then
     inc(i)
     inc(a)
         if i>=10 then
      i=0
      end if
      if a>=10 then
      inc(b)
      a=0
       end if
      if b>=10 then
      b=0
       end if
      goto roro
        end if

 roro:
      asgcont
      DELAY_MS (20)
      PORTB = cont
      DELAY_MS (20)
      goto n

 n:

      asg
      DELAY_MS (20)
      PORTA = conta
      DELAY_MS (20)
      goto c

 end.

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Dani27v en 10 de Febrero de 2007, 18:23:11
Alguien puede postear un ejemplo de algún temporizador?? Estoy haciendome un lio con lo del timer, y aún no lo acabo de entender al 100% un saludo y gracias por anticipado.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: impostor en 06 de Marzo de 2007, 17:14:26
CON UNA ENTRADA ANALOGICA (UN POTENCIOMETRO) EN RA2/AN2/VREF-, REPRESENTO UNA VARIACION DE VOLTAGE DE 0 A 5V. ESTA VARIACION SE VE EN EL PUERTO D (EN BINARIO)................. VISUALIZO EL VOLTAGE REFRENCIADO EN AN2 POR EL  PUERTO D

program ADC
TRISA=%11111111
TRISD=%00000000
ADCON0=%11010001
LOOP:
ADCON0.2=1
WAIT:
DELAY_MS(5)
IF ADCON0.2=1 THEN
GOTO WAIT
END IF
PORTD=ADRESH
GOTO LOOP
END.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: mariano_pic en 08 de Marzo de 2007, 22:47:20
he he he

Código: [Seleccionar]
program Adc_Test
dim temp_res as word

main:
  ADCON1 = $80                   ' Configurar entradas analogas
  TRISA  = $FF                   ' puerta a entrada
  TRISB  = $3F                   ' Pins RB7 y RB6 salida
  TRISD  = $0                    ' PORTD salida

  while TRUE
    temp_res = Adc_Read(2)
    PORTD = temp_res             ' Enviar al puerto d PORTD
    PORTB = word(temp_res >> 2)  ' Enviar los dos bits mas significativos
  wend
end.
.

(http://es.geocities.com/mariano_pic/tmp/hehehe.JPG)


Este ejemplo embia el resultado del adc a un lcd. En ensamblador ocuparia 30 veses mas lineas, aunque menos de 150 bytes en el micro, en mikrobasic se lleva 840 lineas ¡que barbarida!, pero bueno que importa despues que alcanse, que importa de todas formas si nada mas llega asta ahi estaria bien despues que no nos pasemos del limite todo ira bien he-he-he

Código: [Seleccionar]
program AdcLectura
  dim ValorAdc as word
  dim txt as string [5]
  main:

  Trisb=0
  Lcd_init(portb)
  Lcd_Cmd(Lcd_cursor_off)
  ADCON1= %10001110
 
  while (true)
  ValorAdc = Adc_Read(0)
  WordToStr(ValorAdc,txt)
  Lcd_out(1,1,txt)
  delay_ms(500)
 
  wend
  end.

Bueno tambien ahi formas de ahorrar memorias todo es con la metodologia que uno aplique en los codigos
Por ejemplo si colocamos varias funciones basic repetidas, el gasta memoria repitiendo el mismo codigo una y otra ves
podemos crear una funcion o un procedimiento, o solo hago una subrutina.

por ejemplo

Código: [Seleccionar]
    program test
   
    main:
    setbit(trisb,0)
   
    while (true)
   
    setbit(portb,0)
    delay_ms(1000)
    clear_bit(portb,0)
    delay_ms(portb,0)
    wend
   
   
    end.

el anterior programa me genera mas codigo que si lo hago de la siguiente manera

Código: [Seleccionar]
    program test
   
    main:
    setbit(trisb,0)
   
    while (true)
   
    setbit(portb,0)
    gosub retardo
    clear_bit(portb,0)
    gosub retardo
    wend
   
retardo:
    delay_ms(1000)
return
    end.

espero haber contribuido y muchas grasias he-he-he

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: impostor en 15 de Marzo de 2007, 16:46:24
Aqui les dejo este aporte a los que les sirva de algo.
con un potenciometro cambio la velocidad de un motor de cc de 12v..............
espero comentarios, criticas e ideas para mejorarlo

program pwm_adc
dim X as byte
TRISA=%11111111
TRISC=%00000000
ADCON0=%11010001
main:
ADCON0.2=1
IF ADRESH =%00000000
THEN X=5
END IF
IF ADRESH =%00011001
THEN X=25
END IF
IF ADRESH =%00110011
THEN X=50
END IF
IF ADRESH =%01001100
THEN X=75
END IF
IF ADRESH =%01110110
THEN X=100
END IF
IF ADRESH =%01111111
THEN X=125
END IF
IF ADRESH =%10011001
THEN X=150
END IF
IF ADRESH =%10110011
THEN X=175
END IF
IF ADRESH =%11001100
THEN X=200
END IF
IF ADRESH =%11100110
THEN X=225
END IF
IF ADRESH =%11111111
THEN X=255
END IF
PWM_Init(4000)
PWM_Start
PWM_Change_Duty(X)
GOTO MAIN
END.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Mazinyerz en 24 de Abril de 2007, 23:33:03
Amigos estoy trabajando las LCD con Mikrobasic a 8 bits, y me salen una serie de errores cuando utilizo el Procedimiento LCD8_init.
A continuacion les envio el programa.

program temp

'Lee Tres Señales Analogicas y muestra por LCD a 8 bits.

dim PT,Te,PDT as Word
dim Pres,Temp,PreD as string[5]

const Pr="PSI"
const Tem="°F"
const PD="H2O"

main:
Adcon1=%10000100
TrisA=$3F
TrisB=0
TrisC=0

       Lcd8_init (PORTb,PortC)


       lcd8_cmd (lcd_clear)
       lcd8_cmd (Lcd_Blink_Cursor_On)
       lcd8_out (1,1,"PT-TT-PDT")

Convert:

        PT=Adc_read(0)
        Te=Adc_read(1)
       PDT=Adc_read(3)
       
'Se pasan a cadena

         Wordtostr(PT,Pres)
         Wordtostr(Te,Temp)
         Wordtostr(PDT,PreD)
         
         lcd8_out (2,1,Pres)
         lcd8_out (2,6,Pr)
         lcd8_out (2,9,Temp)
         lcd8_out (2,13,Tem)

         goto     Convert
         
end.

Los errores son los siguientes:

18:30 E-4 Syntax error: Expected ',' but ')' found temperatura.pbas
42:1 E-3 Identifier 'end' was not declared temperatura.pbas
42:4 E-4 Syntax error: Expected 'end' but '.' found temperatura.pbas
43:1 E-4 Syntax error: Expected '.' but '' found temperatura.pbas
0:0 E-21 Internal error: E124 temperatura.pbas

Por favor Ayuda...
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: PAOLA09 en 25 de Abril de 2007, 11:49:30
Hola

dejo el ejemplo de manejo de lcd8 aqui para los qeu necesiten mirar solo esa parte. Es importante seguir la misma estructura ya que si no se ahce este dará errores.

Código: [Seleccionar]
program lcdmicroe
main:
dim text as char[20]

TRISA = 0
TRISb = 0
ADCON1 = 6
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.

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Mazinyerz en 25 de Abril de 2007, 12:52:31
Muchas gracias Paola por la Informacion y en cuanto al señor Navaisimo, se que este hilo es para ejemplos pero realize una pregunta de un ejemplo que despues lo voy a dejar aqua. Ademas la idea es como hizo Paola brindar apoyo.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Mazinyerz en 26 de Abril de 2007, 13:50:12
Hola, ya termine el ejemplo que estaba realizando, es muy sencillo ya que voy empezando con Mikrobasic, tengo como 1 semana con este software y he realizado como unos 6 programitas sencillos para familiarizarme. A continuacion envio el que mencione anteriormente donde tenia el problema, ahora ya funcionando. Muchas gracias a Paola por su explicacion del LCD a 8 bits.

El programa Lee tres transmisores y los muestra por el LCD a 8 bits. Primeramente muestra el mensaje y luego saca por pantalla el valor de los tres transmisores con sus unidades Fisicas.

(Claro esta en la practica hay que tomar en cuenta la resolucion del transmisor, en conjunto con la del ADC).Aqua se supone que tienen la misma resolucion...

Gracias.

Código: [Seleccionar]
program temp

'Lee Tres Señales Analogicas y muestra por LCD a 8 bits.

dim PT,Te,PDT as Word
dim Pres,Temp,PreD as string[5]

const Pr="PSI"
const Tem="°F"
const PD="'H2O"

main:
Adcon1=%10000100
TrisA=$3F
TrisB=0
TrisC=0

'en PortB estan los datos del 7 al 0 y en PortC va rs,wr,e
       Lcd8_Init(PORTB, 7, 6, 5, 4, 3, 2, 1, 0, PORTC, 0, 1, 2)
       lcd8_cmd (lcd_clear)
       lcd8_cmd (Lcd_Blink_Cursor_On)
       lcd8_out (1,1,"PT-TT-PDT")

Convert:

        PT=Adc_read(0)
        Te=Adc_read(1)
       PDT=Adc_read(3)
       

'Se pasan a cadena

         Wordtostr(PT,Pres)
         Wordtostr(Te,Temp)
         Wordtostr(PDT,PreD)
         
         DELAY_MS(1000)

         lcd8_cmd (lcd_clear)
         
         lcd8_out (1,1,Pres)
         lcd8_out (1,6,Pr)
         lcd8_out (1,10,Temp)
         lcd8_out (1,15,Tem)
         lcd8_out (2,6,PreD)
         lcd8_out (2,11,PD)
         
         delay_ms (1000)
         
   goto     Convert
         
end.
Título: Contador de 4 digitos multiplexado
Publicado por: mariano_pic en 02 de Julio de 2007, 20:03:03
Aca les dejo un contador de 4 digitos puede servir de base para otras cosas

(http://es.geocities.com/mariano_pic/tmp/conta.gif)

Código: [Seleccionar]

program conter
const segmentos as byte[16] =(%11000000,
                              %11111001,
                              %10100100,
                              %10110000,
                              %10011001,
                              %10010010,
                              %10000010,
                              %11111000,
                              %10000000,
                              %10010000,
                              %10001000,
                              %10000011,
                              %10100111,
                              %10100001,
                              %10000110,
                              %10001110)


sub procedure saca(dim g0,g1,g2,g3 as byte)
     portb=segmentos[g0]
     setbit(porta,0)
     delay_ms(10)
     clearbit(porta,0)
     delay_us(100)

     portb=segmentos[g1]
     setbit(porta,1)
     delay_ms(10)
     clearbit(porta,1)
     delay_us(100)

     portb=segmentos[g2]
     setbit(porta,2)
     delay_ms(10)
     clearbit(porta,2)
     delay_us(100)


     portb=segmentos[g3]
     setbit(porta,3)
     delay_ms(10)
     clearbit(porta,3)
     delay_us(100)
end sub
main:
  dim d3, d2, d1, d0 as byte
  dim I as integer
portb=$ff porta=0 trisb=0 trisa=0  porta=0  d3=8 d2=8 d1=8  d0=8

while true

   for I=0 to 10
   saca(d0,d1,d2,d3)
   next I
   
   d0=d0+1
   if d0=10 then
   d0=0
   d1=d1+1
   if d1=10 then
   d1=0
   d2=d2+1
   if d2=10 then
   d2=0
   d3=d3+1
   if d3=10 then
   d3=0
   end if
   end if
   end if
   end if
   
wend


end.

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: rasec_1984 en 16 de Octubre de 2007, 19:23:05
Hola amigos del foro. en el subforo de preguntas me ayudaron con un problemita que tenia, y el codigo ya esta listo, asi que lo publico aca por si le es util a alguien.

program fasbas3

dim tiempo    as byte
dim medir     as byte
dim atento    as byte
dim angulo    as float
dim x         as float
dim cosfi     as float
dim mostrarw  as word
dim mostrarh  as byte
dim i         as byte
dim cap       as byte

sub procedure interrupt

if portb.6=0 then      'si voltaje y corriente estan en 0
   if portb.7=0 then
      atento=1         'entonces estamos atentos
   goto fin
   end if
end if

if atento=1 then      'si estamos atentos, y hay un cambio en V o I
   TMR0=0              'ponemos TMR0 en cero
   if portb.6=1 then   'si el que subio primero fue la corriente
      cap=1            'entonces es una carga capacitiva
   end if
   atento=0            'ya no estamos atentos
    medir=1            ' y seteamos medir para que a la proxima interrupcion
                       'entre al bloque "if, end if" siguiente
   intcon=%00101000    'habilitamos la interrupcion por desbordamiento TMR0
   goto fin
end if

if medir=1 then       'Si medir esta en 1 a la proxima interrucion
   tiempo=TMR0        'tomamos el tiempo
   if intcon.t0if=1 then  'si se desborda el TMR0
      tiempo=0            'no se produjo interrupcion por V o i, y tiempo=0
   end if
   medir=0
   intcon=%00000000   'desabilitamos interrupcion por TMR0 y por puerto B
end if

fin:

end sub

main:
                     'iniciamos las variables
tiempo=0
medir=0
atento=0
option_reg=%00000100 'divisor de frecuencia en 1:32
cmcon=7              'todas las entradas y salidas como digitales
trisb=%11000000
trisa=%00110000
portb=0
porta=0
i=96                 'iniciamos i=96 para que mida de inmediato

inicio:

if i=96 then
   intcon=%10001000       'activamos interrupcion por cambio del puerto B
end if
if i=100 then             'si se ha mostrado el resultado 100 veces, calulamos denuevo
   intcon=0               'desabilitamostodas las interrupciones
   i=0
   atento=0
   medir=0
   if cap=1 then          'si cap=1, entonces
      portb.4=1           'la carga es capacitiva, encendemos rb4
      portb.5=0           'y apagamos rb5
   else                   'si no
      portb.4=0           'la carga es inductiva, apagamos rb4
      portb.5=1           'y encendemos rb5
   end if
   cap=0                  'iniciamos el indicador de craga "cap"
if porta.5=1 then         'si entrada ra5=1, calculamos el angulo
   porta.6=0
   porta.7=1              'encendemos indicador de que mostramos angulo
   if porta.4=1 then      'si ra4=1, trabajamos con 50Hz
      angulo=5.76*tiempo    'angulo para 50 Hz
   else
      angulo=6.912*tiempo   'angulo para 60 Hz
   end if
   mostrarw=angulo        'transformamos de float a word (sacamos parte entera)
else                      'si no, calculamos el coseno del angulo
   porta.7=0
   porta.6=1              'encendemos indicador de que mostramos el coseno
   if porta.4=1 then      'si ra4=1, trabajamos con 50Hz
      x=0.010053*tiempo    'angulo en radianes para 50 Hz
   else
      x=0.012064*tiempo    'angulo en radianes para 60 Hz
   end if
   cosfi=1000*(1-(1/2)*x*x+(1/24)*x*x*x*x-(1/720)*x*x*x*x*x*x) 'sacamos cos x
   mostrarw=cosfi                      'sacamos parte entera, float -> word
end if
   mostrarw=dec2bcd16(mostrarw) 'transformamos mostrarw de decimal a bcd
   mostrarh=hi(mostrarw) 'guardamos los 8 bits de mas peso de mostrarw
end if

'Mostramos en los displays, multiplexamos.

porta.0=1
porta.1=0
porta.2=0
porta.3=0

portb.0=mostrarw.0
portb.1=mostrarw.1
portb.2=mostrarw.2
portb.3=mostrarw.3

delay_ms(3)

porta.0=0
porta.1=1
porta.2=0
porta.3=0

portb.0=mostrarw.4
portb.1=mostrarw.5
portb.2=mostrarw.6
portb.3=mostrarw.7

delay_ms(3)

porta.0=0
porta.1=0
porta.2=1
portb.3=0

portb.0=mostrarh.0
portb.1=mostrarh.1
portb.2=mostrarh.2
portb.3=mostrarh.3

delay_ms(3)

porta.0=0
porta.1=0
porta.2=0
porta.3=1

portb.0=mostrarh.4
portb.1=mostrarh.5
portb.2=mostrarh.6
portb.3=mostrarh.7

delay_ms(3)

i=i+1
goto inicio
end.


Este es un programa para medir el desfase entre voltaje y corriente en un circuito alterno, o el factor de potencia (el coseno del angulo). ya sea para 50 Hz o 60 Hz. Tambien indica si la carga es capacitiva o inductiva. Los pines se distribuyen de la siguiente manera:

rb0 a rb3 : salida en binario a los display de 7 segmentos (pasa primero por del deco BCD/7 seg)
ra0 a ra3 : destinados a activar cada display en el momento correcto (destinados a multeplexear)
br7: entrada de la señal de voltaje.                   rb6: entrada de la señal de corriente
rb5: enciende led indicando carga capacitiva.     rb4:  enciende led indicando carga inductiva
ra7: enciende el punto del display de la izquierda, necesario para medir fp (Ej: 0.985)
ra6: enciende el punto del segundo display contando desde la izquierda, necesario para medir angulo (Ej: 85.23)
ra5: entrada que escoge si queremos medir angulo o fp (cos del angulo)
ra4: entrada que escoge si queremos medir en 50Hz o en 60Hz

Para el calculo del coseno se ocupo la aproximacion por polinomio de taylor, la cuel es exacta para varios decimales (la funcion cos de microbasic consume muchos recursos). La señal de voltaje y corriente deben entrar de forma cuadrada, pasando primero por comparadores. Se puede usar un trafo de voltaje para disminuir el voltaje, y una resistencia de bajo valor en serie para la corriente, o hacerse un trafo de corriente con un nucleo troidal. Se puede utilizar filtros para eliminar problemas con armonicos, claro que cambiaran la fase de la señal y habra que corregirlo con un circuito o por programa. Eso es todo. Adios. :-) :D :mrgreen: :-/
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: marcelo2112 en 07 de Noviembre de 2007, 14:44:56
Lectura simple de un ADC en el LCD

Bueno aqui otro programilla, este si me costo trabajo. :D :D


Código: FreeBasic
  1. program adcMKB
  2.  
  3. dim tiempo  as word             ' variable de almacenamiento del adc
  4.     tiempot as string[5]        ' variable para poder ver en el lcd el resultado
  5.  
  6. main:                           ' canal RA0 como analogico
  7.  ADCON1 = 142                   ' canal de entrada
  8.  TRISA.0 = 1
  9.  
  10.  Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
  11.  Lcd_Cmd(LCD_CURSOR_OFF)
  12.  Lcd_Cmd(LCD_CLEAR)
  13.                                                 ' lectura del adc RA0
  14.  tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
  15.  wordtostr(tiempo,tiempot)
  16.                                                 ' aqui lo desplegamos en el lcd
  17.  lcd_out(1,3,tiempot)
  18.  delay_ms(1000)
  19.  
  20. goto main
  21. end.


(http://img336.imageshack.us/img336/9008/adc1nq9.jpg)

navaismo porque a 5v de entrada el display indica 1022???que cuenta o calculo se realiza para obtener ese valor y como puedo modificarlo???gracis
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 07 de Noviembre de 2007, 14:52:34
Cuenta 5V igual a 1022 porque es una conversion de ADC de 10BIits -o 1024 Valores- y como no uso voltaje de referencia por defecto toma el valor maximo que es 1024 a 5V y el minimo 0V a 0.

Los ADC's del pIc solo tienen exactitud de 8 y 10Bits y dependiendo de ello y de los voltajes de referencia es como puedes variar esos valores.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: marcelo2112 en 07 de Noviembre de 2007, 16:01:10
OK. Entonces para tomar una medida(en tension), realizar un calculo matematico y expresarlo en el lcd, me puede servir???que tengo que hacer??
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 07 de Noviembre de 2007, 16:58:09
Primero que nada deberias leer mas acerca del uso de los ADCs del PIC busca aqui en el foro sobre esa info. Despues debes entender que cada valor decimal dependiendo de la resolucion que uses, corresponde a un valor del voltaje que estas midiendo con eso ya puedes hacer tus calculos y deplegar lo que quieres.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: rasen en 08 de Julio de 2008, 01:20:46
holas . soy nuevo y quisiera saber como  creo un programa contador con 2 display y que cuente hasta  99
si me pudieran ayudar en algo estaria muy agradecido
desde ya muchas gracias
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: navaismo en 08 de Julio de 2008, 01:33:48
Si estas trabajando con MKB mirate los ejemplos, esta el indice y ahi encontraras el contador o los contadores hechos por PAO
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: sandra en 18 de Octubre de 2008, 17:33:35
Infortunadamente tiene rato que se esta confundiendo la intención del foro, incluso hubo alguien en una ocasión que muy molesto afirmaba que este era un foro donde se solicitaba código a pedido, y alguien se lo costearía  en chinga que quiere decir rápidamente.
Y hasta  a domicilio como aquel tío que me mando un correo solicitándome un código y que le hiciera el favor de enviárselo por correo, por que no encontraba quien se lo quisiera hacer y ni un becito me mando.
Lamento mucho esta situación.
Todos aquí estamos en la mejor disposición de ayudar en la medida  que nuestros conocimientos lo permitan y sobre todo tiempo.
Pero por millonésima ves aquí no se le realizan las labores a nadie,  pueden  postear dudas especificas e informadas ,después de haber consultado el buscador del foro. se que muchos  sienten esto como patada en el hígado, pero espero que entiendan que es por la salud del foro.  que caso tiene responder mil veces lo que se a tratado ya  aquí nadie va a inventar el agua tibia, así que aunque sientan que su pregunta es única e irrepetible la realidad es que alguien mas  ya la  realizo.
Un abraso :g)


Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: danipalma en 25 de Marzo de 2009, 17:35:51
HOLA SOY NUEVO EN ESTO ESTOY HACIENDO UN PROGRAMA EL CUAL SE  DEBE LEER SEÑALES ANALOGICAS DE VARIOS PINES DEL PUERTO A  Y MOSTRARLAS A TRAVEZ DE UNA PANTALLA LCD , LA SELECCION DE Q SEÑAL VOY A MOSTRAR POR LA PANTALLA LCD LA DEBO HACER A TRAVEZ DE PULSADORES COLOCADOS EN EL PUERTO C. POR EJEMPLO

AL ALIMENTAR EL PIN PORTC.0 DEBE MOSTRARME EN LA PANTALLA EL VALOR DE LA SEÑAL ANALOGICA COLOCADA EN PORTA.0
DE IGUAL FORMA CON
PORTC.1 CON PORTA.1
PORTC.2 CON PORTA.2 ASI SUCESIVAMENTE HASTA PORTC.7 CON PORTA.7

AQUI LES ANEXO TANTO EL PROGRAMA HECHO EN MIKROBASIC COMO EL MONTAJE HECHO EN PROTEUS . SI ALGUIEN PUEDE REVISELO  Y DIGAME Q TENGO MALO  :( :( :(
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: septiembre_negro en 25 de Marzo de 2009, 21:09:48
Pues así   echándole una mirada rápida no encuentro que este mal, no miro un error que sea evidente.  así que solo me queda darte dos recomendaciones evita el  uso del goto, mkb es mucho mas que un goto puedes utilizar  sub function y  sub procedure según sea el caso .
Con esto logras que tú programa este mejor estructurado y sea más legible.
En la medida de lo posible monta tu circuito ,  proteus de repente te ase pasar un mal rato algo que no funciona en la simulación cuando lo montas va bien.
Título: AYUDA CON CONVERSION ANALOGO DIGITAL Y LUEGO TRANSMISION DE DATOS POR LA UART
Publicado por: danipalma en 01 de Abril de 2009, 22:56:05
Hola amigo primeramente gracias por estos ejemplitos me han servido de gran ayuda para mi incorporación al mundo de mikrobasic y me han ayudado a realizar mi proyecto de grado, pero me gustaría pedirte un favor necesito digitalizar una señal analógica y luego el valor de ella enviarla a través de un puerto RS232 usando la librería uart, revise tus ejemplos individuales y si pude realizarlos pero no se como hacer para que mi señal tomada del canal analógico luego la pueda enviar por la uart

Una de mis dudas es que la variable de la señal digitalizada es del tipo Word mientras que la que se envía por el uart es tipo byte, si tienen un ejemplo sencillo de esto les estaría muy agradecido, yo uso el PIC 18f4520, pero me sirve un ejemplo con cualquiera solo quiero ver la estructura del programa y bueno no estaría de mas el diagrama realizado en proteus...

Muchas gracias y sigan así, que realmente nos brindan gran ayuda a los amantes de la electrónica
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jaissonc en 02 de Mayo de 2009, 03:22:34
Hola amigos estoy ingrsando al mundo de los PIcs y quiero practicar con este mikrobasic pero tengo un problema al momento de compilar, no me aparece el .hex, e reinstalado el mikrobasic y nada de nada, no se que puede estar pasando o que estoy haciendo mal.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: ASTROCAR en 02 de Mayo de 2009, 07:49:58
hola en cuanto a tu problema da mas detalles o que error te indica el mikrobasic o muestranos una imagen  asi podremos ayudarte en lo posible.

Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: AYUDA CON CONVERSION ANALOGO DIGITAL Y LUEGO TRANSMISION DE DATOS POR LA UART
Publicado por: ASTROCAR en 02 de Mayo de 2009, 08:00:19

HOLA AMIGO PRIMERAMENTE GRACIAS POR ESTOS EJEMPLITOS ME HAN SEERVIDO DE GRAN AYUDA PARA MI INCORPORAMIENTO AL MUNDO DE MIKROBASIC Y ME HAN AYUDADO A REALIZAR MI PROYECTO DE GRADO, PERO ME GUSTARIA PEDIRTE UN FAVOR NECESITO DIGITALIZAR UNA SEÑAL ANALOGICA Y LUEGO EL VALOR DE ELLA ENVIARLA A TRAVEZ DE UN PUERTO RS232 USANDO LA LIBRERIA UART, REVISE TUS EJEMPLOS INDIVIDUALES Y SI PUDE REALIZARLOS PERO NO SE COMO HACER PARA QUE MI SEÑAL TOMADA DEL CANALA ANALOGICO LUEGO LA PUEDA ENVIAR POR LA UART

UNA DE MIS DUDAS ES QUE LA VARIABLE DE LA SEÑAL DIGITALIZADA ES DEL TIPO WORD MIENTRAS QUE LA QUE SE ENVIA POR EL UART ES TIPO BYTE, SI TIENEN UN EJEMPLO SENCILLO DE ESTO LES ESTARIA MUY AGRADECIDO, YO USO EL PIC 18F4520, PERO ME SIRVE UN EJEMPLO CON CUALQUIERA SOLO QUIERO VER LA ESTRUCTURA DEL PROGRAMA Y BUENO NO ESTARIA DE MAS EL DIAGRAMA REALIZADO EN PROTEUS...

MUCHAS GRACIAS Y SIGAN ASI, QUE REALMENTE NOS BRINDAN GRAN AYUDA A LOS AMANTES DE LA ELECTRONICA

Hola buenos dias paisano o paisana ya que nose su sexo segun su nick pero en fin eso no viene al caso. Ahora  antes de entrar en calor sobre el dema de codigo que estas desarrollando te damos la gran bienvenida a la comunidad del foro TODOPIC y espero que te la pasen de lo mejor y que tu aprendisaje dea como siempre he dicho reciproco asi todos aprovecharemos conocimiento, ok, en cuanto a lo de transmitir una variable word via puerto serial que solo permite un byte como bien usted lo indico lo que tienes que hacer es separar la variable word y enviar los byte separados y asi luego ya tendrias lo que quieres solo que en la otra parte donde recibes esos bety tendrias que unirlo si te es necesario de esa manera o tu ves segun tu caso.

Saludos y cualquier cosa danos mas detalles y asi analizamos el caso y vemos posibilidades.

Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jaissonc en 02 de Mayo de 2009, 13:01:07
Bueno amigos sigo con este problema de no poder generar el .hex el.
El codigo qu qiero compilar es este
(http://g.imagehost.org/0394/LED.jpg) (http://g.imagehost.org/view/0394/LED)

al momento que le doy ctrl+f9 parecia q carga una barrita pero aparece en un parpadeo.
haber si me pueden ayudar.
Título: AYUDA CON LA PWM EN MIKROBASIC
Publicado por: danipalma en 01 de Junio de 2009, 23:19:03
Buenas amigos les escribo para preguntarles como podría generar una señal pwm usando el mikrobasic pero de frecuencia variable, por que viendo la ayuda me dice que con la función PWM_INIT(dim freq as longint)  donde freq es la frecuencia de salida pero esta definida como un longint que es una constante.

Por favor si alguien sabe que comando o como hago que mi frecuencia sea variable por favor ayúdenme se los agradecería. De antemano gracias.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 06 de Julio de 2009, 05:30:16
Cerradura electronica.

Esquema

(http://img43.imageshack.us/img43/4784/clave.jpg)

y aqui el codigo
Código: [Seleccionar]
program clave

dim kp,i,j,a as byte    'kp = valor de la tecla presionada
                        'i  = contador de teclas presionadas
                        'j  = contador de asteriscos mostrados
                        'a  = contador de veces acertadas
                        
sub procedure iniciar_Lcd()              'Configuar PORTB como data port
   Lcd_Config(PORTB,7,6,5,4,PORTA,0,1,2)     'y PORTA como control port del LCD
   Lcd_Cmd(LCD_CURSOR_OFF)                   'Apaga Curcor del LCD
end sub

sub procedure Leer_teclado()
   Lcd_Cmd(LCD_SECOND_ROW)                   'Envia el cursor a Lin 2 Col 1
   for j=1 to i
      Lcd_Chr_CP("*")                        'Imprime * al presionar Tecla
   next j
   kp=254
   while kp=254                      'Espera a que se presione una tecla y
      kp=Keypad_Released-2           'guarda el dato al soltarla
   wend
end sub

main:
   Keypad_Init(PORTB)'Inicializa PORTB como controlador del Teclado
   while 1
      iniciar_Lcd
      Lcd_Out_CP("Teclee Clave:")                 'Imprime Clave en 1ra Linea
      if i=4 then                     'Al presionar 4 teclas correctas
         Lcd_Cmd(LCD_SECOND_ROW)      'Evia el cursor en Lin 2 Col 1
         if a=4 then                  'si se aciertan 4 veces
            if PORTA.3=1 then         'si esta activa la opcion renovar clave
               for i=0 to 3
                  iniciar_Lcd                 'se imprimira en linea1
                  Lcd_Out_CP("Nueva Clave:")  'nueva clave:
                  Leer_teclado                'y en linea2 los asteriscos
                  EEprom_write(i,kp)          'se reescribira la clave en EEPROM
               next i
               iniciar_Lcd
               Lcd_Out_CP("Clave Guardada.")  'Luego se Imprimira Clave Guardad.
            else                       'si no se activa la opcion renovar clave
               Lcd_Out_CP("Exito!!")       'se imprimira Exito
            end if
         else                         'de lo contrario se imprimira
            Lcd_Out_CP("Error!!")       'Error
         end if
         delay_ms(1000)           'este retardo es para visualizar lo anterior
         i=0                      'luego se inicializan las variables contadoras
         a=0
         continue
      end if
      Leer_teclado
      if EEprom_read(i)=kp then  'si el dato leido en la EEPROM es igual al tecleado
         a=a+1                   'se incrementara a
      end if
      i=i+1             'incrementa i
      wend
end.

A continuacion dejo los archivos
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 06 de Julio de 2009, 05:33:48
A continuacion dejo los archivos del circuito y programa anterior para descargarlos y los puedan comparar con el nuevo que se muestra arriba.
Título: Re: AYUDA CON CONVERSION ANALOGO DIGITAL Y LUEGO TRANSMISION DE DATOS POR LA UART
Publicado por: Mushito en 06 de Agosto de 2009, 13:08:57
Hola amigo primeramente gracias por estos ejemplitos me han servido de gran ayuda para mi incorporación al mundo de mikrobasic y me han ayudado a realizar mi proyecto de grado, pero me gustaría pedirte un favor necesito digitalizar una señal analógica y luego el valor de ella enviarla a través de un puerto RS232 usando la librería uart, revise tus ejemplos individuales y si pude realizarlos pero no se como hacer para que mi señal tomada del canal analógico luego la pueda enviar por la uart

Una de mis dudas es que la variable de la señal digitalizada es del tipo Word mientras que la que se envía por el uart es tipo byte, si tienen un ejemplo sencillo de esto les estaría muy agradecido, yo uso el PIC 18f4520, pero me sirve un ejemplo con cualquiera solo quiero ver la estructura del programa y bueno no estaría de mas el diagrama realizado en proteus...

Muchas gracias y sigan así, que realmente nos brindan gran ayuda a los amantes de la electrónica
:-/
Yo tambien busco lo mismo, pretendo usar el pic16F876.
Aprobechando el hilo, quiero preguntarles que diferencia hay entre usar el uart y el usart, ya se que uno es asincrono y el otro es sincrono, pero como se aprecia eso en el funcionamiento.

Muchas Gracias
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: beto0350 en 10 de Agosto de 2009, 12:38:18
Hola:
       disculpen la molestia pero no puedo bajar los videos del tutorial, ya que en el rebujito a pesar de buscarlos no los encuentro.
 Alguien prodria explicarme como buscarlos o subirlos a otro server.

Gracias

Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: DarkMikro en 10 de Septiembre de 2009, 23:39:41
Buenas amigos... un saludo desde venezuela, soy nuevo en estos de los pic antes hice algunos proyecto en los picaxe pero me di cuenta que eran muy limitado y casi todo esta definido tienes muy pocas opciones, mi pregunta es: como hacer que la cerradura electronica como la que el amigo "bigluis" posteo los valores de la clave sean introducida por el mismo teclado, y este valor sea almacenado sin tener que sacar el pic para introcudirle la clave de nuevo, ya que tengo que hacer una cerradura pero con un 16f877 integrado con un ISD2560 para decir cuando la clave esta erronea. como ya les comente soy muy Noob en este tema

Gracias Amigos....


 8) 8) 8) 8)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: MLO__ en 10 de Septiembre de 2009, 23:47:03
Hola.

Habría que escribir el valor de la nueva clave en la EEPROM del micro.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 14 de Septiembre de 2009, 02:11:51
Hola.

Habría que escribir el valor de la nueva clave en la EEPROM del micro.

Gracias por la idea MLO, ya lo estaba pensando pero no habia tenido tiempo de resolver el problema. El ejemplo de arriba ya es la modificacion y la siguiente respuesta es la primera forma de hacerlo para los que deseen hacer comparaciones.

Por cierto si no me equivoco lo que DarkMikro quiere hacer es una cerradura electronica activada por voz. supongo que tambien seria util que utilizaras las entradas analogicas del pic y un preamplificador con offset de 2.5V, en vez del ISD2560.

Para resolver el problema de Jaissonc (http://www.todopic.com.ar/foros/index.php?topic=13762.40.msg211331#msg211331) se bebe correr MikroBasic como administrador(en Vista) y el nombre del archivo creado debe ser igual al nombre de la carpeta donde se guarda el proyecto. Yo tambien tuve ese mismo problema y me tomo mas de un dia resolverlo.



Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: DarkMikro en 17 de Septiembre de 2009, 00:32:12
Buena... No bigluis te digo mejor mi idea,  ISD2560 es para que diga si la clave esta errada es un integrado q grava 60 segundo de sonido en 6 bloques de memoria mas o menos. pero la gran interogante es lo del cambio de clave como una caja fuerte electronica que tienes que hacer X cosa para cambiar la clave...

 8) 8) 8) 8)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: diegogprs en 17 de Septiembre de 2009, 04:05:26
Hola estube mirando lo ejemplos  que postearlos y no lo pude acerlo funcionar por los comandos no son compatible con la version que vaje  a ver si alguien me puede dar una mano. La version que tengo es mikrobasic pro 1.45 adjunto una imagen del problema que sale al compilarlo. Saludos
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: diegogprs en 17 de Septiembre de 2009, 04:13:36
la imagen
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: diegogprs en 17 de Septiembre de 2009, 13:25:19
Hola e notado que las librerias de lcd han cambiado mire el manual aca ba un ejemplo, me han surgidos preguntas  como iria  si el display es mas de 2 lineas , si la comunicacion quiero hacelas a 8 bit , etc


program Lcd
' Lcd module connections
dim LCD_RS as sbit at RB4_bit
    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
' End Lcd module connections

dim txt1 as char[16]
    txt2 as char[9]
    txt3 as char[8]
    txt4 as char[7]
    i    as byte                    ' Loop variable

sub procedure Move_Delay()          ' Function used for text moving
  Delay_ms(500)                     ' You can change the moving speed here
end sub
 
main:
  TRISB = 0
  PORTB = 0xFF
  TRISB = 0xFF
  ANSEL  = 0                        ' Configure AN pins as digital I/O
  ANSELH = 0

  txt1 = "mikroElektronika"
  txt2 = "EasyPIC5"
  txt3 = "Lcd4bit"
  txt4 = "example"
 
  Lcd_Init()                        ' Initialize Lcd
  Lcd_Cmd(_LCD_CLEAR)               ' Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF)          ' Cursor off
  Lcd_Out(1,6,txt3)                 ' Write text in first row
  Lcd_Out(2,6,txt4)                 ' Write text in second row
  Delay_ms(2000)
  Lcd_Cmd(_LCD_CLEAR)               ' Clear display

  Lcd_Out(1,1,txt1)                 ' Write text in first row
  Lcd_Out(2,5,txt2)                 ' Write text in second row
  Delay_ms(500)

  ' Moving text
  for i=0 to 3                      ' Move text to the right 4 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
  next i

  while TRUE                        ' Endless loop
    for i=0 to 7                    ' Move text to the left 8 times
      Lcd_Cmd(_LCD_SHIFT_LEFT)
      Move_Delay()
    next i

    for i=0 to 7                    ' Move text to the right 8 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
    next i
  wend
end.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: diegogprs en 17 de Septiembre de 2009, 14:24:09
al final parece que no se podra escribir el display a 8 bit de 20x4 lineas
en la ayuda encontre que fue removido estas librerias


Removed Libraries and Routines
In the new mikroBasic PRO for PIC, you will find that some of the existing libraries are removed. These are :

Bootloader Library (which is now distributed in the Bootloader example folders),
Lcd Custom Library,
Lcd8 Library.
Also, certain library routines are removed :

Lcd_Config, from the Lcd Library,
Man_Receive_Config and Man_Send_Config from the Manchester Code Library,
Ps2_Init, from the PS/2 Library,
Soft_I2C_Config, from the Software I²C Library,
Soft_SPI_Config, from the Software SPI Library.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Moyin en 05 de Octubre de 2009, 12:32:15
Hola "bigluis", tengo algo de tiempo trabajando con MKB pero nunca me había topado con un programa que empleara la sentencia "continue", me parece muy interesante tu programa de la clave pero no alcanzo a antender como trabaja esta sentencia en el programa que construiste, espero puedas comentar acerca de ello.

Saludos :)
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 06 de Octubre de 2009, 13:53:17
Hola "bigluis", tengo algo de tiempo trabajando con MKB pero nunca me había topado con un programa que empleara la sentencia "continue"

Las sentencias continue y break

Sentencia Continue
Se usa continue para "Saltar el Lazo".

En el Lazo for el contador de programa se mueve a la línea donde está el for; Sin cambiar el contador de lazo;
Código: [Seleccionar]
' continue salta aqui
for i = ...
  ...
  continue
  ...
next i

En el Lazo while el contador de programa se mueve a la línea donde está el while (cima del lazo).
Código: [Seleccionar]
' continue salta aquí
while condition
  ...
  continue
  ...
wend

En el Lazo do el contador de programa se mueve a la línea donde está el until (fondo del lazo).
Citar
do
  ...
  continue
  ...
' continue salta aquí
loop until condition

La sentencia break
Algunas veces es necesario terminar la ejecución del lazo estando dentro de él. Al usar break pasas a la siguiente sentencia luego del fin del lazo.

Código: [Seleccionar]
Inicio del Lazo
  ...
  break
  ...
Fin del Lazo
'break salta aquí

Lo anterior solo es una traducción de lo que está en la ayuda de MikroBasic. Ahí podrán encontrar información más detallada acerca de esto.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: klibert en 04 de Diciembre de 2009, 13:58:49
PROGRAMA CONTROL POR ORDENADOR NIVEL INDUSTRIAL para ESTUDIANTES


program PIC_LCD_PC
' CONECCIONE AL LCD
DIM LCD_RS AS SBIT AT RD2_BIT
    LCD_EN AS SBIT AT RD3_BIT
    LCD_D4 AS SBIT AT RD4_BIT
    LCD_D5 AS SBIT AT RD5_BIT
    LCD_D6 AS SBIT AT RD6_BIT
    LCD_D7 AS SBIT AT RD7_BIT

    LCD_RS_Direction as sbit at TRISD2_BIT
    LCD_EN_Direction as sbit at TRISD3_BIT
    LCD_D4_Direction as sbit at TRISD4_BIT
    LCD_D5_Direction as sbit at TRISD5_BIT
    LCD_D6_Direction as sbit at TRISD6_BIT
    LCD_D7_Direction as sbit at TRISD7_BIT
'FIN CONECCIOM LCD

DIM TXT1, TXT2, TXT3, TXT4, TXT5, TXT6, TXT7, TXT8 AS STRING[19]

    TEXTO AS STRING[17]
    UART_RD AS BYTE
    CONT AS BYTE
    ON_L1 AS BYTE

DIM TEXTO1, TEXTO2, TEXTO3, TEXTO4, TEXTO5, TEXTO6, TEXTO7, TEXTO8 AS STRING[43]

DIM    TECLA1, TECLA2, TECLA3, TECLA4, TECLA0 AS BIT
SUB PROCEDURE CLEARSCREEN()
DIM I AS BYTE
    FOR i = 0 TO  190
        UART1_Write(0X08)
    NEXT I
END SUB

SUB PROCEDURE SALTARLINEA()
     UART1_Write(0X0D)
     UART1_Write(0X0A)
END SUB

SUB PROCEDURE MENU()
     UART1_Write(0X0D)
     UART1_Write(0X0A)
     UART1_Write_Text("PRESIONAR UNA TECLA PARA ACTIVAR/DESACTIVAR")
     UART1_Write(0X0D)
     UART1_Write(0X0A)
     SALTARLINEA()
     IF TECLA1=1 THEN
       UART1_Write_Text(TEXTO5)
       ELSE
       UART1_Write_Text(TEXTO1)
     END IF
     UART1_Write(0X0D)
     UART1_Write(0X0A)
     IF TECLA2=1 THEN
       UART1_Write_Text(TEXTO6)
       ELSE
       UART1_Write_Text(TEXTO2)
     END IF
     UART1_Write(0X0D)
     UART1_Write(0X0A)
     IF TECLA3=1 THEN
       UART1_Write_Text(TEXTO7)
       ELSE
       UART1_Write_Text(TEXTO3)
     END IF
     UART1_Write(0X0D)
     UART1_Write(0X0A)
     IF TECLA4=1 THEN
       UART1_Write_Text(TEXTO8)
       ELSE
       UART1_Write_Text(TEXTO4)
     END IF
     UART1_Write(0X0D)
     UART1_Write(0X0A)
END SUB

MAIN:
TRISD = 0
PORTD = 0x00
TRISD = 0x00
TRISC = %10000001
PORTC = 0X00
UART1_INIT(4800)
DELAY_MS(100)

TECLA1=0
TECLA2=0
TECLA3=0
TECLA4=0
TECLA0=0

TXT1="FOCO ACTIVADO"
TXT2="FOCO DESACTIVADO"
TXT3="MOTOR ACTIVADO"
TXT4="MOTOR DESACTIVADO"
TXT5="VALVULA ACTIVADA"
TXT6="VALVULA DESACTIVADA"
TXT7="SISTEMA ACTIVADO"
TXT8="SISTEMA DESACTIVADO"


TEXTO1="TECLA # 1  ---- FOCO DESACTIVADO"
TEXTO2="TECLA # 2  ---- VALVULA DESACTIVADA"
TEXTO3="TECLA # 3  ---- MOTOR DESACTIVADO"
TEXTO4="TECLA # 4  ---- SISTEMA DESACTIVADO"

TEXTO5="TECLA # 1  ---- FOCO ACTIVADO"
TEXTO6="TECLA # 2  ---- VALVULA ACTIVADA"
TEXTO7="TECLA # 3  ---- MOTOR ACTIVADO"
TEXTO8="TECLA # 4  ---- SISTEMA ACTIVADO"

Lcd_init()
LCD_CMD(_LCD_CLEAR)
LCD_CMD(_LCD_CURSOR_OFF)
MENU()
while (TRUE)
                             ' Endless loop
                             
    WHILE PORTC.0 = 1
         PORTC.1 = 1
         LCD_CMD(_LCD_CLEAR)
         Lcd_Out(1,6,"ERROR")
         Lcd_Out(2,1,"ALARMA ACTIVADA")
         DELAY_MS(200)
    WEND
    PORTC.1 = 0

    if (UART1_Data_Ready() <> 0) then      ' If data is received,
      uart_rd = UART1_Read()               '   read the received data,
'---------------------------------------
      IF (UART_RD = "1") THEN
         TECLA1 = NOT TECLA1
         IF  TECLA1=1 THEN
             LCD_CMD(_LCD_CLEAR)
             Lcd_Out(1,1,TXT1)
             SETBIT(PORTC, 2)
             CLEARSCREEN()
             MENU()
         END IF
         IF TECLA1=0 THEN
            LCD_CMD(_LCD_CLEAR)
            Lcd_Out(1,1,TXT2)
            CLEARBIT(PORTC, 2)
             CLEARSCREEN()
             MENU()
         END IF
      END IF
'---------------------------------------
      IF (UART_RD = "2") THEN
         TECLA2 = NOT TECLA2
         IF  TECLA2=1 THEN
             LCD_CMD(_LCD_CLEAR)
             Lcd_Out(1,1,TXT3)
             SETBIT(PORTC, 3)
             CLEARSCREEN()
             MENU()
         END IF
         IF TECLA2=0 THEN
            LCD_CMD(_LCD_CLEAR)
            Lcd_Out(1,1,TXT4)
            CLEARBIT(PORTC, 3)
             CLEARSCREEN()
             MENU()
         END IF
      END IF
'---------------------------------------
'---------------------------------------
      IF (UART_RD = "3") THEN
         TECLA3 = NOT TECLA3
         IF  TECLA3=1 THEN
             LCD_CMD(_LCD_CLEAR)
             Lcd_Out(1,1,TXT5)
             SETBIT(PORTC, 4)
             CLEARSCREEN()
             MENU()
         END IF
         IF TECLA3=0 THEN
            LCD_CMD(_LCD_CLEAR)
            Lcd_Out(1,1,TXT6)
            CLEARBIT(PORTC, 4)
             CLEARSCREEN()
             MENU()
         END IF
      END IF
'---------------------------------------
'---------------------------------------
      IF (UART_RD = "4") THEN
         TECLA4 = NOT TECLA4
         IF  TECLA4=1 THEN
             LCD_CMD(_LCD_CLEAR)
             Lcd_Out(1,1,TXT7)
             SETBIT(PORTC, 5)
             CLEARSCREEN()
             MENU()
         END IF
         IF TECLA4=0 THEN
            LCD_CMD(_LCD_CLEAR)
            Lcd_Out(1,1,TXT8)
            CLEARBIT(PORTC, 5)
             CLEARSCREEN()
             MENU()
         END IF
      END IF
'---------------------------------------
    end if
  wend

end.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: klibert en 04 de Diciembre de 2009, 14:03:49
EL CODIGO ANTERIOR ESTA ECHO EN MIKROBASIC PRO FOR PIC 2009
Título: Re: analogico digital
Publicado por: wicho1991 en 13 de Mayo de 2010, 00:31:59
hola   a  todos   soy  nuevo en esto solo  quiero saber  cual es  el codigo en mickrobasic  para activar  la  entrada  analogica digital  y como  puedo hacer para  convertir el pulso de un microfono
Título: Re: analogico digital
Publicado por: bigluis en 13 de Mayo de 2010, 14:18:24
Tienes que configurar los registros ANSEL y ANSELH para los PIC16 para los PIC18 tienes que configurar los registros ADCON1 segun lo especifique la hoja de datos, luego debes utilizar la funcion ADC_Read(dim channel as byte) en la que mandaras a leer el canal especificado por la misma.

El ejemplo que se encuentra en la ayuda de MikroBasic es el siguiente.
Código: FreeBasic
  1. program ADC_on_LEDs
  2. dim adc_rd as word
  3.  
  4. main:
  5.     ANSEL  = 0x04           ' Configure AN2 pin as analog
  6.     TRISA  = 0xFF           ' PORTA is input
  7.     ANSELH = 0              ' Configure other AN pins as digital I/O
  8.     TRISC  = 0x3F           ' Pins RC7, RC6 are outputs
  9.     TRISB  = 0              ' PORTB is output
  10.  
  11.   while (TRUE)
  12.     adc_rd = ADC_Read(2)    ' get ADC value from 2nd channel
  13.     PORTB = adc_rd          ' display adc_rd[7..0]
  14.     PORTC = Hi(adc_rd)      ' display adc_rd[9..8]
  15.   wend
  16. end.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: NORTEÑO en 09 de Junio de 2010, 10:27:59
Un saludo a todos.
Propongo un ejemplo Facil.
Un pulsador Biestable. Primera pulsacion enciende un led, segunda pulsacion apaga el led.

Mas adelante podriamos complicarlo

RECORDAD EN MIKROBASIC.
Título: Re: Ayuda lectura ADC y leerlo en LCD
Publicado por: Lord_Duran en 04 de Agosto de 2010, 21:33:18
Saludos.

Estoy trabajando en MikroBasic.
Estoy realizando la lectura de variacion de voltaje que llega al AN0 del ADC del PIC877, por esa parte no tengo problemas.
configuré variables de tipo word para guardar lo convertido, de tipo float para operaciones con decimales.
Lo que no se es cómo hacerle para que me muestre solamente 2 decimales despues del punto (ej: 2.35), tambien, además ya como 3 días que estoy tratando de ver la informacion que quiero en la LCD de forma correcta, pero no lo logro, quiero mostrarlo en dos líneas, pero nada, todo se muestra en la línea 1, no pasa a la linea 2 del LCD.

El código es el siguiente:

Código: [Seleccionar]
program EJEM1

Dim LCD_RS As sbit At RB4_bit
Dim LCD_EN As sbit At RB5_bit
Dim LCD_D4 As sbit At RB0_bit
Dim LCD_D5 As sbit At RB1_bit
Dim LCD_D6 As sbit At RB2_bit
Dim LCD_D7 As sbit At RB3_bit

Dim LCD_RS_Direction As sbit At TRISB4_bit
Dim LCD_EN_Direction As sbit At TRISB5_bit
Dim LCD_D4_Direction As sbit At TRISB0_bit
Dim LCD_D5_Direction As sbit At TRISB1_bit
Dim LCD_D6_Direction As sbit At TRISB2_bit
Dim LCD_D7_Direction As sbit At TRISB3_bit
   
Dim dato As word         ' Dato donde se guardara la conversion A/D
Dim datostr As string[4] ' Variable para conversion datos.
Dim voltaje As Float
Dim VoltajeStr As string[4]
Dim datoflt As float

main:  'Programa principal
       TRISB = %00000000
       TRISA = %11111111
       ADCON1 = %10000010
       LCD_Init()
       LCD_Cmd(_LCD_CLEAR)
       LCD_Cmd(_LCD_CURSOR_OFF)
       Delay_ms(500)

    While (true)
       dato = Adc_Read(0) ' Carga el resultado de 10 bits en la variable
       datoflt = dato
       FloatToStr(dato,datostr)
       LCD_Out(1, 1,datostr)
       voltaje = datoflt * 0.0049
       FloatToStr(voltaje,VoltajeStr)
       LCD_Out(2, 1,VoltajeStr)
       Delay_ms(1000)
    Wend
end.

pusiera la imagen de la LCD en simulacion, pero no se cómo poner imágenes ni subir archivos.

Muchas gracias.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: Lord_Duran en 24 de Agosto de 2010, 12:13:04
Saludos, ya solucione el problema, ahora estoy teneiendo problemas con la TX serial (PIC a PC), no logro ahcer que funciones como se debe

Código: [Seleccionar]
program EJEMPLO_SERIAL
'--- Area de declaración:

Dim Datos_RX As Byte[10]    ' Arreglo de variables para almacenar los datos.
  acumulador As Byte        ' Variable para condicional "loop Until..."
           X As Byte        ' Variable para lazo For-Next.
Dim mandar as char[20]

' Configuración de pines de control y datos de la pantalla LCD:

Dim LCD_RS As sbit At RB4_bit
    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

' Fin de la configuración de conexiones



main:                                   '   Programa Principal

  UART1_Init(2400)                      ' Inicializamos el módulo UART a 2400 bps.
  Delay_ms(100)                         ' Pausa de 100 milisegundos para estabilización.

  LCD_Init()                            ' Inicializa la pantalla LCD
  LCD_Cmd(_LCD_CLEAR)                   ' Limpia la pantalla LCD
  LCD_Cmd(_LCD_CURSOR_OFF)              ' Apaga el cursor en la pantalla

  Lcd_Out(1, 1, "Datos: ")              ' Se imprime "Datos: " en la primera línea
                                        ' de la pantalla.

mandar = "ejemploamandar"
                                          ' continúa cargando caracteres.
    For X = 1 To 9                        ' For-Next para enviar los datos desde
                                          ' la primera variable hasta la última cargada.
    UART1_Write(mandar[X])              ' Enviamos el dato cargado en la variable.

    Next X


    Lcd_Out(2, 1, "Mostrando Datos!")     ' Mensaje de estado del Buffer.


    For X = 1 To 9                        ' For-Next para presentar los datos desde
                                          ' la primera variable hasta la última cargada.
    Lcd_Chr(1, 8, mandar[X])            ' Mostramos el equivalente ASCII del valor cargado
                                          ' en la variable "Datos_RX"

    Delay_ms(1000)                        ' Retardo de 1 segundo.

    Next X


    Lcd_Out(2, 1, "      Fin       ")     ' Mensaje de finalización del proceso.

End.

en el LCD muestra como debe ser, pero no logro que se haga la transmision.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: ASTROCAR en 28 de Agosto de 2010, 12:04:24
Hola buenos dias, tengo una duda en MKB, les explico para ver si me hago entender tengo un pic16f877a el cual tengo conectada una lcd 16x2 en dicha lcd quiero mostrar valores que recibo por puerto serial es decir que me lo envio desde la pc y la idea es  mostrar esos valores en la lcd en hex es decir si envio 1E que en la lcd visualice 1E pero ya verdad nose como hacer la transformacion para que la liberia de las lcd me visualice eso yo lo hago pero muestro es el valor en decimal es decir envio 1E y veo 30 que es un valor en decimal como podria verlo en la lcd en hex.

Saludos y espero su valiosa colaboracion.

Atten.
Alexander Santana.
Venezuela-Barcelona
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 30 de Agosto de 2010, 00:02:22
Este compilador no tiene una funcion especial que haga eso (CCS si la tiene), por lo tanto debes crear una rutina para hacerlo.

Puedes utilizar esto

Código: FreeBasic
  1. sub procedure imprime_Hexadecimal(num)
  2.   dim i,nibble_inferior as byte     'declaramos el byte nibble_inferior
  3.   for i=0 to 2                      'hacemos que haga esto 2 veces
  4.     asm                             'inicio del bloque ensamblador
  5.       swap num,1                    'intercambiamos los nibbles del numero
  6.     end asm                         'fin del bloque ensamblador
  7.     nibble_inferior=num and 00001111 'extraemos el nibble inferior del numero
  8.     if(nibble_inferior<10)           'si el nibble inferior es menor a 10
  9.       nibble_inferior=nibble_inferior+'0'   'guardamos valor ascii del numero
  10.     else                                    'de lo contrario
  11.       nibble_inferior=nibble_inferior+55    'guardamos valor ascii de la letra (A=65)
  12.     end if
  13.     Lcd_Chr_CP(nibble_inferior)      'imprime el nibble inferior
  14.   next i
  15. end sub

Si imprime 3 caracteres debes poner el limite del for en 1.

 :-/ suerte.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: ASTROCAR en 30 de Agosto de 2010, 23:43:03
Este compilador no tiene una funcion especial que haga eso (CCS si la tiene), por lo tanto debes crear una rutina para hacerlo.

Puedes utilizar esto

Código: FreeBasic
  1. sub procedure imprime_Hexadecimal(num)
  2.   dim i,nibble_inferior as byte     'declaramos el byte nibble_inferior
  3.   for i=0 to 2                      'hacemos que haga esto 2 veces
  4.     asm                             'inicio del bloque ensamblador
  5.       swap num,1                    'intercambiamos los nibbles del numero
  6.     end asm                         'fin del bloque ensamblador
  7.     nibble_inferior=num and 00001111 'extraemos el nibble inferior del numero
  8.     if(nibble_inferior<10)           'si el nibble inferior es menor a 10
  9.       nibble_inferior=nibble_inferior+'0'   'guardamos valor ascii del numero
  10.     else                                    'de lo contrario
  11.       nibble_inferior=nibble_inferior+55    'guardamos valor ascii de la letra (A=65)
  12.     end if
  13.     Lcd_Chr_CP(nibble_inferior)      'imprime el nibble inferior
  14.   next i
  15. end sub

Si imprime 3 caracteres debes poner el limite del for en 1.

 :-/ suerte.

Gracias por tu gentil respuesta en la brevedad lo pruebo y te comento de momento tiene mucha logica y hasta ya lo tenia en mente pero hacer toda la rutina en asm y agregarla al codigo que estoy haciendo.

Saludos.
Atten.
Alexander Santana.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: ASTROCAR en 31 de Agosto de 2010, 15:18:03
Hola buenas tardes, hoy experimentando nuevamente con el mkb le note utra deficiencia estaba declarando un arreglo  para tener un buffer y no me permite mas de 50 items lo que quieres decir es que se me dificulta a la hora de  tener un buffer para cargas valores de una eeprom.


Saludos y es sin menos preciar el mikrobasic pero son limitantes que hay que tenerlas encuenta a la hora de realizar aplicaciones con requerimientos como una variable buffer para cargas valores tipo byte una eeprom por ejemplo si quiero leer sus primeras 256 direcciones no puedo almacenar esos valores temporarmente.

Atten.
Alexander Santana.
Barcelona-Venezuela.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: marcelo2112 en 01 de Octubre de 2010, 09:23:07
Borrar. Gracias
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: meledu en 12 de Noviembre de 2010, 18:04:32
Perdonen pero que significa ASG   lo he visto en varios programas
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: cosmic en 09 de Abril de 2011, 18:40:49
Amigo.
Ya que estas en esto del mokrobasic, como creo una libreria propia
tengo un que no se acopla a los tradicionales ks0108 y demas :oops: :oops:
Gracias por tu ayuda :-/ :-/ :oops:
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 10 de Abril de 2011, 00:55:09
Perdonen pero que significa ASG   lo he visto en varios programas

Sería mejor que pongas una referencia de donde viste eso, ya que yo no he visto nunca eso, posiblemente se refiera a una variable o algo así.

Amigo.
Ya que estas en esto del mokrobasic, como creo una libreria propia
tengo un que no se acopla a los tradicionales ks0108 y demas :oops: :oops:
Gracias por tu ayuda :-/ :-/ :oops:

Para crear una nueva librería lo unico que tienes que hacer es crear un nuevo archivo *.bas y luego lo guardas en la carpeta del proyecto y finalmente lo mandas a llamar con la instrucción Include en el archivo principal.

Si lo que deseas es utilizar una librería hecha, lo más probable es que la encuentres para código C y por ello tendrás que adaptarla a MikroBasic.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: cosmic en 13 de Abril de 2011, 14:55:46
Veguepic amigo.
una preguntita. Como hago para usar cualquier puerto como bus de 8bits para lcd.
he intentado usar el portb del pic 16f873a, pero me da error
lcd8_Init (PORTB,7,6,5,4,3,2,1,0, PORTC,7,6,5). ESTO EN LA VERSION 7.0.02
Graciasa por tu ayuda
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: banistelrroy en 11 de Mayo de 2011, 01:50:35
una consulta tengo instalado micro code estudio hay conflicto si instalo mikrobasic
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jorge_613 en 11 de Mayo de 2011, 15:45:10
Hola estoy aprendiendo a utilizar este lenguaje, y por el momento me va d eperlas,
Trao de hacer un  Pulsado que cada vez que lo pulse este se me vaya sumnado y me muestre el numero de pulsaciones en un display.

este EJEMPLO (http://www.todopic.com.ar/foros/index.php?topic=13762.msg81549#msg81549) muestra algo que yo quiero, pero no se como hacerlo en el proteus, hasta ahora intento de esta forma, pero sigue sin funcionar, alguna idea, por favor?

En el Adjunto la Imagen.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: duaiber en 14 de Septiembre de 2011, 18:01:52
buenas tardes estoy trabajando en un data logger ya tengo las rutinas para leer una memoria sd y escribirla pero tengo un problema que estare guardando datos float en realidad no se como almacenarlos en una memoria serial o EEPROM interna ya q este coniene 4bytes y pues sino se como guardarlo imaginenc leerlo por separado y encriptarlo si alguien tiene algun proyecto de guardado de variable flotante en mkb le agradezco de antemano
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: intimdq en 15 de Diciembre de 2011, 00:03:00
Hola a todos estoy haciendo una rutina en la que necesito visualizar en 4 display 7 segmentos cátodo común un valor de una variable “microsegundos” por el momento dispongo de esta rutina, pero no muestra decimales y no me secuencia el PORTB. Que es lo que estoy haciendo mal??

dim shifter, portc_index as byte ' Variables shifter y portc_index son de tipo byte
dim microsegundos as byte    ' Definir la variable microsegundos como un byte
digit, number as word            ' Variables digit y number son de tipo word
portc_array as word[4]           ' Matriz portc_array tiene 4 miembros de tipo word
sub function mask (dim num as Word) as Word ' Subrutina para enmascarar
  select case num ' utilizada para convertir
    case 0 result = $3F          ' números binarios en la
    case 1 result = $06          ' combinación de bits apropiada
    case 2 result = $5B          ' que se visualizará en el LED
    case 3 result = $4F
    case 4 result = $66
    case 5 result = $6D
    case 6 result = $7D
    case 7 result = $07
    case 8 result = $7F
    case 9 result = $6F
  end select ' Final de la sentencia Case
end sub ' Final de la subrutina

sub procedure interrupt ' Inicio de la rutina de interrupción
  PORTB = 0             ' Apagar todos los visualizadores de 7 segmentos
  PORTC = portc_array [portc_index] ' Enviar el valor apropiado al puerto PORTD
  PORTB = shifter        ' Encender el visualizador apropiado de 7 segmentos
  shifter = shifter << 1 ' Mover shifter al siguiente dígito
 
  if (shifter > 8 ) then
    shifter = 1
  end if
 
  Inc(portc_index)       ' Incrementar portc_index
 
  if (portc_index > 3) then
    portc_index = 0      ' Encender el primero, apagar el cuarto visualizador de 7 segmentos
  end if
 
  TMR0 = 0               ' Reiniciar el valor del TIMER0
  T0IF_bit = 0           ' Borrar la bandera de interrupción del Timer0
end sub                  ' Final de la rutina de interrupción

main:            ' Inicio del programa
OPTION_REG = $80 ' Configuración del Timer0 (Timer0 funciona como temporizador
                 ' con el pre-escalador)
digit = 0        ' Valor inicial de la variable digit
portd_index = 0  ' Encender el primer visualizador LED
shifter = 1      ' Valor inicial de la variable shifter
TMR0 = 0         ' Borrar el Timer0
INTCON = $A0     ' Habilitar interrupción con los bits GIE y T0IE
PORTB = 0        ' Borrar el PORTB
TRISB = 0        ' Configurar el PORTB como salida
PORTC = 0        ' Borrar el PORTC
TRISD = 0        ' Configurar el PORTD como salida
number = microsegundos*0.012288   
number=  0.05/ number   ' Valor en el visualizador LED
           

while TRUE       ' Bucle infinito
  digit = number / 1000         ' Extraer miles
  portc_array[3] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = (number / 100) mod 10 ' Extraer centenas
  portc_array[2] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = (number / 10) mod 10  ' Extraer decenas
  portc_array[1] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = number mod 10         ' Extraer unidades
  portc_array[0] = mask(digit)  ' y almacenarlo en la matriz PORTC
 
  Delay_ms(10000)                ' Retardo de un segundo
 
  wend

end. ' Final de programa
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: intimdq en 17 de Diciembre de 2011, 00:10:35
Hola a todos estoy haciendo una rutina en la que necesito visualizar en 4 display 7 segmentos cátodo común un valor de una variable “microsegundos” por el momento dispongo de esta rutina, pero no muestra decimales y no me secuencia el PORTB. Que es lo que estoy haciendo mal??

dim shifter, portc_index as byte ' Variables shifter y portc_index son de tipo byte
dim microsegundos as byte    ' Definir la variable microsegundos como un byte
digit, number as word            ' Variables digit y number son de tipo word
portc_array as word[4]           ' Matriz portc_array tiene 4 miembros de tipo word
sub function mask (dim num as Word) as Word ' Subrutina para enmascarar
  select case num ' utilizada para convertir
    case 0 result = $3F          ' números binarios en la
    case 1 result = $06          ' combinación de bits apropiada
    case 2 result = $5B          ' que se visualizará en el LED
    case 3 result = $4F
    case 4 result = $66
    case 5 result = $6D
    case 6 result = $7D
    case 7 result = $07
    case 8 result = $7F
    case 9 result = $6F
  end select ' Final de la sentencia Case
end sub ' Final de la subrutina

sub procedure interrupt ' Inicio de la rutina de interrupción
  PORTB = 0             ' Apagar todos los visualizadores de 7 segmentos
  PORTC = portc_array [portc_index] ' Enviar el valor apropiado al puerto PORTD
  PORTB = shifter        ' Encender el visualizador apropiado de 7 segmentos
  shifter = shifter << 1 ' Mover shifter al siguiente dígito
 
  if (shifter > 8 ) then
    shifter = 1
  end if
 
  Inc(portc_index)       ' Incrementar portc_index
 
  if (portc_index > 3) then
    portc_index = 0      ' Encender el primero, apagar el cuarto visualizador de 7 segmentos
  end if
 
  TMR0 = 0               ' Reiniciar el valor del TIMER0
  T0IF_bit = 0           ' Borrar la bandera de interrupción del Timer0
end sub                  ' Final de la rutina de interrupción

main:            ' Inicio del programa
OPTION_REG = $80 ' Configuración del Timer0 (Timer0 funciona como temporizador
                 ' con el pre-escalador)
digit = 0        ' Valor inicial de la variable digit
portd_index = 0  ' Encender el primer visualizador LED
shifter = 1      ' Valor inicial de la variable shifter
TMR0 = 0         ' Borrar el Timer0
INTCON = $A0     ' Habilitar interrupción con los bits GIE y T0IE
PORTB = 0        ' Borrar el PORTB
TRISB = 0        ' Configurar el PORTB como salida
PORTC = 0        ' Borrar el PORTC
TRISD = 0        ' Configurar el PORTD como salida
number = microsegundos*0.012288   
number=  0.05/ number   ' Valor en el visualizador LED
           

while TRUE       ' Bucle infinito
  digit = number / 1000         ' Extraer miles
  portc_array[3] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = (number / 100) mod 10 ' Extraer centenas
  portc_array[2] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = (number / 10) mod 10  ' Extraer decenas
  portc_array[1] = mask(digit)  ' y almacenarlo en la matriz PORTC
  digit = number mod 10         ' Extraer unidades
  portc_array[0] = mask(digit)  ' y almacenarlo en la matriz PORTC
 
  Delay_ms(10000)                ' Retardo de un segundo
 
  wend

end. ' Final de programa



He solucionado el problema de visualizacion, el problema estaba en que en Proteus ISIS me faltaba ponerle unas resistencias a los catodos del display. El problema que me queda es que no puedo ver decimales. como puedo solucionar eso??? Gracias...


Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: intimdq en 22 de Diciembre de 2011, 12:11:32

Hola... hay alguien aquí???  :(
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: MLO__ en 22 de Diciembre de 2011, 21:17:21
Hola

se nada de basic. Pero si quieres decimales, es mejor que primero hagas la operacion y guardes el resultado en una variable float, y luego conviertas esa float a string.

Saludos
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: dogflu66 en 24 de Diciembre de 2011, 10:04:08
La mejor opción como te indica MLO es trabajar con variable tipo Float y utilizar las funciones para trabajar con cadenas, pero si el lenguaje no tiene Float o funciones para cadenas, o simplemente el micro es tan chico que el uso de Float o funciones se come la memoria de programa, entonces se usa el método que estás usando (el de toda la vida). Para trabajar como lo haces lo primero que tienes que hacer es eliminar los decimales de los números y esto se hace multiplicándolos por x10 tantas veces como haga falta, después operas normalmente y luego aplicas el método que estas utilizando para extraer la parte entera y la parte decimal. Dicho de esta manera parece difícil pero en realidad es muy simple y ocupa muy poca memoria de programa.

number = microsegundos*12288    
number=  5/ number   ' Valor en el visualizador LED

Aquí tienes ejemplos de cómo trabajar con decimales mediante el uso de números enteros.

http://www.todopic.com.ar/foros/index.php?topic=14917.0
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: intimdq en 26 de Diciembre de 2011, 18:00:03
La mejor opción como te indica MLO es trabajar con variable tipo Float y utilizar las funciones para trabajar con cadenas, pero si el lenguaje no tiene Float o funciones para cadenas, o simplemente el micro es tan chico que el uso de Float o funciones se come la memoria de programa, entonces se usa el método que estás usando (el de toda la vida). Para trabajar como lo haces lo primero que tienes que hacer es eliminar los decimales de los números y esto se hace multiplicándolos por x10 tantas veces como haga falta, después operas normalmente y luego aplicas el método que estas utilizando para extraer la parte entera y la parte decimal. Dicho de esta manera parece difícil pero en realidad es muy simple y ocupa muy poca memoria de programa.

number = microsegundos*12288   
number=  5/ number   ' Valor en el visualizador LED

Aquí tienes ejemplos de cómo trabajar con decimales mediante el uso de números enteros.

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



Gracias por tu comentario, pero no me quedo del todo claro, digamos, si trabajo la variable number de la siguiente forma:
number = microsegundos*12288   
number=  5/ number   ' Valor en el visualizador LED
el resultado se me va ver alterado. Digamos si microsegundos es igual a 10entonces:

10*0,012288 =0,12288 y
0,05/0,12288 = 0,4069

de la forma en que usted propone seria:

10*12288 =122880 y
5/122880 = 0,00004069
 tenemos una diferencia de una multiplicación por 10000

digamos , luego tendría que multiplicarlo por 10000 para obtener el mismo resultado??
y como hago para que se vea el punto decimal solo con dos decimales ? en display 7 segmentos.
El programa que uso es Mikrobasic y el PIC es el 16F876
Desde ya muchas gracias...
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: aitorsp en 27 de Diciembre de 2011, 04:47:27

En la instrucción

Lcd_Config(PORTA,3,2,1,0,PORTB,0,1,2)

RW es el PORTB.1 pero si yo quiero poner RW en la LCD a tierra cómo se modifica la instrucción para que no lo tenga en cuenta ?
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: dogflu66 en 27 de Diciembre de 2011, 05:41:37
Tienes que poner ceros en el termino que haga falta para suprimir los decimales.
5000000/122880
y si solo necesitas 2 decimales no es necesario realizar las operaciones con tantos decimales, así eliminas ceros. Es cuestión de probar en un papel hasta afinar el calculo y luego pasarlo al código fuente ya optimizado. En el índice  al que te lleva el enlace que puse anteriormente tienes varios ejemplos que usan el sistema.

Casi en todos los Basic existe una función del sistema en la que se indica la posición del digito de una variable y lo extrae de forma individual, se suele llamar “DIG”.

No uso Microbasic y mi lenguaje no tiene “DIG” ni Lcd_Config, por lo que a preguntas concretas sobre como se realiza alguna operación con funciones especiales para Microbasic no te puedo ayudar.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: dogflu66 en 27 de Diciembre de 2011, 05:46:14
En algunos lenguajes, en los comandos del preprocesador  un determinado valor que no se usa se suele omitir y el compilador entiende que no se usa. Prueba a dejar las comillas juntas en el lugar de ese parámetro a ver que pasa, mientras que alguien que use tu mismo lenguaje te pueda contestar.
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jumu en 19 de Noviembre de 2012, 00:11:09
Saludos a todos...ya rato no entraba aquí...y ahora entro porque tengo una duda...tome un curso de mikrobasic y pues ahora que vi que es fácil quiero hacer un proyecto y necesito saber lo de adc....vi un ejemplo aquí en este tema y quisiera saber algunas cosas...
Código: [Seleccionar]
program adcMKB
 
dim tiempo  as word             ' variable de almacenamiento del adc
    tiempot as string[5]        ' variable para poder ver en el lcd el resultado
 
main:                           ' canal RA0 como analogico
 ADCON1 = 142                   ' canal de entrada
 TRISA.0 = 1
 
 Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
 Lcd_Cmd(LCD_CURSOR_OFF)
 Lcd_Cmd(LCD_CLEAR)
                                                ' lectura del adc RA0
 tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
 wordtostr(tiempo,tiempot)
                                                ' aqui lo desplegamos en el lcd
 lcd_out(1,3,tiempot)
 delay_ms(1000)
 
goto main
end.
Bueno aquí van mis dudas porque la verdad no entiendo nada del adc...
1.que es eso de adcon0 y adcon1 y para quede usan??
2.como saben que 142 es el canal análogo de RA0, cada canal tiene su numero o codigo??

La verdad he visto el datasheet del pic16f887 que es el que uso y busco la parte adc pero la verdad no entiendo nada...quisiera que me explicaran de la forma mas clara porque si me ha dado duro esto del adc...les agradecería muchísimo su ayuda...de antemano muchas gracias
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: bigluis en 19 de Noviembre de 2012, 11:57:53
Saludos a todos...ya rato no entraba aquí...y ahora entro porque tengo una duda...tome un curso de mikrobasic y pues ahora que vi que es fácil quiero hacer un proyecto y necesito saber lo de adc....vi un ejemplo aquí en este tema y quisiera saber algunas cosas...
Código: [Seleccionar]
program adcMKB
 
dim tiempo  as word             ' variable de almacenamiento del adc
    tiempot as string[5]        ' variable para poder ver en el lcd el resultado
 
main:                           ' canal RA0 como analogico
 ADCON1 = 142                   ' canal de entrada
 TRISA.0 = 1
 
 Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
 Lcd_Cmd(LCD_CURSOR_OFF)
 Lcd_Cmd(LCD_CLEAR)
                                                ' lectura del adc RA0
 tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
 wordtostr(tiempo,tiempot)
                                                ' aqui lo desplegamos en el lcd
 lcd_out(1,3,tiempot)
 delay_ms(1000)
 
goto main
end.
Bueno aquí van mis dudas porque la verdad no entiendo nada del adc...
1.que es eso de adcon0 y adcon1 y para quede usan??
2.como saben que 142 es el canal análogo de RA0, cada canal tiene su numero o codigo??

La verdad he visto el datasheet del pic16f887 que es el que uso y busco la parte adc pero la verdad no entiendo nada...quisiera que me explicaran de la forma mas clara porque si me ha dado duro esto del adc...les agradecería muchísimo su ayuda...de antemano muchas gracias

Hola Jumu, adcon0 y adcon1 son los registros de control del ADC estos varian en dependecncia del PIC que desees utilizar.

el 142 se deduce a partir de la hoja de datos del pic, exactmente no se porque utilizaron ese valor ya que 142 en binario es 1000 1110, y como se objerva en la pagina 105 del datasheet los 4 bits menos significativos de ADCON1 son unimplemented, esto significa que no importa el valor que les asignes.

Por eso creo que debes cambiar esa linea por la siguiente

Código: [Seleccionar]
TRISA.0 = 1   'seleccionas pin A0 como entrada
ANSEL.0 = 1   'seleccionas pin A0 como entrada analogico

una vez hecho eso puedes seleccionar que pin utilizaras simplemente utilizando la funcion ADC_Read(0).
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jumu en 19 de Noviembre de 2012, 12:48:53
Hola bigluis muchas gracias por contestar...bueno a ver si entendí bien...con poner trisa.0=1 y ansel.0=1 ya configuro que el pin RA0 es entrada análoga sin necesidad de poner adcon0 ni adcon1???....si es así esto lo haría mucho ams entendible...ahora de cuantos bits seria la conversión?? 10 u 8 bits??...muchas gracias por tomarte el tiempo yesolicarme ya tengo un poco mas claro esto xD
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: jumu en 19 de Noviembre de 2012, 14:31:04
bigluis quiero saber si me podias ayudar en un proyecto que tengo es algo para mi para aprender...lo que quiero es que por adc leer un joystick de los controles de playstation y el resultado que de el adc lo ponga en el pwm para controlar un servo...es si lo que quiero es que con un joystick controlar el movimiento de un servo algo asi aunque en esta imagen se usa un arduino yo lo quiero hacer con un pic16f887 (http://i230.photobucket.com/albums/ee224/AmphioxusImages/servoArduino2.jpg) y pues he estado viendo y el pwm no me funciona :( no se que mas hacer me confundo y necesito ayuda x_x...te agradeceria si me ayudas..
Título: Problemas con LCD
Publicado por: Elias.12 en 24 de Noviembre de 2012, 19:47:06
Hola que tal

Antes que nada, buenas tardes a todos los del foro. Estoy realizando un proyecto y me he detenido por algunas cosas las cuales no entiendo o no puedo. Estoy
utilizando una LCD. Mi problema es el siguiente: son una lista de nombres de herramientas y quiero con un botón desplegarloz en la LCD y así poder seleccionar alguno de ellos
y en caso de haberme pasado con otro botón regresar al nombre anterior. Y ya al haberlo escogido, seleccionarlo.

Aquí les muestro el código. En caso de tener otro error, les agradecería que me lo dijeran.

Saludos

program Ohmetro                               ' NOMBRE DEL PROGRAMA

dim keypadPORT as byte at PORTD
dim LCD_RS as sbit at RB4_bit                 ' conexion del modulo LCD
LCD_EN as sbit at RB5_bit                     ' BIT PORTB,5 A LCD
LCD_D4 as sbit at RB0_bit                     ' BIT PORTB,0 A LCD
LCD_D5 as sbit at RB1_bit                     ' BIT PORTB,1 A LCD
LCD_D6 as sbit at RB2_bit                     ' BIT PORTB,5 A LCD
LCD_D7 as sbit at RB3_bit                     ' BIT PORTB,3 A LCD
LCD_RS_Direction as sbit at TRISB4_bit        ' DIRECCION DE TRISB4 PARA LCD
LCD_EN_Direction as sbit at TRISB5_bit        ' DIRECCION DE TRISB5 PARA LCD
LCD_D4_Direction as sbit at TRISB0_bit        ' DIRECCION DE TRISB0 PARA LCD
LCD_D5_Direction as sbit at TRISB1_bit        ' DIRECCION DE TRISB1 PARA LCD
LCD_D6_Direction as sbit at TRISB2_bit        ' DIRECCION DE TRISB2 PARA LCD
LCD_D7_Direction as sbit at TRISB3_bit        ' DIRECCION DE TRISB3 PARA LCD
dim text as string [16]                       ' variable de texto
dim tlong as longword                         ' variaple tipo longword
dim ohm,abc,mh,ppm,ch,decimal,adc_rd,cen,decenas,uni as word  ' variable son de tipo word
dim boton as byte
 main:                                        ' INICIO DEL PROGRAMA
    TRISB = 0                                 '  ES SALIDA
    PORTB = 0xFF                              ' 11111111 A PORTB
    INTCON = 0                                ' ESTADO 0
    ANSEL = 0x04                              ' EL PIN RA2 SE COMFIGURA COMO ENTADA ANALOGICA
    TRISA = 0x04                              ' PORTA,2 SE CONFIGURA COMO ENTRADA ANALOGICA
    ANSELH = 0                                ' LOS DEMAS PINES SE CONFIGURAN COMO SALIDAS DIGITALES
    Lcd_Init()                                ' INICIALIZACION DE LA LCD
    Lcd_Cmd(_LCD_CURSOR_OFF)                  ' COMANDO LCD (apagar el cursor)
    Lcd_Cmd(_LCD_CLEAR)                       ' COMANDO LCD (borrar lcd)
    text = "PEMEX - SERVICIO"                 ' DEFINIR EL  MENSAJE PEMEX- SERVICIO
    Lcd_Out(1,1,text)                         ' ESCRIBIMOS EL MENSAJE  LINEA
    text = "        A POZOS"                  ' DEFINIR EL  MENSAJE A POZOS
    Lcd_Out(2,2,text)                         ' ESCRIBIMOS EL MENSAje LINEA
    Delay_ms(700)                             ' RETARDO 500ms
    Lcd_Cmd(_LCD_CURSOR_OFF)                  ' COMANDO LCD (apagar el cursor)
    Lcd_Cmd(_LCD_CLEAR)                       ' COMANDO LCD (borrar lcd)
    text = "SELECCIONE"                       ' DEFINIR EL  MENSAJE
    Lcd_Out(1,1,text)                         ' ESCRIBIMOS EL MENSAJE  LINEA
    text = "HERRAMIENTA: "                    ' DEFINIR EL  MENSAJE UTILIZAR
    Lcd_Out(2,2,text)                         ' ESCRIBIMOS EL MENSAje LINEA
 
  while 1                                     ' ESPERAR A QUE BOTON SE PRESIONE
     if boton = 0 then
     while boton = 1
     boton = "PBM-S"
     Lcd_Chr_CP(boton)                           ' VISUALIZAR EN EL LCD
  wend
 end.   
Título: Re: Ejemplitos de Mikrobasic y Proteus
Publicado por: santtyxea en 21 de Octubre de 2015, 13:18:21
hOLA Amigo tal vez tienes una programación entres dos pic comunicados por rs-485 o