Note: Label main marks the entry point of a program and must be present in the main module of every project. See Program Organization for more information.
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP no se en basic como serian estas configuraciones o si hacen falta.
hola esto va de escandalo por ahora es muy sencillo todo. Lo que me gustaria es que en vez de utilizar yo el pic16f84A estoy utilizando es el 16f648a y no me van todo lo bien que debiera.
Lo mismo es que tendria que añadir como en C los fuses pero en basic.
Asi es la configuracion de fuses que yo tengo en CCódigo: [Seleccionar]#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVPno se en basic como serian estas configuraciones o si hacen falta.
Predefined Flags
mikroBasic has several predefined flags for configuring hardware. These can be found in definition files (“defs” folder), specifying hardware settings for individual chips. SFR are sorted under categories: ___SFR (umbrella for all registers), ___CONFIG_OSC (oscillator), ___CONFIG_WDT (Watchdog timer), and ___CONFIG_BORPOR (brown–out reset and power–on–timer).
program x7seg_001
'----------SYMBOL--------------
Symbol CLOCK = PORTB.1
Symbol data = PORTB.0
Symbol reset164 = PORTB.2
Symbol sino = PORTB.3
'-----------DIM----------------
Dim col As Byte
Dim i As Byte
Dim aux As Word
'----Rutinas------------------
escribo:
For col = 1 To 16
If aux.0 = 0 Then
data = 1
delay_Us(2)
clock = 0
delay_Us(2)
clock = 1
delay_Us(2)
Else
data = 0
delay_Us(2)
clock = 0
delay_Us(2)
clock = 1
delay_Us(2)
End if
aux = aux >> 1
Next col
Return
'---Programa principal------------
main:
cmcon = 7
porta=0
'Configuro el portA:
TRISA.0 = 0 'Salida
TRISA.1 = 0 'Salida
TRISA.2 = 1 'Entrada H
TRISA.3 = 1 'Entrada M
TRISA.4 = 0 'Salida
TRISA.5 = 0 'Salida
'Configuro el portB:
TRISB.0 = 0 'Salida (DATA)
TRISB.1 = 0 'Salida (CLOCK)
TRISB.2 = 0 'Salida (RESET)
TRISB.3 = 0 'Salida (SI/NO)
TRISB.4 = 1 'Entrada DS1820
TRISB.5 = 0 'Salida
TRISB.6 = 0 'Salida
TRISB.7 = 0 'Salida
reset164 = 1
sino = 0
clock = 0
data = 0
'---------PROGRAMA PRINCIPAL------------
Delay_ms(500)
data = 1
delay_Us(2)
clock = 0
delay_Us(2)
clock = 1
delay_Us(2)
data = 0
delay_Us(2)
clock = 0
delay_Us(2)
clock = 1
delay_Us(2)
Delay_ms(1500)
loop:
aux = %1010101010101010
Gosub escribo
aux = %1010101010101010
Gosub escribo
Delay_ms(1500)
aux = %0101010101010101
Gosub escribo
aux = %0101010101010101
Gosub escribo
Delay_ms(1500)
Goto loop
End.
Y bueno checando los ejemplitos que estamos poniendo me surgio una duda, el ultimo ejemplo que puso Paola, en el que usa Includes, la pregunta es. ¿en lugar de poner Includes se puede poner sub procedimientos y hacer saltos con gosub no? cual es la ventaja y desventaja de esos Usos?
Otra cosa que note, es que MKB permite utilizar una bariable para trabajar con un pin X de un X puerto, lo veo en el ejemplo de samshiel_pic :
Hasta donde recuerdo ni PBP ni proton permitian eso
con lo de "con el basic que usaba antes" te refieres a una version anterior del mismo MKB o a una de PBP o Proton.
3:2 E-14 Identifier "c" has been already declared in p16f877.pbas ADCBlink.pbasse debe a que la variable C aparentemente se ha declarado en el archivo p16f877.pbas, seguramente para nombrar al puerto C.....
50:1 E-1 'end' is not a valid identifier ADCBlink.pbaspueden deberse a algun espacio de mas al final del "end." o bien a que interprete el END del "END SELECT" como final del programa.... aunque consultando la ayuda parece estar bien escrito..
50:4 E-4 Syntax error: Expected 'as' but '.' found ADCBlink.pbas
51:1 E-37 Unknown type "" ADCBlink.pbas
Hola a todos, me alegro mucho de que le esteis metiendo caña a Mikrobasic por aqui, os ofrezco mi ayuda en lo que necesiteis, tambien aprobecho para decios que en mi web (biblioteca) hay codigos y utilidades muy utiles para Mkb
Hola navaismo!
Por el texto del mensaje, me suena a un posible conflicto de tipos, entre "word" y "real"....
Podes postear el codigo?
Esta Genial samsheil gracias a ver si Lord puede hacer una pagina antes para que solo se vea el indice
program Pwm_Test
dim j as byte
main:
j = 0
PORTC = $FF ' Initialize PORTC
Pwm_Init(5000) ' Initialize PWM module, freq = 5kHz.
Pwm_Start ' Start PWM
while true
for i = 0 to 20
Delay_us(500)
Inc(j)
Pwm_Change_Duty(j) ' Change duty ratio
wend
end.
..... He montado bien el circuito pero en vez de usar el PIC18F452 he usado el PIC16F876, he cambiado los pines para adaptar el circuito al pic16F876, tambien he puesto he puesto bien en el MKB el tipo de pic y el reloj, me compila bien, tengo bien configurado el Winpic800 y me graba bien el pic porque tambien he probado otras cosas como encender/apagar led y esta comprobado que me lo ha grabado bien.
Espero una ayudita de este maravilloso foro.
Saludos.
select case PORTA
case 3 ' o lo que es %00000011
Gosub Mov_1
case 12 ' o lo que es %00001100
Gosub Mov_2
......................' y asi para cada caso definiendo que es lo que pasa cuando nada es apretado
end select
Mov_1:
' tus sentencias
return
select case A
case 1
portb.0=1
case 2
portb.=0
end select
select case PORTA
case 0 'o todos los puertos apagados 00000 lo k es cada valor para cada RA0-RA4
gosub nada
case 1 'solo RB0 encendido 00001
gosub prende1B
case 2 ' solo RB1 encendido 00010
gosub x
case 3 ' Rb0 y Rb1 00011
..............
Esse é meu 3º post no FORUM (FORO) , então para aqueles que ainda não me conhecem, sou brasileiro, então acho que a compreensão entre os idiomas sejá facil. Por isso escrevo em portugues, aqui no Brasil há poucos forum iguais a este. Com tantas informações.
Estou tentando todos os programas em Basic , MIKROBASIC, PROTUES, PICBASIC, e verificando a parte boa e ruiim de cada um, porem tenho uma duvida, sei que este espaço é para MIKROBASIC, porem tenho uma duvida que é como configura o oscilador interno em todos os 3 software.
Desde já agradeço a ajuda. (GRACIAS) :mrgreen:
Ivan Braga
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.Tengo otro problema :8}, resulta que el sensor que uso es un vulvo resistivo pero logaritmico el guacho :shock:, alguien sabe como hacer el calculo? es sobre el mismo codigo que les mostre antes.
Gracias de antemano y espero sus respuestas.
Sí puedes, configurando el TRIS como necesites.
inicio:
if PORTB.0 = 0 then
high 1
else
low 1
endif
goto inicio
endprogram luces
TRISB=0
MAIN:
if PORTB.0 = 0 then
PORTB.1=1
else
PORTB.1=0
'DELAY_MS(500)
end if
GOTO MAIN
END.
program test
MAIN:
TRISB=%00000001
portb=0
while (true)
if PORTB.0 = 0 then
PORTB.1=1
else
PORTB.1=0
'DELAY_MS(500)
end if
wend
END.
program luces
MAIN:
TRISB=%00000101
portb=0
while (true)
if PORTB.0 = 1 then
if PORTB.2=1 then
PORTB.1=1
DELAY_MS(1000)
else
PORTB.1=0
end if
else
PORTB.1=0
end if
wend
END.program luces
MAIN:
TRISB=%00000011
portb=0
'portb.0 llave AND (PORT.1=1)
'portb.1 swtich
'portb.4 luz izq.
'portb.5 luz der.
while (true)
if (PORTB.0=1) then
if (PORTB.1=1) then
PORTB.4=1
PORTB.5=1
end if
if (PORTB.1=0) then
PORTB.4=0
PORTB.5=0
end if
else
if (PORTB.0=0) then
if (PORTB.1=1) then
if (PORTB.4=1) AND (PORTB.5=1) then
delay_ms(3000)
PORTB.4=0
PORTB.5=0
delay_ms(300)
PORTB.4=1
PORTB.5=1
delay_ms(500)
PORTB.4=0
PORTB.5=0
else
PORTB.4=0
PORTB.5=0
end if
end if
if (PORTB.1=0) then
PORTB.4=0
PORTB.5=0
end if
end if
end if
wend
END.
Sera que pregunto boludeses, o somos pocos los que usamos MKB.
Carlitos.
Tengo un problema, coloque un LCD 20x4 donde tenia instalado un 16x2 por lo cual tuve que usar la libreria
Lcd_First_Row = 0
Lcd_Second_Row = 0
Lcd_Third_Row = 0
Lcd_Fourth_Row = 0
me encuentro con el problema que antes con el LCD 16x2 estaba usando RA2 y RA3 como entradas analogicas y todo funcionaba bien, ahora que uso el LCD 20x4 no enciende a menos que borre el codigo de una de las dos entradas.
Estoy usando un 16f876a. :shock:
Gracias.
Hola, la verdad es que me da un poco de verguenza poner por aki el código q estaba haciendo, porq me imagino que no estara muy bien, pero no se como solucinar el problema que tengo. Estoy haciendo una practica la cual consta de un lcd, en el que al iniciarse aparece un menu, en el que te da a elegir dos opciones: o eliges el valor 1 o el valor 2,( los cuales se eligen mediante pulsadores RA03 Y RA04) si elegimos el valor 1 nos lleva a otra pantalla donde nos indica que hemos elegido el numero 1 y lo mismo sucede si hubieramos elegido el valor 2, para volver al menu inicial bastaria con pulsar los dos pulsadores a la vez, estoy utilizando un 16f84 con un lcd de 2x 16. El problema que tengo es que cuando le doy para crear el .hex, me dice que no hay memoria ram suficiente o algo asi : 0:0 E-0 Linker error: Not enough RAM row __lib_lcd8custom.ppas y 0:0 E-0 Linker error: Not enough RAM out_char __lib_lcd8custom.ppas y no me deja compilarlo. Supongo que cambiando a otyro pic mas potente no habria problema, pero tambien supongo que mi programa es muy básico y no lo estoy jhaciendo bien, estoy consumiendo mas memoria de lo se deberia,.
program menulcd
dim a as byte
dim b as byte
Sub procedure menu1
Lcd8_Cmd(Lcd_clear)
lcd8_cmd (Lcd_Blink_Cursor_On)
Lcd8_Out(1, 1,"has elegido 1")
Lcd8_Out(2,1,"volver:pulsa 1y2")
End Sub
Sub procedure menu2
Lcd8_Cmd(Lcd_clear)
lcd8_cmd (Lcd_Blink_Cursor_On)
Lcd8_Out(1, 1,"has elegido 2")
Lcd8_Out(2,1,"volver:pulsa 1y2")
End Sub
main:
TRISB = 0
TRISA = %11000
Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2)
Lcd8_Cmd(Lcd_clear)
lcd8_cmd (Lcd_Blink_Cursor_On)
Lcd8_Out(1, 1,"pulsa una opcion")
Lcd8_Out(2,3,"1 o 2")
if PORTA.4 = 1 then
menu1
a =1
else
goto main
end if
if PORTA.5 = 1 then
menu2
b =1
else
goto main
end if
if a = b then
goto main
end if
end.
Gracias de antemano, un saludo.
program lcdtempo
dim contador as word
dim segundo as char
sub procedure interrupt
inc(contador) ' Incrementamos el valor de counter cada vez que se produce la interrupcion
TMR0 = 96
INTCON = $20 ' T0IE = 1, T0IF = 0
end sub
main:
TRISB = 0
TRISA = %11000 '..... definiciones
OPTION_REG = $84 ' Asignacion del prescaler al Timer0
contador= 0 ' Inicializacion de contador
TMR0 = 96
INTCON = $A0 ' Habilitamos la interrupcion del TimerO
Lcd8_Init(PORTB,7,6,5,4,3,2,1,0, PORTA,0,1,2)
Lcd8_Cmd(Lcd_clear)
lcd8_cmd (Lcd_Blink_Cursor_On)
Lcd8_Out(1, 1,"Tiempo restante:")
segundo ="0"
while TRUE
if contador= 400 then ' Si el contador es 400, incrementamos en 1 la variable segundo y reseteara counter
inc ( segundo)
Lcd8_Out(2, 7, "segundo" ) ' muestra el valor de segundo en la 2 linea del lcd
contador = 0
end if
if porta.4 = 1 then ' resetea contador
segundo = "0"
end if
wend
end.
Hola Compañeros, tengo un problema. Estoy usando un LCD 4X20, si lo conecto en 4 bit y uso este codigo:
Lcd_Config(PORTB,4,1,3,2,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)
Funciona bien.
Ahora cuando lo conecto a 8 bit no funciona, por supuesto en vez de usar LCD_CMD uso LCD8_CMD y hago las 4 conecciones restantes, no funciona.
¿Les, paso? :shock:
Gracias.
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
program gps_other
'PIC16F628A
'lcd 2x32
'serial gps on rb1
dim rxIndex as byte
dim rxDone as byte
dim rxGPSData as byte
dim rxDataGarbage as byte
dim conta as byte
dim GP as char[10]
dim sincro as char[7]
dim UTC as char[10]
dim Latitudine as char[10]
dim Longitudine as char[10]
'dim Altitudine as char[4]
dim NS as char[1]
dim EW as char[1]
'dim SatNum as char[4]
dim Ora as char[10]
dim NSLatitudine as char[11]
dim EWLongitudine as char[12]
'Questa e' la successione di stringhe del mio GPS 4800bps 8 n
'$GPGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0*00
'$GPGSV,3,1,09,01,30,312,00,02,24,112,00,04,28,063 ,00,05,77,128,00*73
'$GPGSV,3,2,09,06,15,209,00,14,38,269,00,20,10,000 ,00,25,13,309,00*77
'$GPGSV,3,3,09,30,58,254,00,,,,,,,,,,,,*4D
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
'$GPRMC,204620.999,V,4530.6671,N,00916.9484,E,0.0, 0.0,250805,0.0,W*63
'Io analizzo solo la stringa
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
' ora UTC lat N/S long E/W
main:
lcd_init(portb)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
' lcd_cmd( LCD_CURSOR_OFF) ' send command cursor off
lcd_out(1,1,"GPS data") ' print txt to LCD, 1nd row, 1st column
USART_init(4800)
'Lcd_Config(PORTA,2,3,0,7,6,1,4)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
lcd_out (1,9,"Attesa...") 'modif.
inizio:
Ora = " "
GP = " "
sincro = " "
rem NSLatitudine = " "
rem EWLongitudine = " "
rem Altitudine = " "
rem SatNum = " "
if USART_Data_Ready=1 then
rxDataGarbage = USART_Read
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
end if
'filtro frase "$GPGGA,"
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="$") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="P") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="A") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData=",") then
rxDone = 1
else goto inizio
end if
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
UTC[rxIndex] = rxGPSData ' UTC (ora)
if (rxGPSData=44) then
rxdone=1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
Latitudine[rxIndex] = rxGPSData ' Latitudine
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
NS[rxIndex] = rxGPSData ' Nord o Sud
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
Longitudine[rxIndex] = rxGPSData ' Longitudine
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
EW[rxIndex] = rxGPSData ' Est o Ovest
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
' Crea l'array ora
ora[0] = UTC[0] 'ore "20"
ora[1] = UTC[1]
ora[2] = ":"
ora[3] = UTC[2] 'minuti "46"
ora[4] = UTC[3]
ora[5] = ":"
ora[6] = UTC[4] 'secondi "20"
ora[7] = UTC[5]
' Crea l'array NSLatitudine
NSLatitudine[0] = Latitudine[0] ' gradi
NSLatitudine[1] = Latitudine[1] ' gradi
NSLatitudine[2] = "'" ' apice
NSLatitudine[3] = Latitudine[2] ' primi
NSLatitudine[4] = Latitudine[3] ' primi
NSLatitudine[5] = Latitudine[4] ' punto per decimali
NSLatitudine[6] = Latitudine[5] 'decimali
NSLatitudine[7] = Latitudine[6] 'decimali
NSLatitudine[8] = Latitudine[7] 'decimali
NSLatitudine[9] = Latitudine[8] 'decimali
NSLatitudine[10] = " "
NSLatitudine[11] = NS[0] 'nord/sud
' Crea l'array EWLongitudine
EWLongitudine[0] = Longitudine[0] ' gradi
EWLongitudine[1] = Longitudine[1]
EWLongitudine[2] = Longitudine[2]
EWLongitudine[3] = "'"
EWLongitudine[4] = Longitudine[3] ' primi
EWLongitudine[5] = Longitudine[4]
EWLongitudine[6] = Longitudine[5]
EWLongitudine[7] = Longitudine[6]
EWLongitudine[8] = Longitudine[7]
EWLongitudine[9] = Longitudine[8]
EWLongitudine[10] = Longitudine[9]
EWLongitudine[11] = " "
EWLongitudine[12] = EW[0]
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(2,1," ") '11 spazi vuoti x pulire
lcd_out(1,1,"UTC: ")
lcd_out(1,6,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
'delay_ms(3000)
lcd_out(3,1,"Lat: ")
lcd_out(2,6,NSLatitudine)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(3,1,"Lon: ")
'delay_ms(3000)
'lcd_out(3,6,EWLongitudine)
'delay_ms(3000)
'lcd_out(2,19," ") ' spazi vuoti x pulire
goto inizio
end.program lcd_2_x_32
'gestione std 4x20
'infatti prima riga 1 e 3
'seconda riga 2 e 4
dim Ora as char[10]
dim NSLatitudine as char[12]
Ora="22:44:30 "
NSLatitudine="+44'24.3817N"
lcd_init(portb)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(1,1,"UTC:")
lcd_out(1,5,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
NSLatitudine="+44'24.3817N"
'delay_ms(3000)
lcd_out(2,1,"Lat:")
lcd_out(2,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(3000)
lcd_out(1,1,"Lat:")
lcd_out(1,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(2000)
lcd_out(2,1,"UTC:")
lcd_out(2,5,ora)
delay_ms(3000)
end.program GenerarPWM
dim cont,DutyCyc,a as byte 'Definimos Variables a utilizar
'cont=Conteo
'DutyCyc=DutyCycle
'a=activacion y seleccion de pin de salida
sub procedure interrupt
TMR0=217 'Para que el desborde ocurra cada (256us-217us)*256=10ms
'Es decir el Periodo de PWM es de 1000ms
'Para variar el Periodo puedes variar el limite de conteo o
'puedes variar el valor del preescaler.
cont=cont+1
if cont<=DutyCyc then 'Si el conteo es menor o igual que el DutyCycle entonces
PORTA=a 'El PORTA tendra el valor de a ej. a = 2dec = 00000010bin
else 'de lo contrario
PORTA=0 'el PORTA sera 0
end if
if cont>=100 then 'Si el conteo es mayor o igual a 100
cont=0 'se reiniciara a 0
end if
INTCON.T0IF=0 'Desactivamos el flag de interrupccion del TMR0 para poder
'salir de la interrupcion sino entrara infinitamente
end sub
main:
TRISA=0 'todas como salida
TRISB=255 'todas como entrada
OPTION_REG=%00000111 'Resistencias de weak pull-up desabilitadas
'Fuente de reloj para TIMER0 interna (CLKOUT)
'Asignacion de Preescaler al TIMER0
'Preescaler 1:256
INTCON=%10100000 'Interrupciones Generales Habilitadas
'Interrupcion por desbordamiento del Timer0 habilitada
DutyCyc=50 'Se carga DutyCycle con valor inicial de 50
while 1
if PORTB then 'Si alguno de los pines del puerto se ha pulsado
if PORTB.0 then 'Si pulso RB0
Delay_5ms 'Espera para los rebotes
while PORTB.0 wend 'Espera hasta que deje de pulsar
a=a+1 'incrementa a
if a>2 then a=0 end if 'si a es mayor que 2 entonces a=0
end if
if (PORTB.1=1)and(DutyCyc<100) then 'Si pulso RB1 y DutyCycle menor a 100
Delay_5ms 'Espera 5ms para los rebotes
while PORTB.1=1 wend 'Espera hasta que deje de pulsar
DutyCyc=Dutycyc+10 'Incrementar en 10 el DutyCycle
end if
if (PORTB.2=1)and(DutyCyc>0) then 'Si pulso RB2 y DutyCycle menor a 0
Delay_5ms 'Espera para los rebotes
while PORTB.2=1 wend 'Espera hasta que deje de pulsar
DutyCyc=Dutycyc-10 'Decrementar en 10 el DutyCycle
end if
end if
wend
end.
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.
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
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
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.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 (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.
program serie
sub procedure serie()
Usart_Init(9600)
Usart_Write("h")
Usart_Write("o")
Usart_Write("l")
Usart_Write("a")
delay_ms(1000)
end sub
main:
serie()
end.
Hola muchachos NECESITO que por favor me ayuden con el siguiente codigo
Quiero hacer lo que esta en este video..
NR=1
Pero no se como hacer en MikroBasic, ya que esta en un lenguaje no conozco, si alguien podrai traducirmelo
o indicarme como hacerlo, se lo agradecira :(
Pd: en el adjunto dejo el diseño del video en proteus.
Intente hacerlo de esta manera:
Pero no me funciono :s
Vean el vídeo pro favor y orientarme, sin mas que decir. gracias.!!
program PTOSERIE
DIM DATA AS BYTE 'VARIABLES DE TRANSMISION Y DEL FOR
MAIN:
TRISB=0
PORTB.3 = 1 'ENCENDIDO DE UN LED PARA VER QUE FUNCIONA
SOFT_UART_INIT(PORTA,1,2,1200,0) 'CONFUIGRACION COMUNICACION SERIE: PORTA.2=RX; PORTA.1=TX BAUD=T1200
DELAY_MS(1000) 'PAUSA DE UN SEGUNDO
PORTB.3 = 0 'APAGO DE LED; FIN DE LA CONFIGURACION
ENVIO:
FOR DATA=0 TO 10
SOFT_UART_WRITE(DATA) 'ENVIO DE DATOS
DELAY_MS(1000)
NEXT DATA
FOR DATA=10 TO 0 STEP -1
SOFT_UART_WRITE(DATA) 'ENVIO DE DATOS
DELAY_MS(1000)
NEXT DATA
GOTO ENVIO 'ciclo infinito
END.
program Pserie
DIM DATA AS string[4] 'VARIABLES DE TRANSMISIÓN Y DEL FOR
MAIN:
TRISB.3=0
PORTB.3 = 1 'ENCENDIDO DE UN LED PARA VER QUE FUNCIONA
SOFT_UART_INIT(PORTB,1,2,9600,0) 'CONFUIGRACION COMUNICACION SERIE: PORTA.2=RX; PORTA.1=TX BAUD=T1200
DELAY_MS(1000) 'PAUSA DE UN SEGUNDO
PORTB.3 = 0
'APAGO DE LED; FIN DE LA CONFIGURACION
'ENVIO:
DATA="hola"
SOFT_UART_WRITE(data[0]) 'ENVIO DE DATOS
DELAY_MS(1000)
SOFT_UART_WRITE(data[1])
DELAY_MS(1000)
SOFT_UART_WRITE(data[2])
DELAY_MS(1000)
SOFT_UART_WRITE(data[3])
DELAY_MS(1000)
DELAY_MS(1000)
'GOTO ENVIO 'ciclo infinito
END.
sub procedure escribir()
'while true
delay_ms(9000)
Usart_Write_text("no funciona") ' Send data via USART
delay_ms(5000)
'wend
end sub
main:
Usart_Init(9600)
escribir()
UART1_Write()
Que tal Jorge.
La terminal en proteus, si te fijas en las herremientas, por defecto izquierda, tienes "Virtual Instrument mode" donde tienes la virtual terminal.Código: [Seleccionar]UART1_Write()
Supongo que es lo que buscas, de todas maneras mikrobasic no lo he utilizado nunca, pero aquí tienes una buena referencia. AQUÍ (http://www.mikroe.com/eng/downloads/get/37/mikrobasic_pic_pro_manual_v101.pdf)
Salu2
Gracias Dayes, ha funcionado.. ^^
Bueno ahora ver como coencto todo esto a un celuclar y poder enviar sms
a otro dispositivo celular. gracias. dayes ^^
Gracias Dayes, ha funcionado.. ^^
Bueno ahora ver como coencto todo esto a un celuclar y poder enviar sms
a otro dispositivo celular. gracias. dayes ^^
Me alegro que te haya servido, no se con que celu te vas a conectar, o si es un módulo. Estoy comenzando un proyecto con un módulo GSM que tb me comunico con el mediante hayes (comandos AT). Ya estube trabajando con esto, aasí que espero avanzar rápido, lo digo por si necesitas una mano con tú proyecto/pruebas. Lo malo que lo estoy desarrollando en C, debido a que es gratuito y no quería tener problemas con licencias y esas cosas...
Bueno lo dicho Jorge, para eso estamos en este foro, para echarnos manos, y a ser posible que no sean al cuello, jaja. :D :D :D
Salu2
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!!
program ejercicio1
main:
' Main program
trisa=%00000
PORTA.4=1
delay_ms(50)
porta.4=0
delay_ms(50)
porta.3=1
delay_ms(50)
porta.3=0
delay_ms(50)
porta.2=1
delay_ms(50)
porta.2=0
delay_ms(50)
porta.1=1
delay_ms(50)
porta.1=0
delay_ms(50)
porta.0=1
delay_ms(50)
porta.0=0
delay_ms(50)
goto main
end.
RA4 es un pin Colector Abierto. Esto significa que debes conectar una resistencia de pull-up a Vcc, lo cual te permitirá producir el 1 y 0 lógico necesario para salidas TTL.
Estimados, muy buenas.
No he encontado una consulta similar, por ello la realizo, pido disculpas si ya se hizo, y no la ví, como asimismo si no está realizada en el foro adecuado.
He comprado la EasyPic7 y soy un novato usuario de éste producto y se me presenta una duda, es correcto (según mi interpretación) que todos los pulsadores de los puertos son seteados como Pull-Up ó Pull-Down a la vez, a través del jumper J17?, o sea que si necesito en un trabajo tener entradas como 1 y 0 no me será posible.
Desde ya muchas gracias.
Saludos.
PORTA = 0 //Limpias todos los valores de PORTA
ANSEL = 0 //Declaras que todas las entradas son digitales
TRISA = 0x0C //RA3 y RA2 entradas los demás pines salidas.
Osea la LCD funciona has la frecuencia de los 16 mhz del pic...............pues recierden que activando el pll del pic se multiplica internamente la frecuencia por 4 osea de 16mhz con el pll se comvierte en 64 mhz y necesito esa precuencia por que necesito generar un tren de pulsos ajustables que se generan con TMR0 y el TMR1..................gracias de antemano
Buenas tardes.............te explico uso la libreria del LCD en modo de 4 bir del MikroBasic, por lo tanto ajusta el automaticamente esos tiempo, la otra libreria que uso es Botton, para el uso de pulsadores para los menu, no uso delays pues la librerias se encargan de eso, el pin de reset del micro lo active y desactive pero todo igual he pensado en de repente hacer un reajuste en la libreria del LCD pero no se su formato ni donde encontrarla, pues quisas hay que modificar lo retardos y necesito el procesador a 64 Mhz
Pense inclusive usar la tecnica de usar la pantalla con 3 pines y asi controlar los tiempo necesarios para que funcione la LCD a esa frecuencia................tienes informacion como hacer eso con 3 pines??.............lei hace un tiempo eso pero no encuentro en que lugar fue..............usan un registro de desplazamiento si mas no me equivoco............
haaaaa.........buen entre aqui por que decia comenzando con mikrobasic...............crei que tenian una idea mas clara o mas experiencia en estos menesteres........... :shock: