Foro Sobre Pics

gardiatech

Lanero Regular
3 Feb 2008
32
hola a todos.

Bueno antes que todo dejenme decirles que me encanta trabajar con pics, asi que la idea de este foro es que aquellos que compartan esta aficion, o quienes quieran ingresar en este mundo digital, aporten con ideas sobre proyectos para desarrollar o sobre dudas.

para quienes no tienen idea de los pics pero quieren aprender, adjunto pongo un tutorial sencillo para aprender a controlar un pic de los mas conocidos, viene con unos cuantos ejemplitos.

animense!!!!!!:-p:-p
 

Archivos adjuntos

  • tuto16f84.pdf
    197.2 KB · Visitas: 3,973
bueno para comenzar no les recomiendo ese PIC 16f84a, creo que ya puse en otro foro hace rato porque...
lo principal es que es caro, y no trae nada de nada, la unica razon porque lo venden
es que esta en TODOS los libros de microcontroladores, de ejmplo pero por lo VIEJO.

para principiantes yo recomendaria uno de los nuevos que traen el cristal integrado... (y por esto mas pines libres)
como
PIC16F88
PIC16f627A
PIC16f628A
PIC16f628
PIC16f818
PIC16f819

y afines
estos valen menos y traen mas funciones!!!
 
bueno para comenzar no les recomiendo ese PIC 16f84a, creo que ya puse en otro foro hace rato porque...
lo principal es que es caro, y no trae nada de nada, la unica razon porque lo venden
es que esta en TODOS los libros de microcontroladores, de ejmplo pero por lo VIEJO.

para principiantes yo recomendaria uno de los nuevos que traen el cristal integrado... (y por esto mas pines libres)
como
PIC16F88
PIC16f627A
PIC16f628A
PIC16f628
PIC16f818
PIC16f819

y afines
estos valen menos y traen mas funciones!!!

gracias por tu aporte... bueno talvez tengas razon en que ese modelo es de los mas viejos, pero es uno de los mas sencillos de aprender para quienes se inician en este campo, con el tutorial no estoy limitando el aprendizaje solo estoy dando el primer aporte,si tienes un tutorial mejor pues aporta y subelo!!! esa es la idea!!! de igual forma en los modelos que propones son muy buenos y con variedad de perifericos internos, pero creo que es mejor empezar despacio, de igual manera he trabajado con pics mucho mejores en perifericos y velocidad de la familia 18fxxx , pero tienes que reconocer que tratar de ingresar directamente a pic mas complicados puede ser dificil para algunos.

ademas de todo pues si ya eres un poco experto en el tema pues propon un proyecto para desarrollarlo en este foro.....la idea es que este foro se llene de ideas
 
yo tambien estoy ahorita con la serie 18F por un proyecto en CANBUS...
(a algunas personas les encanta eso de los banks, a mi no es que me mate eso)

durante casi todos mis proyectos utilice el Brenner 5 de la pagina sprut.de
pero me tocaba ajustarle el Vpp cuando usaba los 16f que terminan en "a"
y cuando usaba los 18F
ademas que era puerto paralelo y los portatiles nuevos no lo tienen...
asi que ahora me cambie al Todopic GTP usb
que me quema TODOS los PICs sin molestar con el Vpp y ademas es USB!!!
ojo que para armar el GTP TIENES QUE tener acceso a otro quemador para quemar el PIC usb (18f2550) que sirve de interfaz...

este ultimo quemador lo pueden conseguir (armado) en tiendas de electronica alrededor de los 100mil pesos (creo)
consejos:
-no COMIENCEN con BASIC o C, pues asi no van a aprender ASSEMBLER
(despues mas adelante C puede serles de utilidad)
-utilicen ASSEMBLER, para lo basico como leds, PWM, serial, LCDs etc
-hagan PROYECTOS QUE LES ESTIMULEN, sino se empaban y dejan eso tirado...
si quieren controlar, los abanicos luces, temperatura, de su monsterPC por ejemplo eso seria un muy buen proyecto (A/D, LCD, PWM, leds etc)
si quiere controlar un carro RC que lo siga que evite las paredes, que siga trayectorias inteligentes, etc
si quiere manejar todo su cuarto desde el pc...
etc
 
