Autor Tema: Ejemplitos de Mikrobasic y Proteus  (Leído 140775 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #15 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.


Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #16 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.

Desconectado liminix

  • PIC12
  • **
  • Mensajes: 58
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #17 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

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #18 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:



Aun se puede mejorar un poco, solo es una aplicación sencilla.  :)

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #19 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
circuito2

ambos estan en el foro tecnico en circuitos de E/S
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado impostor

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #20 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.


Desconectado Dani27v

  • PIC12
  • **
  • Mensajes: 73
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #21 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.

Desconectado impostor

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #22 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.
« Última modificación: 06 de Marzo de 2007, 17:17:24 por impostor »

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #23 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.
.



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

« Última modificación: 02 de Julio de 2007, 17:57:32 por mariano_pic »
Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado impostor

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #24 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.

Desconectado Mazinyerz

  • PIC10
  • *
  • Mensajes: 15
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #25 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...

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #26 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.


Desconectado Mazinyerz

  • PIC10
  • *
  • Mensajes: 15
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #27 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.

Desconectado Mazinyerz

  • PIC10
  • *
  • Mensajes: 15
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #28 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.

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Contador de 4 digitos multiplexado
« Respuesta #29 en: 02 de Julio de 2007, 20:03:03 »
Aca les dejo un contador de 4 digitos puede servir de base para otras cosas


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.

Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/


 

anything