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

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

Desconectado aduri

  • PIC10
  • *
  • Mensajes: 7
Re: Comenzando con Mikrobasic
« Respuesta #300 en: 07 de Mayo de 2010, 05:45:43 »
Hello friends,
I tried to make a SWR meter.
Now I obtained a correct result of ROS but I read on LCD only a integer part of result but not the decimal and in a wrong position (0.001 instead of 1.000)

Help me please

Antonio

Código: [Seleccionar]
program adc_SWR



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

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

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

ros=(adc_rd+adc_rd1) / (adc_rd-adc_rd1)
'tlong1 = ros
'ros = tlong1 >> 10
ch = ros div 1000 ' prepare value for diplay
 Lcd_Chr(2, 12, 48+ch) ' write ASCII at 2nd row, 9th column
 Lcd_Chr(2, 13, ".")
ch = (ros div 100) mod 10
 Lcd_Chr(2, 14, 48+ch)
ch = (ros div 10) mod 10
 Lcd_Chr(2, 15, 48+ch)
ch = ros mod 10
 Lcd_Chr(2, 16, 48+ch)
 delay_ms(1)
wend
end.
« Última modificación: 07 de Mayo de 2010, 06:05:37 por aduri »

Desconectado aduri

  • PIC10
  • *
  • Mensajes: 7
Re: Comenzando con Mikrobasic
« Respuesta #301 en: 07 de Mayo de 2010, 05:56:52 »
Escuse me
I loaded two number 200 and 20 in adc_rd and adc_rd1 to make a debug.

Bye
Antonio

Desconectado NORTEÑO

  • PIC10
  • *
  • Mensajes: 32
Re: Comenzando con Mikrobasic
« Respuesta #302 en: 07 de Junio de 2010, 14:53:07 »
Hola a todos y todas este es mi primer mensajito referido a mikrobasic.
es fabuloso y de facil iniciacion para los que nos iniciamos en este campo.
Por lo que propongo un apartado de diferentes ejemplitos de programas y
procedimientos que no esten publicados.

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

GRACIAS A TODOS.

Desconectado marcelo2112

  • PIC12
  • **
  • Mensajes: 64
Re: Comenzando con Mikrobasic
« Respuesta #303 en: 06 de Octubre de 2010, 14:49:45 »
Hola, recien termino de instalar el mikrobasic para hacer unas pruebas, pero me encuentro con que al compilar no me genera el HEX. Como hay que hacer?Gracias.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Comenzando con Mikrobasic
« Respuesta #304 en: 06 de Octubre de 2010, 18:13:19 »
Hello friends,
I tried to make a SWR meter.
Now I obtained a correct result of ROS but I read on LCD only a integer part of result but not the decimal and in a wrong position (0.001 instead of 1.000)

Help me please

Antonio


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

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

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

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

Si utilizas la version pro de MikroBasic puedes utilizar la funcion WordToStrWithZeros, con la cual podrías eliminar la pregunta si es cero.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: Comenzando con Mikrobasic
« Respuesta #305 en: 13 de Noviembre de 2010, 11:57:13 »
Hola amigos tengo un aporte aunque no es mio en realidad solo es una modificacion del codigo de nuestro amigo dogflu hecho para psi y que yo modifique para poder ser usado en mikrobasic, Se trata de el uso del timer1 como timer, este se desborda cada 1ms ,de esta manera se puede usar un rutina para control de tiempos sin necesidad de usar el Waitms o el delay ms en este caso, esepro les sirva,
enciende un led conectado a rb0 cada 1/2 segundo y otro conectado a rb1 cada 1 segundo y bueno aqui lo tienen
se esta usando la interrupcion del timer1 y un procedimiento para controlar el tiempo que se va a contar(biene a ser la pausa)
Como les dije en un comienzo, es una modificacion del codigo de Dogflu , espero no haver hecho mal, puesto que lo cuelgo sol por fines didacticos.

program temporizador

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


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

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


main:  '   Main program

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

Desconectado paul_cueva

  • PIC10
  • *
  • Mensajes: 1
Re: Comenzando con Mikrobasic
« Respuesta #306 en: 17 de Noviembre de 2010, 22:05:18 »
holaaaaa

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

que pasara?

saludos!!

Mira yo tenía el mismo problema.. si tienes windows7 sólo dale clic derecho al ícono del programa y pon abrir ejecutar como administrador

Desconectado fryab

  • PIC10
  • *
  • Mensajes: 2
Re: Comenzando con Mikrobasic
« Respuesta #307 en: 14 de Diciembre de 2010, 19:41:55 »
hola a todos tengo un pequeño problema con un programa que estoy desarroyando soy nuevo en esto de la programacion el proplema es que quiero sacar señal del programa para que me controle el ic max icm7218a para display de 7 seg. y no se como les pongo el programa para que lo chequen y me digan si me pueden ayudar

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


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

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

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

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

saludos a todos y grax. de antemano.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Comenzando con Mikrobasic
« Respuesta #308 en: 14 de Diciembre de 2010, 21:40:16 »
Hola fryab.

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

A continaución te pongo el link.

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

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

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado fryab

  • PIC10
  • *
  • Mensajes: 2
Re: Comenzando con Mikrobasic
« Respuesta #309 en: 17 de Diciembre de 2010, 16:00:35 »
Hola fryab.

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

A continaución te pongo el link.

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

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

estube checando la libreria poro no ago que funcione en mikrobasic no se si me pudieras echar la mano con ello grax

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Comenzando con Mikrobasic
« Respuesta #310 en: 20 de Diciembre de 2010, 00:18:28 »
Hola fryab.

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

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

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

Lo que te puedo recomendar es que utilices el código que he puesto en ese link y que trates de entenderlo. Si deseas ni siquiera tienes que migrar de MikroC a MikroBasic, es decir, puedes utilizar mi codigo como base para realizar tu codigo,  ;-) siempre y cuando que al final de tu proyecto aparezca referencia.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #311 en: 05 de Enero de 2011, 13:36:34 »
¿Display de 7 segmentos ó lcd?
Nueve de Julio - Buenos Aires - Argentina

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Comenzando con Mikrobasic
« Respuesta #312 en: 06 de Enero de 2011, 15:02:18 »
Hola Carli!

Te recomiendo que seas mas especifico en tus preguntas.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado sejotre

  • PIC10
  • *
  • Mensajes: 40
Re: Comenzando con Mikrobasic
« Respuesta #313 en: 24 de Abril de 2011, 20:17:51 »
tengo una duda : es posible usar el lenguaje de pbp en mikrobasic?
yo actualmente estoy usando el mplab con pbp pero estoy queriendo cambiar
que compiladores ( preferentemente en castellano) aceptan pbp?

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Comenzando con Mikrobasic
« Respuesta #314 en: 24 de Abril de 2011, 21:05:06 »
aunque ambos son lenguajes basic no son compatibles.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA


 

anything