como estan amigos laneros, les cuento q yo estoy empezando con esto de los pics, y estoy con el 16f84a, tengo conocimientos de electronica, pero a se tiempito que no haga hago de esta rama, y por curiosidad empece con esto de los pic, el primer programa que hice fue para sacar por el puerto A del pic numeros en binario, para conectarlos a uno parecido al 4511 que pasa de bcd a led de 7 segmentos, claro q solo el RA0,RA1,RA2 y RA3 q serian el a, b, c y d respectivamente, segun iba apretando unos swichts conectados al RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7, Y segun los ponia en nivel
alto me sacaban 1 2 3 4 5 6 7 8 respectivamente, claro q me los sacaba en binario y el integrado al que estaban conectadas la salidas se encargaba de mostrarme en el 7 segmentos, logre hacerlo a la primera, pero luego decidi hacer un programa para reemplazar al 4511, osea para meter en bcd y sacar al led 7 segmentos solo con el pic, pero he tenido problemas al momento de manejar la informacion almacenada de entrada, ya q varia mucho cuando apreto una tecla o dos o tres, lo q queria hacer es usar las primeras 4 patitas del RA como entrada para binario, y usar el RB como salida directamente al led 7 segmentos, aca les pongo el programa que hice, y haber si me pueden dar consejos para mejorarlo y q funcione correctamente, de antemano graciasssss
PROGRAMA

--------------------------List p=16f84
--------------------------RADIX HEX
--------------------------PORTA EQU 05
--------------------------PORTB EQU 06
--------------------------ESTADO EQU 03
--------------------------uno equ 0c
--------------------------dos equ 0d
--------------------------tres equ 0e
--------------------------cuatro equ 0f
--------------------------cinco equ 10
--------------------------seis equ 11
--------------------------siete equ 12
--------------------------ocho equ 13
--------------------------nueve equ 14
--------------------------a equ 15
--------------------------bb equ 16
--------------------------c equ 17
--------------------------d equ 18
--------------------------e equ 19
--------------------------f equ 1a
--------------------------W EQU 0

--------------------------ORG 0
--------------------------BSF ESTADO,5
--------------------------MOVLW B'00000000'
--------------------------MOVWF PORTB
--------------------------MOVLW B'11111'
--------------------------MOVWF PORTA
--------------------------BCF ESTADO,5
--------------------------CLRF PORTB

