Versión Completa : Foro Sobre Pics
gardiatech
febrero 23, 2008, 06:11
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
lagarworks
febrero 23, 2008, 08:11
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!!!
gardiatech
febrero 25, 2008, 10:17
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
lagarworks
febrero 26, 2008, 07:46
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 (http://sprut.de/electronic/pic/brenner/index.htm)
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 (http://www.todopic.com.ar/foros/index.php?PHPSESSID=99e74c49bd35b964e82443be8850ae c3&topic=1716.0)
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
The Killer
marzo 3, 2008, 10:09
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
lagarworks
marzo 3, 2008, 11:31
si estas teniendo problemas con el pin RA4 pasate por aqui
http://www.laneros.com/showthread.php?t=70464&highlight=colector
gardiatech
marzo 4, 2008, 10:27
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
wayne21
marzo 5, 2008, 11:16
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
lagarworks
marzo 6, 2008, 09:42
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
lagarworks
marzo 6, 2008, 09:38
he recibido mps preguntado por el firmware del quemador USB, que como que sale PAGO en muchas paginas...
http://sprut.de/electronic/pic/projekte/brenner8/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'. "
gardiatech
marzo 8, 2008, 02:55
muy bueno el aporte!!!!!
gardiatech
marzo 12, 2008, 09:00
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!!!!
sairus black
marzo 14, 2008, 02:20
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.
lagarworks
marzo 14, 2008, 07:27
es que el PIC es un microcontolador RISC, asi que la diferencia con un procesador... es bastante!
sairus black
marzo 15, 2008, 02:19
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.
gardiatech
marzo 16, 2008, 10:14
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
sairus black
marzo 19, 2008, 02:48
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.
unbek4nnt
marzo 28, 2008, 08:22
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
lagarworks
marzo 29, 2008, 09:23
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???
unbek4nnt
marzo 29, 2008, 10:02
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::enojad o::enojado:
y ahi se me fueron 2 pines que servian de I/O :(
gardiatech
marzo 30, 2008, 08:48
quedan advertidos, CCS y osciladores internos no se mezclan:enojado::enojado::enojado::enojado::enojad o::enojado:
y ahi se me fueron 2 pines que servian de I/O :(
pues he utilizado el CCS y no es que me llame mucho la atencion tal vez porque estoy acostumbrado al assembler, perohe probrado el compilador en conjunto con proteus para simular lo hecho y todo me ha funcionado correcto.
lo mas dificil es empezar en un compilador nuevo, lo mas probable es que estes configurando algo mal en alguna directiva de inicio de configuracion....yo generalmente uso el wizard para esa parte y luego tiro el codigo.
recuerda que el CCS te permite anexar codigo en assembler, si utilizas esta funcionalidad, puedes configurar solamente en assembler lo que tiene que ver con la configuracion del oscilador y luego continuar con el programa hecho en C.
gardiatech
marzo 30, 2008, 08:57
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 pues lo de los apis parece ser como subrutinas generales.... asi que te doy la razon....bueno ambos hemos aprendido algo=)=)=)
unbek4nnt
marzo 31, 2008, 03:17
pues he utilizado el CCS y no es que me llame mucho la atencion tal vez porque estoy acostumbrado al assembler, perohe probrado el compilador en conjunto con proteus para simular lo hecho y todo me ha funcionado correcto.
lo mas dificil es empezar en un compilador nuevo, lo mas probable es que estes configurando algo mal en alguna directiva de inicio de configuracion....yo generalmente uso el wizard para esa parte y luego tiro el codigo.
recuerda que el CCS te permite anexar codigo en assembler, si utilizas esta funcionalidad, puedes configurar solamente en assembler lo que tiene que ver con la configuracion del oscilador y luego continuar con el programa hecho en C.
No, ya habia hecho todos esos intentos y nada, ademas no es problema de programacion, porque a veces corria el programa y a veces no.... era mas un problema de divergencia del oscilador interno, que no se estabilizaba (con y sin power up timer).
Pero como les digo, oscilador externo, problema solucionado =)
y a mi pues no se me dificulta programar en assembler, lo que pasa es que hace mucho que no lo hago, y siempre me parecio harto (me parece q los que programan en assembler lo hacen mas por costumbre... o porque vean que saben assembler :P), C es mucho mas sencillo, tanto CCS como el HighC , mas sencillo manejar I/o, lcds, teclados, comunicaciones seriales, modulos usb, etc. etc.
Simplemente era aprender para enseñarle a alguien si ntener que enseñarle assembler :chino: para un proyecto de colegio, pero me engome. Muy facil de usar, asi tenga sus carajaditas como el oscilador interno.
eso si, despues me consigo otra referencia con osc interno y ensayo a ver que pasa :enojado:
NorDiKa
abril 1, 2008, 08:31
pues tambien hay que tener en cuenta que al ser el PIC tan lento (usualmente 4 u 8 Mhz)
- veces el codigo que entrega el compilador no es MUY eficiente en relacion con el tiempo...
- aveces toca revisar, optimizar o REHACER el codigo desde adentro desde assembler para lograr terminar una tarea en un lapso de tiempo...
por ejemplo el CANBUS es bastante rapido!!!
unbek4nnt
abril 1, 2008, 06:46
pues tambien hay que tener en cuenta que al ser el PIC tan lento (usualmente 4 u 8 Mhz)
- veces el codigo que entrega el compilador no es MUY eficiente en relacion con el tiempo...
- aveces toca revisar, optimizar o REHACER el codigo desde adentro desde assembler para lograr terminar una tarea en un lapso de tiempo...
por ejemplo el CANBUS es bastante rapido!!!
este no es el caso, pues lo ensaye con un osc externo de 4MHz y daba bien, si fuera problema del codigo no deberia dar con ningunos 4MHZ, ni internos ni externos :chino:
NorDiKa
abril 1, 2008, 11:36
este no es el caso, pues lo ensaye con un osc externo de 4MHz y daba bien, si fuera problema del codigo no deberia dar con ningunos 4MHZ, ni internos ni externos :chino:yo me estaba refiriendo a:
-porque hay que saber assembler?
y claro que si puede ser problema de codigo porque el osc interno es configurado por el codigo, cierto??
algo tan sencillo como xt, hs, lvp mal configurados le pueden hacer inestable el PIC.
unbek4nnt
abril 2, 2008, 10:07
yo me estaba refiriendo a:
-porque hay que saber assembler?
pues no sobra saberlo para desembalarse, pero en mi caso, sacrificar dos pines fue la solucion y ya, sin tener que enredarme con assembler para nada.
2 pines vs assembler :P
obviamente es importante programar en assembler, pero no en todas las situaciones le importa a uno el consumo de ciclos o de potencia del pic, ni la rapidez de ejecucion.... hay ocasiones en las que uno simplemente quiere hacer algo y lo quiera hacer RAPIDO y para eso es que sirve el C, para salir de una de eso.
JRIOS_6660
abril 11, 2008, 10:57
Bueno yo solo programo micros de motorola y desde hace dias me ha entrado el bicho de la curiosidad por trabajar con pics, asi que aprovechare el breve receso de la u y me iniciare con los pic y les estare contando que tal me va
suertes
gardiatech
abril 12, 2008, 02:53
Bueno yo solo programo micros de motorola y desde hace dias me ha entrado el bicho de la curiosidad por trabajar con pics, asi que aprovechare el breve receso de la u y me iniciare con los pic y les estare contando que tal me va
suertes
me parece muy bien lo de aprender de diferentes tipos de micros yo tambien he tenido ganas de probar los motorola porque solo he trabajado con pics y atmel, pero no me he decidido asi que seria interesante si crearas un tema para iniciar de cero con los motorola y asi existiria informacion de cada tipo de micros y asi cada cual podria aprender de ambos...
JRIOS_6660
abril 12, 2008, 02:55
me parece muy bien lo de aprender de diferentes tipos de micros yo tambien he tenido ganas de probar los motorola porque solo he trabajado con pics y atmel, pero no me he decidido asi que seria interesante si crearas un tema para iniciar de cero con los motorola y asi existiria informacion de cada tipo de micros y asi cada cual podria aprender de ambos...
Me parece muy buena idea, me pondre en eso y les comentare
wilderwtm
abril 18, 2008, 11:02
Hola muchachos necesito su ayuda
Estoy tratando de hacer un contador ascendente con display que le pueda fijar un valor ej:; 100 y q comience a decrementar con un pulsador hasta llegar a 0 y cuando llegue a 0 encienda un rele q dure 3 segundos encendido y se apague y vuelva a cargar las variables osea ej: el mismo 100 q habia puesto y q si lo apague y lo encienda me guarde el ultimo dato en la eeprom.
Agradezco su colaboracion
gardiatech
abril 18, 2008, 08:50
Hola muchachos necesito su ayuda
Estoy tratando de hacer un contador ascendente con display que le pueda fijar un valor ej:; 100 y q comience a decrementar con un pulsador hasta llegar a 0 y cuando llegue a 0 encienda un rele q dure 3 segundos encendido y se apague y vuelva a cargar las variables osea ej: el mismo 100 q habia puesto y q si lo apague y lo encienda me guarde el ultimo dato en la eeprom.
Agradezco su colaboracion
bueno primero que todo que tipo de microcontrolador estas usando?
segundo, que tipo de display piensas usar? LCD o 7 segmentos?
bueno lo de decrementar un contador desde un valor predeterminado es bastante sencillo y lo de activar un rele por tres segundos tambien, pero para darte un buen consejo debes especificar las anteriores dos preguntas para asi determinar la mejor forma de hacerlo......si tienes ya un codigo desarrollado, postealo junto con tus dudas y sera mucho mas facil y educativo desarrollarlo....
wilderwtm
abril 19, 2008, 02:42
Primero muchas gracias por responderme
Aver te cuento descargue un codigo para un contador de 4 digitos para un 16f84 lo cuadre para 3 digitos lo simule en proteus con el mismo controlador y funciono bien, el avance y todo, luego cuadre los puertos para el 16f873 lo queme y no me funciono le cacharie y por fin pude ver los ceros pero de ahi no he podido hacer mas
el codigo es este
Pienso usar 7 segmentos y compre un 16f873
gardiatech
abril 21, 2008, 09:27
listo el fin de semana lo reviso..
wilderwtm
mayo 15, 2008, 04:49
no ya hice ese proyecto
Ahora necesito ayuda para hacer un tacometro con displays q me cuente las rpm de un eje
Agradezco su ayuda amigosssssss!!!!!!!
GEKKO-KAMEN
mayo 15, 2008, 05:38
Excelente hilo.
Hace casi un año que dejé de programar PICs, pero tengo varios proyectos pendientes.
Ojalá pueda retomarlos en cuanto tenga suficiente tiempo disponible.
wilderwtm
mayo 15, 2008, 06:45
Si Me Pudieras Ayudar Te Lo Agradezco
gardiatech
mayo 17, 2008, 02:11
bueno hay dos formas de hacerlo.
la primera es utilizar un swith magnetico fijo y sobre el eje un iman pequeño el cual cerrara el suiche cada vez que de una vuelta; la otra es utilizar un encoder con sensores infrarojos en el cual se pueda obtener mas de un pulso por vuelta, depende del tipo de eje y la exactitud que necesites. eso en cuento al hardware.
para capturar los pulsos del sensor en el pic tambien se puede hacer de dos formas, una de ellas es utilizar la interrupcion del RB0 y calcular cuanto tiempo transcurre entre un pulso y otro mediante un timer hardware mas uno de software para ampliar los rangos de medida.
la otra forma es utilizar el modulo CCP del pic y configurarlo en modo de captura de tal forma que capture el tiempo transcurrido por si mismo, en cuanto a esta opcion se refiere puede ser mas facil que la primera pero mucho mas rigida debido a las limitaciones en el rango de captura. la primera opcion es mas compleja pero permite adecuar la medida a rangos de frecuencia mucho mas amplios.
ya luego de procesar la informacion lo de menos sera mostrarla ya que lo puedes hacer mediante 7 segmentos, como tu proyecto anterior o mediante un lcd.
:)
wilderwtm
mayo 17, 2008, 02:15
hola
pues yo habia pensado hacerlo poniendole unos agujeros un ejemplo hacerle un disco con 30 huecos y luego multiplicarlo por 2 y me da 60 y luego mostrar en el display y poner a escanear 1 ms
no se
Si tu tienes uno porfaaaaaaaaaa y yo lo miro Muchas gracias
gardiatech
mayo 17, 2008, 02:47
basicamente tu idea es un encoder, eso esta bien, respecto a los agujeros depende de como escanees los pulsos, pero te aconsejo utilizar un el modulo de captura para medir el tiempo exacto entre pulsos y con esta informacion haces el calculo de las rpm, si utilizas el modulo de captura no es necesario tal cantidad de orificios seria aconsejable no mas de cuatro. anque esto depende de la cantidad minima y maxima de rpm a medir.
si quieres una forma sencilla simplemente cuenta cuantos pulsos recibes por segundo y multiplica por 60, pero debes tener un temporizador como referencia en segundos.
otra forma mas exacta ya que se hace una medida instantanea en intervalos mas cortos de tiempo es la siguiente:
por ejemplo si pones cuatro orificios en el encoder vas a tener 4 pulsos por vuelta, si capturas el tiempo transcurrido entre pulso y pulso (con el modulo de captura) vas a obtener un periodo X en mili o microsegundos.
este periodo lo multiplicas por cuatro (porque cuatro son una vuelta) lo que te dara un aproximado instantaneo de tiempo por vuelta, luego divides 1 entre el valor de tiempo que te diio y el resultado lo multiplicas por 60 (segundos) y listo ese es el valor instantaneo de RPM.
parece algo muy complejo pero la verdad no lo es, mira el datasheet y encontraras la forma de hacerlo o busca codigo fuente en la pagina de microchip.
si nunca has manejado el modulo de captura pues empieza, ya que es algo que facilita mucho este tipo de aplicaciones.
wilderwtm
mayo 17, 2008, 02:54
la verdad no te entendi bien lo del modo de ccaptura
si se utiliza un integrado o es por sofware la verdad me serviria un ejemplo y yo me baso
muchas gracias muy gentil mi correo es wilderwtm@hotmail.com
gardiatech
mayo 17, 2008, 08:33
bueno tengo entendido que compraste un pic 16f873, si no entiendes lo del modulo de captura lee el datasheet que alli esta bien explicado, es sencillo y este pic lo tiene incorporado, en pocas palabras el modulo de captura mide el tiempo que transcurre entre dos pulsos mediante un timer.
mientras tanto adjunto un ejemplo sencillo de un frecuencimetro que es muy similar a lo que necesitas ya que cuenta pulsos por segundo, solo tienes que agregar los calculos para convertirlos a RPM, el ejemplo muestra los datos en un lcd (en paginas anteriores adjunte un tutorial) y ademas esta explicado y con comentarios....
trabajale un rato y veras que es facil, te recomiendo tambien proteus para que simules todo y comprendas mejor.
gardiatech
julio 14, 2008, 01:05
Bueno parece que no hay gente interesada en el tema de los pics, asi que porfavor eliminen este tema. gracias
cocu3
julio 15, 2008, 09:04
lo mejor que tienen los microcontroladores pics es su velocidad, lo cual es muy bueno si se trabaja desde un compilador en assembler.
Existen micros de ocho bits que casi alcanzan velocidades de micros de 32 bits de otros fabrcantes como los atmel.
Existe comunicacion uart, spi, can, usb, ethernet, inalambrica, entre otras con estos microcontoladore, asi que no son slo una manera de encendes leds sino que permiten crear grandes proyectos y aplicaciones sorprendentes. Lo unico que hay que hacer es tener paciencia y ganas de ponerlos funcionando
saluds y no eliminen el foro
darioramirez
julio 16, 2008, 08:54
Soy nuevo novato en el asunto; tengo este programador http://melabs.com/products/epic.htm mi pregunta es,, puedo optar por otro software para programar ó tiene que ser el que trae este aparato.
Augusto Munar
agosto 9, 2008, 10:07
hola me puedes colaborar con un codigo que me convierta los datos que recibo del pic al pc en un archivo txt el pic es el 18f4550
te lo recomiendo urgente
lagarworks
agosto 9, 2008, 10:21
como asi en un archivo txt??
osea el pic supongo que lo pondras a mandar los datos por serial?
algun software lo recibe lo empaqueta y le da el formato que quieras por ejemplo .txt
o quieres que el PIC te maneje por software algun tipo de terminal de envio de archivos?
unbek4nnt
agosto 29, 2008, 07:37
?
txt? no se para que, pero esas cosas no se preguntan :P (nada peor que uno preguntar algo y que las respuestas sean : y para que?, esto no es yahoooanswers, es laneros carajo! :P)
pues no explicó bien el hombre, pero me imagino que quiere hacer una especie de data logger, tomar medida de algo y ponerla en un archivo cualquiera para tener los datos através de un cierto tiempo.
si no tiene que ser tan "independiente" el manejo del programa, en hyperterminal hay una opcion de capturar texto que creo que es para eso, si usted quiere es un programa que tome los datos por un puerto, y se los ponga en un archivo, en la red hay codigos para eso en varios lenguajes, por ejemplo : http://www.tizag.com/phpT/filewrite.php , para php.
yo para serte sincero, lo haria mas bien con una base de datos, pero no sabria si ud las maneja asi que no me atrevo a decirle que lo haga asi o asá :P:P:P:P:P:P:P
yo personalmente no te puedo ayudar entregandote un programa funcionando, ademas segun entiendo la politica de laneros es que esto no es un portal de tareas :P, pero si especifica mas la cosa, depronto alguien le da el programa funcionando ahi de buenas.
eso si, ensaye en HYPERTERMINAL o alguna terminal parecida(nunca lo he hecho)
vBulletin®, Copyright ©2000-2008, Jelsoft Enterprises Ltd.