Autor Tema: Comenzando con Mikrobasic  (Leído 293682 veces)

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

Desconectado Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #270 en: 22 de Abril de 2008, 22:28:36 »
Moyin, tienes razón!!!

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

program taco

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


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

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

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

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

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


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

  while true
     Visualizacion
  wend
end.
Nueve de Julio - Buenos Aires - Argentina

Desconectado Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #271 en: 24 de Abril de 2008, 13:05:05 »
Gracias muchachos ya lo solucione!!!!

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

Gracias.
Nueve de Julio - Buenos Aires - Argentina

Desconectado Aplanado

  • PIC10
  • *
  • Mensajes: 20
Re: Comenzando con Mikrobasic
« Respuesta #272 en: 29 de Abril de 2008, 23:23:39 »
buenas noches Sres!!!! vuelvo a molestarlos con una pregunta, ya que siemrpoe me ayudaron y pude salir adelante, la historia es mas o menos asi:
hice un programita simple en MKB ke kuando yo levanto un 1 en una entrada, acciona otra, durante un tiempo X; despues de apretarla 3 veces  se activa otra:

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

espero me hayan entendido!!
saludos y gracias por adelantado!!!

Desconectado ivan braga

  • PIC12
  • **
  • Mensajes: 77
Re: Comenzando con Mikrobasic
« Respuesta #273 en: 30 de Abril de 2008, 02:25:43 »
   Olá Aplanado,

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

   
Citar
if a = 3
then portb.2=1
delay_ms(x)
portb.2=0
a=0 // aqui você coloca novamente A com valor zero (0)
end if
"Mesmo o objeto mais inanimado tem movimento suficiente para ficar na sua frente e provocar um acidente."
"Incluso el objeto más inanimado tiene suficiente movimiento para interponerse en su camino y provocar un accidente."
"Even the most inanimate object has enough movement to stand in your way and cause an accident."

Desconectado Aplanado

  • PIC10
  • *
  • Mensajes: 20
Re: Comenzando con Mikrobasic
« Respuesta #274 en: 30 de Abril de 2008, 11:29:11 »

perfecto ivan funciono de maravilla! muchas gracias de nuevo!!!!!
Saludos

Desconectado frape

  • PIC10
  • *
  • Mensajes: 21
Re: Comenzando con Mikrobasic
« Respuesta #275 en: 15 de Agosto de 2008, 07:26:38 »
Hola, acabo de pasarme a Mikrobasic, quiero convertir un proyecto que tengo hecho y funcionando en picbasic y por mas que leo la ayuda no consigo ver la forma de realizar una rutina equivalente al Lookup del PBP que es la siguiente:

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

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

Un Saludo.


Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: Comenzando con Mikrobasic
« Respuesta #276 en: 13 de Febrero de 2009, 05:14:42 »
HOLA:

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

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

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


POGO AQUI EL CODIGO QUE ESTOY PRACTICANDO.


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

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


Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: Comenzando con Mikrobasic
« Respuesta #277 en: 13 de Febrero de 2009, 17:28:10 »
hola de nuevo:

me voy contestando yo solo mientras aprendo...

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

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

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

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

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

porcierto ¿dije que usaba el 16f677?, con reloj interno (4mhz)
« Última modificación: 13 de Febrero de 2009, 17:48:11 por un Moderador »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
[*]Re: Comenzando con Mikrobasic
« Respuesta #278 en: 13 de Febrero de 2009, 17:34:01 »
Jaja, es el código más movido que he visto  :D

Desconectado JJESL

  • PIC10
  • *
  • Mensajes: 1
Re: [*]Re: Comenzando con Mikrobasic
« Respuesta #279 en: 09 de Marzo de 2009, 19:16:52 »
hola a todos. soy nuevo en la programación de pics pero tengo conocimientos de ensamblador. quiero aprender a programar en un nivel superior para agilizar en tiempos y por la facilidad que brindan las librerias. es por ello que he comenzado con mikrobasic.

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

Nota: uso la versión 7 de mikrobasic con licencia.
Mi programador dice ser compatible con mikrobasic.
La suposición más fuerte que tengo es que debe haber algún error en la optimización de código que maneja MKB ó bien, error en configuración de las Flags del PIC.

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: Comenzando con Mikrobasic
« Respuesta #280 en: 11 de Marzo de 2009, 09:26:25 »
hola:

sube el codigo y lo vemos.

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

pero con la funcion delay nunca me paso.

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

a ver que pasa...


Desconectado wllapaco

  • PIC10
  • *
  • Mensajes: 1
Re: Comenzando con Mikrobasic
« Respuesta #281 en: 19 de Marzo de 2009, 14:52:14 »
si podrian ayudarme que realizo en el programa mikrobasic para utilizar dos pulsadores (uno que active y el otro que apague) RA.1 y RA.2 para una sola salida RB.1

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Comenzando con Mikrobasic
« Respuesta #282 en: 19 de Marzo de 2009, 23:55:57 »
En este mismo hilo  esta todo lo que buscas incluidos unos videotutoriales para comenzar en mikrobasic .

Desconectado andresd0

  • PIC10
  • *
  • Mensajes: 5
Re: Comenzando con Mikrobasic
« Respuesta #283 en: 28 de Marzo de 2009, 15:28:14 »
http://www.mikroe.com/download/basic_pic_pro.php
mikrobasic 2009 beta 1.14

cambio un poco  la interfaz con respecto a la 7.2
ahora ver como funca
« Última modificación: 28 de Marzo de 2009, 15:40:49 por andresd0 »
Carpe diem, carpe horam
                                                 "Disfruta el momento"

Desconectado juan5005031

  • PIC10
  • *
  • Mensajes: 1
Re: Comenzando con Mikrobasic
« Respuesta #284 en: 03 de Abril de 2009, 03:02:09 »
hola a todos soy nuevo en el foro ye stoy usando el mikrobasic quisiera saber como generar el codigo .hex para cargarselo al pic porque le doy ctlr+f9 o el simbolo build y solo me genera un archivo .pbas por favor espero la mas pronta respuesta gracias...


 

anything