--------------------------MOVLW B'00001'
--------------------------MOVWF uno
--------------------------MOVLW B'00010'
--------------------------MOVWF dos
--------------------------MOVLW B'00011'
--------------------------MOVWF tres
--------------------------MOVLW B'00100'
--------------------------MOVWF cuatro
--------------------------MOVLW B'00101'
--------------------------MOVWF cinco
--------------------------MOVLW B'00110'
--------------------------MOVWF seis
--------------------------MOVLW B'00111'
--------------------------MOVWF siete
--------------------------MOVLW B'01000'
--------------------------MOVWF ocho
--------------------------MOVLW B'01001'
--------------------------MOVWF nueve
--------------------------MOVLW B'01010'
--------------------------MOVWF a
--------------------------MOVLW B'01011'
--------------------------MOVWF bb
--------------------------MOVLW B'01100'
--------------------------MOVWF c
--------------------------MOVLW B'01101'
--------------------------MOVWF d
--------------------------MOVLW B'01110'
--------------------------MOVWF e
--------------------------MOVLW B'01111'
--------------------------MOVWF f
WAIT
--------------------------BTFSC PORTA,0
--------------------------GOTO INICIO
--------------------------BTFSC PORTA,1
--------------------------GOTO INICIO
--------------------------BTFSC PORTA,2
--------------------------GOTO INICIO
--------------------------BTFSC PORTA,3
--------------------------GOTO INICIO
--------------------------GOTO WAIT
INICIO
--------------------------MOVF PORTA,W
--------------------------SUBWF uno
--------------------------BTFSC ESTADO,2
--------------------------GOTO UNO
--------------------------MOVF PORTA,W
--------------------------SUBWF dos
--------------------------BTFSC ESTADO,2
--------------------------GOTO DOS
--------------------------MOVF PORTA,W
--------------------------SUBWF tres
--------------------------BTFSC ESTADO,2
--------------------------GOTO TRES
--------------------------MOVF PORTA,W
--------------------------SUBWF cuatro
--------------------------BTFSC ESTADO,2
--------------------------GOTO CUATRO
--------------------------MOVF PORTA,W
--------------------------SUBWF cinco
--------------------------BTFSC ESTADO,2
--------------------------GOTO CINCO
--------------------------MOVF PORTA,W
--------------------------SUBWF seis
--------------------------BTFSC ESTADO,2
--------------------------GOTO SEIS
--------------------------MOVF PORTA,W
--------------------------SUBWF siete
--------------------------BTFSC ESTADO,2
--------------------------GOTO SIETE
--------------------------MOVF PORTA,W
--------------------------SUBWF ocho
--------------------------BTFSC ESTADO,2
--------------------------GOTO OCHO
--------------------------MOVF PORTA,W
--------------------------SUBWF nueve
--------------------------BTFSC ESTADO,2
--------------------------GOTO NUEVE
--------------------------MOVF PORTA,W
--------------------------SUBWF a
--------------------------BTFSC ESTADO,2
--------------------------GOTO A
--------------------------MOVF PORTA,W
--------------------------SUBWF bb
--------------------------BTFSC ESTADO,2
--------------------------GOTO BB
--------------------------MOVF PORTA,W
--------------------------SUBWF c
--------------------------BTFSC ESTADO,2
--------------------------GOTO C
--------------------------MOVF PORTA,W
--------------------------SUBWF d
--------------------------BTFSC ESTADO,2
--------------------------GOTO D
--------------------------MOVF PORTA,W
--------------------------SUBWF e
--------------------------BTFSC ESTADO,2
--------------------------GOTO E
--------------------------MOVF PORTA,W
--------------------------SUBWF f
--------------------------BTFSC ESTADO,2
--------------------------GOTO F
--------------------------GOTO WAIT
UNO
--------------------------MOVLW B'00000110'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------GOTO UNO
DOS
--------------------------MOVLW B'01011011'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------GOTO DOS
TRES
--------------------------MOVLW B'01001111'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------GOTO TRES
CUATRO
--------------------------MOVLW B'01100110'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------GOTO CUATRO
CINCO
--------------------------MOVLW B'01101101'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------GOTO CINCO
SEIS
--------------------------MOVLW B'01111101'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------GOTO SEIS
SIETE
--------------------------MOVLW B'00000111'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------GOTO SIETE
OCHO
--------------------------MOVLW B'01111111'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO OCHO
NUEVE
--------------------------MOVLW B'01100111'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO NUEVE
A
--------------------------MOVLW B'01110111'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO A
BB
--------------------------MOVLW B'01111100'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO BB
C
--------------------------MOVLW B'00111001'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO C
D
--------------------------MOVLW B'01011110'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO D
E
--------------------------MOVLW B'01111001'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO E
F
--------------------------MOVLW B'01110001'
--------------------------MOVWF PORTB
--------------------------BTFSS PORTA,0
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,1
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,2
--------------------------GOTO WAIT
--------------------------BTFSS PORTA,3
--------------------------GOTO WAIT
--------------------------GOTO F
END
 
tu codigo esta muy extenso y eso puede complicar la estructura general del mismo y asi hacer que sea mas dificil encontrar un problema, he visto el codigo y no parece presentar algun problema pero habria que simularlo, yo en particular prefiero hacer programas lo mas cortos posibles, te recomiendo utilizar el metodo por tablas asi:

primero creas una tabla.

tabla addwf cp,1 ;Agrega al contador de programa el cont. de W (declara cp)
retlw b'01110111' ;0
retlw b'01000001' ;1
retlw b'00111011' ;2
retlw b'01101011' ;3
retlw b'01001101' ;4
retlw b'01101110' ;5
retlw b'01111110' ;6
retlw b'01000011' ;7
retlw b'01111111' ;8
retlw b'01101111' ;9
retlw b'00001000' ;-
retlw b'00000000' ;Display apagado

esta tabla esta para un tipo de 7 segmento en especial asi que te tocaria modificar los valores para funcionen en tu 7 seg (anodo o catodo comun)

