Curso de programación de PIC en PICBasic Pro

disculpa la demora se desconecto la maquina...alli va el archivo la diferencia es que no use el pin del colector para evitar la resistencia pull-up.

sabes yo incluso utilice los pines tx y rx del pic por si acaso habia algun conflicto?
 

Adjuntos

  • PRUEBA 3.rar
    49 KB · Visitas: 182
Última edición:
pero el codigo no esta igual en el serin ni en el serout asi no va a funcionar ya me confundi...

tu lo tienes asi...
serout portb.2,T2400,[a]
y yo asi
serout puls,T9600,["A",#ID,10]

el puls se cambia por el portb.2 en eso no hay problema...

la "A" es para que los serin de todos los receptores esten a la espera de que les llegue una A para verificar el dato siguiente... que es el dato que este en el #ID, y el 10 es para que finalice el envio...
o cual es tu idea???
 
bueno ya realice varias pruebas, y al final uso: serout puls,T9600,["A",#ID,10] ya lo entendi bien asi, ahora hubo unas confuciones fue porque a nivel de conexiones hay varias direfencias, yo utilize el el pin portb.2 del mando para enviar los datos y tu el portb.0 no se si esto influya pero yo lo utilice porque dice Tx, y por otra parte la salidad del led indicando que el dato que esperaba recivir es correcto, de resto todo lo demas esta bien, espero no haber echo un mucho despelote, en fin, para mi es indiferente la cuestion es que funcione, y lo demas es cuestion de adaptarlo, probe colocando diferentes letras y si las diferencia, pero aun hay que darle dos veces al boton para que salga el caracter en el virtual terminal.

lo he logrado de momento la meta de hoy muchas gracias amigo "lubeck" de verdad, de momento logre adaptarlo a lo que requeria el sistema de momento en simulacion funciona logre conectar al 16f628A unos 3, 12f629 que estan como receptores los cuales cada uno tiene una letra especifica y al enviar esa letra en codigo asscii a traves del teclado un unico 12f629 se activa permaneciendo los demas en espera, lo que indica que si descriminan y lo se activan a lo loco. te adjunto la simulacion con todos los programas hice 10 programas en total en basic para los receptores. hay 10 carpetas. por otro lado esta la simulacion de los 16f628A para pruebas. y la del sistema completo con tres 12f629, que es la que esta funcionando en simulacion....hablamos luego y gracias de nuevo...saludosss


PD: Por cierto encontre unas paginas interesantes con respecto a los comandos que soportan los pic, en el pbp, las encontre debido a que queria utilizar el 12c509A en vez del 629, pero no soporta el serin...saludosss

http://melabs.com/support/12-bit.htm
http://www.rentron.com/picbasic/products/picbasic-pro.htm
 

Adjuntos

  • CASI FINAL.rar
    112.7 KB · Visitas: 187
Última edición:
pero no soporta el serin.

lei la pagina y creo que lo que no soportan es el serin2 y el serout2 es diferente al serin y serout...
o estare mal???

por otro lado sugiero que en los programas para los identificadores creo que podrías utilizar el mismo programa para todos y nada mas cambiar el identificador de los receptores utilizando el eeprom, a ver si fui claro!
 
Última edición:
claro que voy a utilizar un solo programa, lo hice asi para hacer las pruebas y no confundirme a la hora de la simulacion, con respectoa la eeprom he visto unos cuantos programas que usan eeprom del pic pero no me he dedicado a utilizarlo. del serin y serout, no lo dice en la pagina pero no me permite compilarlo el microcode, utilice exactamente el mismo programa pero con el 12f629 y lo compilo sin problemas por eso deduje que era por memoria a demas que en la pagina que me hablaba de sertou2 y serin2.

PD: por ceirto lo simulaste que te parecio?
 
por ceirto lo simulaste que te parecio?
va bien... nada mas se me ocurrio eso de hacerlo con el eeprom y no estar cambiando el codigo para ponerle eso de A B C D etc sino que lo saque del eeprom...

voy a verificar eso del serin y serout... solo por comprobar el dato... gracias por la aclaracion...
 
una manera seria, que sea programable desde una consolsa, me explico: pongamos que tenemos en el mando un teclado y un lcd el cual nos permite muchas cosas entre echas visualizar que esta ocurriendo. pongamos una parte del programa como programacion tipo menu en el display. seleccionando programar teniendo un solo receptor encedido claro. se le coloca una letra por ejemplo P para que cuando cualquiera de los receptores la reciba se coloque en una subrutina de espera, la cual a partir de alli el dato que reciba lo guarde en la eeprom y quede configurado con ese dato programado por infrarojo que tal?
 
dale estoy ahorita dandole unos toques finales a los dos programas, si me podrias ayudar con lo de la eeprom como guardar en ella como configurar...etc... te lo agradeceria

logre colocar una señal de bandera de lectura, que significa esto, que ahora el receptor se sincroniza mas aun con el emisor, al presionar el boton el mando genera una señal para preparar al receptor para recivir los datos garantizando asi que se lea correctamente la informacion. no es mas que un retardo de 100ml

ahora vi dos comandos que al parecer cumple la misma funcion cual seria la diferencia entre "DATA" Y "EEPROM"?

quisera saber como puedo hacer algo asi:

@ device pic12f629,intrc_osc,wdt_off,pwrt_off,mclr_off,protect_off
INCLUDE "modedefs.bas"
Define Osc 4
CMCON = 7

TRISIO = %00001001
gpio = %00000000

Puls var gpio.0
B0 var byte
main:
IF GPIO.0 = 1 THEN
GOSUB LEE
ELSE
GOTO MAIN
ENDIF


LEE:
PAUSE 100
serin puls,T9600,["A"],#EEPROM 'como le digo que lo guarde en la eeprom?
IF EEPROM = "A" THEN ' y como lo leo luego?
gpio.2 = 1
endif
goto main
 
Última edición:
de nuevo con un pequeño analsis mas con respecto a la exprecion siguiente:

SEROUT Pin,Mode,[Item[,Item...}][/size]​

serout PIN,T9600,["A",#ID,10]

ya tengo un rato jugando y peleando con esto, la primera parte "serout" no es mas que el nombre del comando.

la segunda "PIN" es el pin por donde se piensa enviar la informacion. ejemplo: portb.1

la tercera "MODE" esto se refiere a una tabla de Baud rate osea la velocidad de transmision de los datos por decirlo de forma general.Por lo cual hay 2 maneras distintas de colocar mode, si se va a trasmitir a 9600 entonces es T9600 ò 2. en total hay 15 modos en la tabla del manual para serout.[/size]

cuarta los "INTEMS" no son mas que lo que se pretende enviar, hay varias cosas interesantes aqui:

no es lo mismo?

["foro",#var,10] 'en este caso envia una sarta de caracteres independientes.

["f","o","r","o",#VAR,10] 'en este caso es exactamente lo mismo

estoy me llevo tiempo descubrirlo que pasa, para el primer caso es un resumen del segundo asi de simple.

continuando...

#VAR, se le coloco var por que puede ser el nombre de una variable, o un simbolo, numero, letras. en fin algo que este dentro de los valores ascii, ahora al lado de var hay un numeral, este me dio unos cuantos dolores de cabeza que gracias a lubeck y proteus logre descubrir, resulta que al enviar una variable con # enviamos el codigo ascii de esa variable, numero o letra que este alli, osea si es A lo que va salir es 65, ejemplo de 5 casos:

serout PIN,T9600,[#A] 'envia en codigo ascii el valor de la variable A
' si la variable A vale B entonces envia A67 que
'corresponde en la tabla ascii con B.

serout PIN,T9600,[A] 'envia el valor de la variable A si es B sale B
'a diferencia del anterior no se codifica osea
'al llegar al otro estremo no hay que decodificarlo.

serout PIN,T9600,["A"] 'envia la letra A no el codigo 65 si no la letra esto segun
'el virtual terminal.

serout PIN,T9600,[65] 'envia la letra A no el codigo 65 si no la letra esto segun
'el virtual terminal igual al anterior.


serout PIN,T9600,[#"A"] 'envia el codigo 65 segun
'el virtual terminal.


siguiendo...

los otros dos items una varible y el LF.
Line Feed: salto de linea, pero para el pbp es la señal de finalizacion de lectura, le indica al receptor que termino la transmision.​

conclusion:
para resumir un poco ya explicado lo anterior, el comando serout, envia 2 items de los cuales el primero es de sincronizacion o señalizacion para para iniciar la lectura y el segundo son los datos a leer, el tercero indica la finalizacion de envio de datos esto hablando de pic a pic.​

SEROUT Pin,T9600,["A","b",10] 'señalizo con A y envio B. enviando...

SERIN Pin,T9600,["A"],VAR 'espero la señalizacion con A y guardo el siguiente
'caracter en VAR osea A.

bueno espero esto aclare y genere dudas para debatir mas al respecto no se me hace sencillo pero por algo hay que empezar espero criticas construtivas...saludos
 
Última edición:
orale!!!!!!!!!

no me gusta leer tanto... me lo podrias poner en numeros!!! jajajaja (broma)

ahora vi dos comandos que al parecer cumple la misma funcion cual seria la diferencia entre "DATA" Y "EEPROM"?
es casi lo mismo se usa una sola vez al inicio y es lo que graba en el pic cuando se graba en el quemador despues se tiene que utilizar el write y el read para modificar la eeprom

el Data utiliza hexadecinal o binario segun como lo pongas
ejemplo data @5,$0A,$14 ,$1E
el eeporm utiliza decimal y lo convierte a hexadexcimal
ejemplo EEPROM 5,[10,20,30]

los dos grabaran lo mismo en el eeprom

Te debo lo demas dejame leerlo... :D
 
Última edición:
ok digramos que tengo un serin y guardo un caracter en una variable para pasarlo a la eeprom
seria:
eeprom 5,variable?
y para sacarlo de la eeprom
read 5,variable?
 
Código:
data    @2,$07,$DF [COLOR="Blue"]' graba esto al quemar el pic en la eeprom[/COLOR]

read    2,passd.highbyte [COLOR="blue"]'lee la posicion2 que es 07 y lo coloca en la parte alta del byte[/COLOR]
read    3,passd.lowbyte [COLOR="blue"] 'lee la posicion3 que es DF y  lo coloca en la parte baja del byte[/COLOR]
'[COLOR="blue"]como 07DF es 2015 en ndecimal entonces la variable passd=2015[/COLOR]

passd=2013[COLOR="blue"] 'cambiamos el valor de passd[/COLOR]

[COLOR="blue"]'como 2013 en hex = 07DD[/COLOR]

write 2,passd.higbyte  [COLOR="blue"]'colocamos la parte alta que es $07 en la posicion 2[/COLOR]
write 3,passd.lowbyte[COLOR="blue"]  'colocamos la parte baja que es $DD en la posicion 3[/COLOR]
'la eeprom quedaria asi...
'00 07 DD
 
avance en lo siguiente:

@ device pic12f629,intrc_osc,wdt_off,pwrt_off,mclr_off,protect_off
OPTION_REG.7 = 0
VRCON = 0
INCLUDE "modedefs.bas"
Define Osc 4
CMCON = 7

TRISIO = %00001000
gpio = %00000000
ACEPTADO VAR GPIO.1
LEYENDO VAR GPIO.2
IN VAR GPIO.0
SERIAL VAR WORD
DATAID VAR WORD
CLEAR

INICIO:
LEYENDO = 0
ACEPTADO = 0
read 5,seriaL
serout GPIO.4,T300,[SERIAL,10]
IF IN = 1 THEN
GOSUB LEE
ENDIF
goto inicio
LEE:
SERIN IN,T300,["A"],DATAID
PAUSE 200
LEYENDO = 1
PAUSE 500
GOSUB VERIFICACION
GOTO INICIO


VERIFICACION:
IF DATAID = "P" THEN
GOSUB GRABAR
ENDIF
IF DATAID = SERIAL THEN
ACEPTADO = 1
serout GPIO.4,T300,[DATAID,10]
GOTO INICIO
ENDIF


Grabar:
WRITE 5,daTaid 'graba valor recibido que esta en dataid en la eeprom el caracter seguido de A un 1
ACEPTADO = 1
PAUSE 1000
GOTO INICIO
END


resulto ser que si lo guarda coloque un serout al inicio para chequear que lo guardaba, lo que hice fue guardar en la variable serial el valor guardado en la direccion 5 de la eerpom y luego lo envie por serout por un pin libre del pic y si resulto que si lo envio demasiado bueno...jejeje

otra cosa que note es que cambie la letra y coloque otra a enviar y me muestra la anterior y luego sale la nueva letra algo asi:

letra guarda A paro la simulacion cambio la letra y vuelvo a simular y me muestra la A por el serout del inicio y cuando programo la nueva letra empieza a parecer la nueva y deja de aparecer la A esto es en el virtual terminal...curioso :unsure: es como si el proteus mantuviera los datos de la eeprom del pic no sabia eso.

adjunto la imagen:


si es cierto ya que sin tocar ningun boton el programa queda en el lazo de inicio haciendo la lectura de al eeprom y luego la envia por serout, entonces si guarda en la memoria del pic la informacion.
 

Adjuntos

  • Dibujo3.jpg
    Dibujo3.jpg
    7.7 KB · Visitas: 37
Última edición:
yo de nuevo por aca parece que los corri a todos jejeje. bueno explico mis avances, resulta que logre hacer funcionar el circuito con serout y serin con un baud rate de t300 bastante bien, logre programar un receptor con un codigo a travez de la eeprom colocandole asi una identificacion al receptor de tal manera que pueda codificarse con cualquier serial en cualquier momento, todo esto es via serial de pic a pic, aparte logre a travez del virtual terminal vizualizar cada proceso, sabiendo con esto en que parte del programa del pic se encontraba ejecuantando en ese momento, lo unico es que se pone super lenta la simulacion pero si se aprecia..adjunto todo para quienes quieran ver como funciona cualquier duda me pregunta y si me pueden ayudar a mejorarlo de antemano muchas gracias...saludoss

PD: la idea de este sistema es un control infrarojo para varios receptores para que se activen con una señal unica...saludos

actualizacion del archivo con mejoras...saludos
 

Adjuntos

  • CASI FINAL3.rar
    114.7 KB · Visitas: 152
Última edición:
el receptor que yo utilizo es el TSOP1137 que trabaja a 37 khz y el TSOP2236 a 36khz te dejo la hola de datos, los eleji por que primero los consegui por aca son bien comunes ya que son del receptor de los tv y segundo por que es un integrado osea no solo recive si no que limpia las señales, etc... y tercero es muy economico. el que si me interesa es el receptor el cual tambien vi uno similar al que me muestras la diferencia era que llevaba una resistencia en el colector del transistor pero no tiene el valor, los controles remotos son bien sencillos son 5 o 6 componentes, el micro el crystal dos condensadores una resistemcia y el led. pero de todas maneras esta bien bueno el circuito lo unico como tu dices faltan los valores de las resistencias...saludosss
 
Saludos nuevamente,

Me he estado preguntando sobre el stamby en pic basic, es programable o el pic entra en este estado solo? es que, si es programable, me gustaría saber cómo pues he buscado y no he hallado material al respecto o no he sabido en la dirección correcta. Si alguien me orienta, gracias de antemano.
 
hola saludo a todos estoy empesando com lo de los pic poco a poco he comprado mi pequeno laboratorio (cosa que no es facil) bueno, mi problema es el siguiente:

Estoy programando con el Pic Basic Pro y me he decidido por el PIC16F887 ya que es la actualizacion del PIC16F877 (es mas economico). decidi hacer un termometro digital basandome en el ejemplo que esta unas pag atras, con el pic877 funciona bien pero con el F887 no me da registro de nada no se como configurar el puerto.

Espero comentarios
Gracias....
 

Adjuntos

  • TERMOMETRO_F887.txt
    2.3 KB · Visitas: 98
Atrás
Arriba