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

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

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Comenzando con Mikrobasic
« Respuesta #165 en: 17 de Abril de 2007, 15:49:59 »
Hola

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

 Lcd8_Init( ctrlport, dataport)

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


Desconectado enricar883

  • PIC10
  • *
  • Mensajes: 18
Re: Comenzando con Mikrobasic
« Respuesta #166 en: 19 de Abril de 2007, 15:40:16 »
Hola a todos,

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

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

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

Codigo

program Aspirador

TRISA=0
TRISB=0

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


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


' localiza la direccion de memoria para los contadores

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

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


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

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

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

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

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

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

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

tiempo = 0
ASPIRA = 0

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

update = 1 ' Force first display

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


Gracias a todos

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comenzando con Mikrobasic
« Respuesta #167 en: 19 de Abril de 2007, 18:53:11 »
vamos a empezar bien ese codigo parace una mezcla entre MKB y PBP si estas usando MKB debes seguir sus reglas de programacion: Usar el Main, no poner declaraciones fuera del MAIN terminar con END etc. Puedes bajar las miniguias  los links estan al inicio de este tema te pueden ayudar mucho. procura leer la ayuda de MKB conforme uses las librerias.

Saludos
"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 PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Comenzando con Mikrobasic
« Respuesta #168 en: 19 de Abril de 2007, 19:01:15 »
Hola

pues veo que cometes siempre varios errores.

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

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

3. para lcd8 no hay lcd_config solo init.

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

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

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

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

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

Código: [Seleccionar]
program tpmkb

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

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

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


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


i = 0
b = 0
cc = 0

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

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

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

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

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

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

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

tiempo[0] = 0
ASPIRA = 0

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

update = 1 ' Force first display

end.

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

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



Desconectado enricar883

  • PIC10
  • *
  • Mensajes: 18
Re: Comenzando con Mikrobasic
« Respuesta #169 en: 19 de Abril de 2007, 19:44:24 »
Hola

De nuevo gracias por la rapida respuesta.

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

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

cuando los pruebe os cuento.

Gracias......


Desconectado enricar883

  • PIC10
  • *
  • Mensajes: 18
Re: Comenzando con Mikrobasic
« Respuesta #170 en: 21 de Abril de 2007, 21:19:28 »
Hola a Todos,

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

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

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

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

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

Gracias.


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


Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comenzando con Mikrobasic
« Respuesta #171 en: 21 de Abril de 2007, 22:00:08 »
Pues si primero  que nada es necesario leerse el manual y siempre es mejor meter el codigo para echarle un vistazo
"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 enricar883

  • PIC10
  • *
  • Mensajes: 18
Re: Comenzando con Mikrobasic
« Respuesta #172 en: 22 de Abril de 2007, 04:53:39 »
Hola

Aqui va el codigo

program Aspirador

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

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

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


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


i = 0
b = 0
cc = 0

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

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

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

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

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

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

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

tiempo = 0
ASPIRA = 0

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

update = 1 ' Force first display




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



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


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

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

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

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

    update = 0 ' Screen updated
    End if

Goto mainloop

' Incremento moneda 1

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

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

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

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

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

  update = 1 ' Set to update screen

  Goto chkup


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

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

          update = 1 ' Set to update LCD
          end if

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



end.

Saludos

Desconectado Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #173 en: 24 de Abril de 2007, 02:16:31 »
Hola compañeros/as, necesito ayuda, estoy leyendo un voltaje de alimentación, tengo el problema de no poder añadirle decimales a la lectura. Le lectura es fiel, pero me faltan los decimales. :oops:
Les dejo el código a continuación.

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

Espero puedan ayudarme.

Desde ya muchas gracias.
Nueve de Julio - Buenos Aires - Argentina

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comenzando con Mikrobasic
« Respuesta #174 en: 24 de Abril de 2007, 10:56:04 »
 Carli ya definiste las variables como FLoat.


Por cierto Enricar retoma el consejo de Pao, necesitas una programacion mejor estructurada. checa bien los consejos que te puso en el post anterior al tuyo.
"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 Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #175 en: 24 de Abril de 2007, 11:57:14 »
Gracias Navisimo, soy nuevo en esto y a decir verdad he copiado y pegado, con algún aporte de logica.

Los mantengo al tanto de mis avances.

Gracias.
Nueve de Julio - Buenos Aires - Argentina

pablobav

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


program serie

main:
trisa=0
trisb=1

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

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

end.

pablobav

  • Visitante
Re: Comenzando con Mikrobasic
« Respuesta #177 en: 26 de Abril de 2007, 23:34:57 »
me autorespondo el mensaje, el problema era que Usart_init(9600) lo debo iniciar solo una vez, como estaba en el bucle cuando esta iniciado y lo quiero volver a iniciar parece que se tilda el pic, OJO!! en proteus te simula como que todo anda bien pero no es asi, saludos.

Desconectado Carli

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 109
Re: Comenzando con Mikrobasic
« Respuesta #178 en: 29 de Abril de 2007, 08:51:30 »
Tengo problemas con Mkb, despúes de varias compilaciones de un mismo archivo, cuando vuelvo a compilar no me modifica el .hex, será alguna opción que desactive o alguna falladel programa?  :5]

Espero su respuesta.....

Gracias.
Nueve de Julio - Buenos Aires - Argentina

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comenzando con Mikrobasic
« Respuesta #179 en: 29 de Abril de 2007, 14:10:12 »
Que version de MKB usas, a mi me pasaba lo mismo y hasta me generaba un error y tenia que cerrar el programa y volverlo a abrir. con la que me daba esas broncas era con la version 5.0
"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."