la rutina wait que tienes esta bien, en INICIO solamente lo que harias es leer el valor del puerto A y meterlo en w, aplicar una mascara que en este caso seria

movf porta,W
andlw 0FH

para eliminar valores basura en los bits mas significantes.
como el valor que vas a leer es un valor binario de 0 a 15, despues de aplicar la mascara llamas la tabla

call tabla

y te devuelve el valor a mostrar. entonces lo unico que te queda por hacer es enviar el dato al puerto b, asi te ahorras todo ese codigo tan extenso en inicio.

repito.
debes tener presente que debes modificar los valores en la tabla segun tu 7 segmentos

ahhh no se te olvide que sienpre es bueno una rutina antirebote


espero que te haya sido de ayuda.....me cuentas
 
saludos
q les parece este proyectico con 18f4550 ,lcd,lm35 y el rtc ds1307,el proyecto consiste en hacer un sensor de temperatura q muestre los resultados de la temperatura medida en el primer renglon de la lcd y en el otro renglon de la lcd muestre la fecha actualizada y la hora q sera generada por el ds1307 usando el protocolo i2c
 
pero el 18f puede hacer algo tansencillo como lo de la hora-fecha, sin el rtc externo
creo que hay sensores de temperatura MUCHO MEJORES que el lm35
me parece SOBREDIMENSIONADO el 18F para ese proyecto
si lo busca lo debe encontrar en internet, en el area de dataloggers y clima,

pero DELE que asi es que aprende HACIENDO y TERMINANDO los proyectos

suerte con eso cualquier pregunta pongala por aca
 
he recibido mps preguntado por el firmware del quemador USB, que como que sale PAGO en muchas paginas...
b8_smd2_500.jpg

aca tengo uno pero de la pagina sprut.de (en aleman) http://sprut.de/electronic/pic/projekte/brenner8/b8_fw.zip

ahora que tenga tiempito se los busco en espanhol, pero seguro que esta en la red omme

edit:
creo que por aqui esta... http://todopic.mforos.com/59905/3558103-gtp-usb-lite/
"El driver encargado de la comunicación entre el PC y el Pic a programar es un PIC 18F2550, encontrareis el .hex necesario para programarlo dentro de la carpeta GTP-USB del winpic800 'GTP_USB.hex'. "
 
bueno qui va un turorial para los que quieran aprender a manejar un lcd 4X20 o 2X20 o 2X40, es muy sencillo solo tienen que decidirse y empezar!!!!
 

Archivos adjuntos

  • lcd.rar
    21.6 KB · Visitas: 703
hey bros el assembler de pics es muy diferente al de procesadores... a mi me parece que si...bueno me podrian decir como me consigo in quemador de pics....o como lo monto...gracias.
 
es que el PIC es un microcontolador RISC, asi que la diferencia con un procesador... es bastante!

si pos eso lo tengo muy claro...io me referia a por que el lenguaje ensamblador cambia tanto...la verdad me parece que lo que hicieron fue sacarse como un api de assembler solo para pics...porque esos programitas los corre uno en un compilador de assembler limpio y le vota chorro de errores..jeje...bueno como sea vacano el trabajo de las pics io lo trabaje un poco para hacer detonadores...pero como que ya le perdi el ritmo...suertex.
 
si pos eso lo tengo muy claro...io me referia a por que el lenguaje ensamblador cambia tanto...la verdad me parece que lo que hicieron fue sacarse como un api de assembler solo para pics...porque esos programitas los corre uno en un compilador de assembler limpio y le vota chorro de errores..jeje...bueno como sea vacano el trabajo de las pics io lo trabaje un poco para hacer detonadores...pero como que ya le perdi el ritmo...suertex.

estas un tanto errado en cuanto a que sea un api, por no decir demasiado......
primero que todo debes tener claro que el asembler es un lenguaje de bajo nivel, lo que quiere decir que tiene una estructura general para diferentes tipos de procesadores o microcontroladores, pero las diferencias en las instrucciones se basan en que als er un lenguaje de bajo nivel las instrucciones que manipulan directamente nucleo del procesador o microcontrolador son unica y exclusivamente para ese dispositivo en particular... talvez se te haga raro porque estaras acostrumbrado al assembler par X86 pero el pic posee una arquitectura FISICA totalmente diferente.

