Curso de programación de PIC en PICBasic Pro

prueba esto...
Código:
trisc=%10000000
Dato var word
serin portc.7, 2,dato    [COLOR="RoyalBlue"]' 2 para no-Invertido y 6 para  invertido[/COLOR]

if dato=79 then high portb.0 [COLOR="MediumTurquoise"] 'el 79 es el codigo ascii de la O[/COLOR]
If dato=67 then low portb.0   [COLOR="MediumTurquoise"]'el 67 es el codigo ascii de la C[/COLOR]
end
 
Gracias lubeck, solo unas preguntas
Exactamente que siginifica "No inveritdo" e "Invertido"
Porque el uC trabaja con el codigo ascii y no con el abecedario?, genera problemas al no manejarlo con el coidgo ascii?
 
Exactamente que siginifica "No inveritdo" e "Invertido"
si usas el max232 lo invierte debes poner el 6 osea que todos lo altos los recibe como bajos y viceversa...

Porque el uC trabaja con el codigo ascii y no con el abecedario?, genera problemas al no manejarlo con el coidgo ascii?

no se exactamente como lo envie el matlab pero seguramente envia el codigo ascii...
ahora intentalo de ambas formas pero me inclino por el codigo ascii...
 
Hola nuevamente,

Y sigo con la molestadera. Aquí adjunto la simulación del que me presenta varias alertas cuando se ha digitado la clave varias veces a ver si alguien me sabe orientar del por qué de estos mensajes.

Nuevamente gracias a quien decida colaborarme.
 

Adjuntos

  • CAMBIO DE SALIDA.rar
    75.9 KB · Visitas: 142
Viggiani...
puse la clave con cuatro digitos es 5678...
con el *(asterisco) se borra lo digitado...
tiene muchos detalles tu codigo y el esquema comparalo con el que puse...
a ver si es lo que necesitas...
 

Adjuntos

  • ALARMA MOTO CON CLAVE PIC16F628A.rar
    52.6 KB · Visitas: 274
Última edición:
Hola Lubeck,

Gracias ante todo por la ayuda. Sí, ciertamente tenía muchos detalles porque copie parte del código de varios ejemplos lo que resultó a la final con esos errores, ahora le quiero agregar para cambiar la clave y lo demás serán mensajes.

Cómo elimino el detalle que me manda el mensaje que indica que se excede la velocidad real o algo así según lo que entiendo en la simulación?

Como siempre, tu ayuda muy efectiva, muchas gracias de nuevo.
 
Última edición:
Cómo elimino el detalle que me manda el mensaje que indica que se excede la velocidad real o algo así según lo que entiendo en la simulación?

a veces es por la animaciones...
abre la ventana en menu : system->set animation options...

y ve si esta asi...
 

Adjuntos

  • Dibujo.JPG
    Dibujo.JPG
    29.1 KB · Visitas: 65
Última edición:
mmm.. y si restauras los valores predeterminados.... ahi mismo en el menu system->restore default settings.. si con eso no se arregla no se amigo... te lo debo... :D
pero es detalle del proteus...
 