para que entiendas mejor las instrucciones estan relacionadas directamente con el diseño electronico del dispositivo, donde cada instruccion cuando es compilada (por el respectivo compilador) representa o apunta al inicio de un circuito electronico que ejecutara diferentes estados para realizar una respectiva accion.

bueno parece un tanto complejo pero la verdad, es que el problema principal de todo programador de "alto nivel" es que no sabe ni papa de que es lo que hace intrinsecamente un compilador ni de que es lo que hace el procesador.

para resumir.... el pic tiene una arquitectura fisica totalmente diferente a un X86 po eso la diferencia en las instrucciones...las instrucciones del los pics son reales no una emulacion en una api
 
estas un tanto errado en cuanto a que sea un api, por no decir demasiado......
primero que todo debes tener claro que el asembler es un lenguaje de bajo nivel.....


Ummmmmm ya....lo que me queres decir es que para cada arquitectura de microcontrolador existe un juego de instrucciones especificas...pero que giran entorno al nucleo general del assembler....bueno eso fue lo que entendi....en cuanto a lo de programador de alto nivel...pos io conosco muchos bros que apesar de dedicarse a lenguajes de alto nivel saben muy bien como se comporta la cosa a nivel maquina...por otro lado tenes razon en que io solo le he metido mano al assembler de x86...pos soy estudiante de sistemas no de electronica...pero la verdad me interesa mucho lo de los pics...asi que por lo pronto sera empesar a documentarme mejor...perdon por las molestias...y gracias por los datos....oye que quisiste decir con "una emulacion en un api"...los api's son instrucciones completamente reales que se usan para evitar repetir muchas veces el mimo codigo...y que proporcionan herramientas de trabajo muy utiles para los programadores...el mejor ejemplo de eso es el java...con sus apis puede hacer casi cualquier cosa...asi que de ninguna forma la palabra api se refiere en forma despectiva a algo...por eso la use...espero no haber sido mal interpretado.
 
bueno laneros,

he aqui una de esas preguntas que quedan en la infamia :p y que alguien que tenga el mismo problema va a abrir con esperanza este foro para luego darse cuenta que nadie pudo contestar mi inquietud

:p:p:p:p:p:p:p:p:p (a todos nos ha pasado)


la cuestion es que al usar el compilador pic-C con un 16f676 y usando el oscilador interno, un programa tan simple como prender y apagar unos leds......no se ejecuta.

a ver explico con mas detalle

si energizo el circuito, se me queda MUERTO, pero si trato de desconectar y conectar varias veces la fuente de poder (ensayé con pila, adaptador y fuente) A VECES FUNCIONA, con lo que se puede ver que el programa esta bien quemado en el micro y corre bien.


Antes de que me contesten que es el oscilador interno y que use cristal mas bien, les comento que el mismo micro, con mis programas viejos en ensamblador Y CON EL OSC INTERNO funciona perfecto, cuando se energiza se corre el programa solito, como debe ser.


No se que *******s sea :p, pues el micro esta bueno, el oscilador esta bueno, y se comporta perfecto pero solo en assembler......................

:S alguno ha tenido algun problema similar? o quedara esto en la infamia :S :p
 
prueba con otros compiladores!
o revisa la documentacion online de tu compilador con respecto al manejo del oscilador interno
y mira a ver si otros han tenido el mismo problema con el mismo compilador???
 
nada, ya me rebusque todos los foros habidos por haber, y nada de oscilador interno , claro que tambien no es que exista mucha info acerca de ... PCW Ccs

me va a tocar es ensayar con el highC claro que no me quedo con la espinita, voy a meterle cristal externo apenas pueda ir a comprarlo, para descartar que el problema sea de cristal y echarle toda la culpa al compilador :p:p:p:p:p


EDIT

solucionado, digo, "solucionado", me toco meterle un cristal que tenia viejjooo pero funciona, cristal de 9.8MHz, gigantesco :S :p, pero ahora si funciona,

quedan advertidos, CCS y osciladores internos no se mezclan:enojado::enojado::enojado::enojado::enojado::enojado:

y ahi se me fueron 2 pines que servian de I/O :(
 

Los últimos temas