Última edición:
Viggiani...
ahora le quiero agregar para cambiar la clave
codigo con cambio de clave...
para cambiar clave tiene que estar apagada la alarma(LED OFF o puerto Salida) y presionar Michi(#) e introducir la nueva clave de 4 digitos...

Código:
@ DEVICE pic16F628A
@ DEVICE INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
@ DEVICE WDT_Off ' Watchdog Timer ON
@ DEVICE PWRT_Off ' Power-On Timer
@ DEVICE BOD_Off
@ DEVICE MCLR_Off ' Master Clear Opción interno
@ DEVICE LVP_Off ' Bajo voltaje de programación
@ DEVICE CPD_Off ' Protección del código de memoria OFF
@ DEVICE PROTECT_Off' protección de código OFF
Define Osc 4
 
CmCon=7  
TrisA=%00001111
TrisB=0 
EEPROM 0,[5,6,7,8]

DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS
DEFINE LCD_DBIT 4     'DESDE EL BIT B.4 AL BIT B.7
DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO  DE CONTROL/DATOS EN EL PUERTO B
DEFINE LCD_RSBIT 1    'EN EL BIT B.1
DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 3     'EN EL BIT B.3
   
'----------------------
X        VAR BYTE
ALMACEN  VAR BYTE[4]
EPROM    VAR BYTE[4]
SALIDA   VAR PORTB.2
Flag     var bit
Cont     var byte
Var1     var word
'----------------------
 COLUMNA1 VAR PORTA.4
 COLUMNA2 VAR PORTA.7
 COLUMNA3 VAR PORTA.6
 FILA1 VAR PORTA.0
 FILA2 VAR PORTA.1
 FILA3 VAR PORTA.2
 FILA4 VAR PORTA.3
 '---------------------  
   
 x=0
 for cont=0 to 3
  READ cont,EPROM[cont]
 next cont
 '---------------------   
flag=0
gosub mmenu 
low salida
high porta.5
Inicio:
 Call Teclado
GOTO INICIO
END

   
Teclado:
 high COLUMNA1                               ' Columna 1 = 0
 If  FILA1 Then VAR1 = 1 :gosub keyc         ' tecla "1"
 If  FILA2 Then VAR1 = 4 :gosub keyc		 ' tecla "4"
 If  FILA3 Then VAR1 = 7 :gosub keyc		 ' tecla "7"
 If  FILA4 Then VAR1 = 10:gosub keyc		 ' tecla "*"
 low COLUMNA1                                ' Columna 1 = 1
 high COLUMNA2                               ' Columna 2 = 0
 If  FILA1  Then VAR1 = 2:gosub keyc         ' tecla "2"
 If  FILA2  Then VAR1 = 5:gosub keyc		 ' tecla "5"
 If  FILA3  Then VAR1 = 8:gosub keyc   	     ' tecla "8"
 If  FILA4  Then VAR1 = 11:gosub keyc		 ' tecla "0"
 low COLUMNA2                                ' Columna 2 = 1
 high COLUMNA3                               ' Columna 3 = 0
 If FILA1  Then VAR1 = 3 :gosub keyc		 ' tecla "3"
 If FILA2  Then VAR1 = 6 :gosub keyc		 ' tecla "6"
 If FILA3  Then VAR1 = 9 :gosub keyc		 ' tecla "9"
 If FILA4  Then VAR1 = 12:gosub keyc		 ' tecla "#"
 low COLUMNA3
RETURN        

keyC:
 if var1=12 then
  if not salida then toggle flag:x=0:gosub mMenu
 else  
  ALMACEN[X] = VAR1
  LCDOUT $FE,$C6+x,"*"
  x=x+1
  if x=>4 then Gosub verificar
  if var1=10 then LCDOut $FE,1,"DIGITE LA CLAVE":X=0
 endif
 PAUSE 500 
Return

mMenu:
if flag then 
 lcdout $FE,1,"INTRODUCIR CLAVE":
else
 lcdout $FE,1,"DIGITE CLAVE": 
endif 
return

VERIFICAR:
 IF FLAG THEN
  for cont=0 to 3
   WRITE cont,almacen[cont]:pause 10
   read cont,eprom[cont]
  next cont 
  LCDOut $FE,1,"CAMBIO CLAVE"
 ELSE
  X=1
  for Cont=0 to 3
   if almacen[cont]<>eprom[cont] then x=0
  next cont
  if x=1  THEN
   TOGGLE SALIDA
   LCDOut $FE,1,"CAMBIO DE ESTADO"
  else 
    LCDOut $FE,1,"CLAVE INCORRECTA"
  ENDIF
 ENDIF 
 pause 500
 flag=0
 gosub mmenu
 X=0
return

 

Adjuntos

  • Dibujo.JPG
    Dibujo.JPG
    71 KB · Visitas: 130
Última edición:
No te preocupes, ya bastante me ayudaste con eso, trataré de indagar un poco más pues recuerdo haber leido algo que tenía que ver, no recuerdo dónde así que a revisar todo.

Gracias de nuevo!!!
 
buenas agradezco la información que se comparte en este foro y deseo plantear un inconveniente estoy realizando un programa en microcode studio con el pic 18f4550 pero al compilar me aparece estos errores:contenidos en el formato PDF el codigo es el siguiente:

' CONTADOR ASCENDENTE DE 00 AL 99

DEFINE OSC 8

Dato var byte
Unidad VAR BYTE
Decena VAR BYTE

U0 VAR Unidad.0
U1 VAR Unidad.1
U2 VAR Unidad.2
U3 VAR Unidad.3
D0 VAR Decena.0
D1 VAR Decena.1
D2 VAR Decena.2
D3 VAR Decena.3

TRISD = 0

Inicio:

for Dato = 0 to 99

Decena = Dato/10
Unidad = Dato - Decena*10

PORTD.0 = U0
PORTD.1 = U1
PORTD.2 = U2
PORTD.3 = U3
PORTD.4 = D0
PORTD.5 = D1
PORTD.6 = D2
PORTD.7 = D3

pause 1000

next Dato

goto Inicio

he realizado varios programas pero siempre me generan los mismos errores agradezco la ayuda que me pueden brindar.
 

Adjuntos

  • errores de compilacion.pdf
    102.2 KB · Visitas: 89
Intentaste compilarlo con el MPASM

si usas el microstudio vas a view->compile and program option
ve si te aparece esto...
Dibujo.JPG
el mpasm lo descargas de la red...
lo compile y solo me mostró unos warnings(Advertencias)
 
gracias amigo pero tengo la versión 5.3 y compilo pero me aparecen los mismos errores y al querer copiar en la parte superior donde se escoge el tipo de pic para el proyecto cambia automáticamente a pic 16f628.
 
bien:LOL: listo el pollo es cuestión de instalación y determinar los fuses para aportar subo un programa de visualiza conversión A/D en lcd y su respectiva simulación con el pic 18f4550.
 

Adjuntos

  • pic.rar
    88.3 KB · Visitas: 166
:bien con el programa anterior realice un voltimetro DC de 0-5 aqui esta el programa:

Código:
Define LOADER_USED 1
Define OSC 48      
Define LCD_DREG  PORTD
Define LCD_DBIT  4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG  PORTE
Define LCD_EBIT  1


Define  ADC_BITS     10   
Define  ADC_CLOCK     3   
Define  ADC_SAMPLEUS 50  


MEDIDA   Var Word       
fullbars Var Byte       
barval   Var Byte       
partbar  Var Byte       
pad      Var Byte       

TRISA = %11111111    
ADCON1 = %00001010   
ADCON2 = %10000000   
        
Low PORTE.2          
Pause 500          

LCDOut $FE, 64, REP $0\8                                                      
LCDOut $0, REP $10\6,$0      
LCDOut $0, REP $14\6,$0     
LCDOut $0, REP $15\6,$0                          
LCDOut $FE, 1              

INICIO:
ADCIN 0,MEDIDA              
MEDIDA = (MEDIDA */ 500) >> 2 

LCDOut $FE, 2, "VOLTIOS DC= ", DEC (MEDIDA / 100), ".", DEC2 MEDIDA
barval = (MEDIDA / 9) + 1     
GoSub BARRA             
GoTo INICIO               

BARRA:
fullbars = (barval MIN 60) / 3       
partbar = (barval MIN 60) // 3                  
pad = 19 - fullbars                  
   
LCDOut $fe, $c0, REP $3\fullbars, partbar, REP " "\pad 
Return
End

Ahora deseo realizar la comunicación a usb para que se vea en pc por medio de comunicación USB con visual basic , delphi, c++ o labview. les dejo el proyecto hasta ahora ha espero no incomodar en el orden del foro:D
 

Adjuntos

  • PROYECT.rar
    98.5 KB · Visitas: 161
hola, tengo un problemilla con un proyecto que estoy realizando, quiero realizar una comunicacion con dos pic o mas por via infraroja, para lo cual quiero colocar como emisor un 16f628A y como receptor un 12c509A preferiblemente o si no tambien el mismo 16f628A, mi idea es codificar cada uno de los receptores con un numero especifico de tal manera que al enviar el numero especifico unicamente se active el receptor correspondiente, entonces me explico algo mejor, imaginemos que hay 50 televisores, bombillos, etc...que fungen como receptores y tengo un control remoto el cual tiene la funcion de activar cada uno de los dispositivos independientemente algo asi es lo que pretendo hacer por infrarojo. Intente hacerlo con SEROUT Y SERIN pero no logro hacer que el receptor lo interprete bien, no se si estoy el lo correcto y tengo muchas dudas les agradezco si me pueden echar una mano.

dudas.

1.- que tipo de comunicacion es mejor o me recomienda, serial, ic2, etc...
2.- es posible con estos pic utilizar este tipo de comunicacion o tiene que traer como hadware esta opcion.
3.- si es por ifrarojo es posible la comunicaion serial, ic2, etc...cual es la mejor?
4.- entre los lenguajes que vi estaba el asscii, estoy siempre es igual o puede ser binario para enviar un numero por alguno de los metodos mensionados.
5.- y por ultimo tambien pense hacerlo con rfpic, hay forma de programarlo con picbasic pro y que es mejor para una distancia maxima de 5 metros.

muchas gracias de ante mano.
 
Te doy mi opinion...
1.- que tipo de comunicacion es mejor o me recomienda, serial, ic2, etc...
yo diria que por codificacion de tonos...

2.- es posible con estos pic utilizar este tipo de comunicacion o tiene que traer como hadware esta opcion.
si fuera por tonos el hardware que necesitarias seria un pic en el mando para codificar los diferentes tonos, y en el recptor un decodificador preconfigurado a determinado tono unico...


3.- si es por ifrarojo es posible la comunicaion serial, ic2, etc...cual es la mejor?
la serial...
aunque tengo entendido que el i2c tambien es serial... creo que uno de los dos(o tu o yo) estamos confundidos en el concepto :D
4.- entre los lenguajes que vi estaba el asscii, estoy siempre es igual o puede ser binario para enviar un numero por alguno de los metodos mensionados.
en realidad el ascii es tambien binario lo que se manda via serial es binario y el compilador lo traduce a ascii segun corresponda el numero en binario...
5.- y por ultimo tambien pense hacerlo con rfpic, hay forma de programarlo con picbasic pro y que es mejor para una distancia maxima de 5 metros.
es la primer vez que oigo eso de rfpic, conozco lo modulos para pic en radiofercuencia con esos no tendrias la limitante de traer el mando o control y apuntar al receptor ademas de la distancia... tiene mas bondades la RF...y si, si es posible con picbasic
usese en caso de que RFPIC sea lo mismo que la radiofrecuencia...:D
 
Última edición:
Atrás
Arriba