SoloCodigo
Programación Específica => Microcontroladores => Mensaje iniciado por: salvadorss04 en Miércoles 31 de Mayo de 2006, 14:21
-
hola a todos mi nombre es salvador solar solar y estoy buscando algunos ejemplos en codigo fuente para el microcontrolador pic 16f84a.
bueno el asunto es que estoy empezando a estudiar estos microcontoladores y necesito algunos ejemplos, tambien estoy contruyendo un juego de luces con el 16f84a para el cual necesito los ejemplo, este juego de luces no tiene cristal para ello utiliza un condendador poliester 103. para enganchar el reloj.
gracias de antemano, si necesitacen una foto luego se los envio pues todavia mo lo termino
-
Hola y bienvenido!
Es un gusto tenerte por aca y saber que empiezas con los micros, pero no quiero desilucionarte... Si empiezas, no te entretengas mucho con el 16F84, ya está casi difunto (después de alcanzar la fama :D ) Una buena opción sería el 16F876 ó el 16F877, o fijate en el 16F628. Tienen más periféricos, y son más baratos; no creas que sean más complicados...
Info, ejemplos y demás, puedes conseguir con Emule, hay mucho para el 16F84. No te preocupes, porque sirve como base también para los otros micros que te cuento aquí.
Empieza con asembler, pero desde ya handa preparandote para abordar el C.
Al principio busca cosas simples, y despacio las vas complicando.
Diseñate una placa multipropósito, para no tener que estar haciendo una nueva cada vez que quieras experimentar algo.
Ah, y cuando te de dolor de cabeza, sal a dar una vuelta y continua al día siguiente :P
Y de más esta decir que ya tiene que estar en tu favoritos agendada la dirección de este foro y la de la página de microchip (www.microchip.com (http://www.microchip.com)), alli encontrarás todas las hojas de datos, que tienes que bajar y leer la del micro que uses(importante!!! :o )
Bueno, estos son algunos concejos que se me ocurren ahora... No es tan complicado!
Y recuerda, siempre puedes consultar aquí ;)
Suerte, y saludos
-
muchas gracias por la bienvenida
en cuanto a tu comentario en realidad solo estoy empezando con el 16f84a pues me parece que hay bastante informacion al respecto , he leido su datasheet del pic 16f84a estoy armando un secuencial de luces de 8 canales con dicho pic y lo que necesito son algunos ejemplos basicos para poder encaminarme, agradecere cualquier ejemplo, estoy usando el mplap y el ic-prog gracias por la atencion.
conozco algo de c++ nose si eso es lo que se necesita saber
ahora estoy leyendo algo de las instrucciones del PIC 16f84a
-
hola a todos mi nombre es salvador solar solar y estoy buscando algunos ejemplos en codigo fuente para el microcontrolador pic 16f84a.
hola, :hola: aqui te dejo un link donde hay unos programas en ensamblador para el pic 16F84A con esquema electrico y todo, yo tome como ejemplo las practicas estan muy bien explicadas, checalas al igual que los proyectos talvez te puedan ser de ayuda
http://platea.pntic.mec.es/~lmarti2/ (http://platea.pntic.mec.es/~lmarti2/) (estan en el curso Microcontroladores)
con respecto a:Si empiezas, no te entretengas mucho con el 16F84, ya está casi difunto (después de alcanzar la fama ) Una buena opción sería el 16F876 ó el 16F877, o fijate en el 16F628. Tienen más periféricos, y son más baratos; no creas que sean más complicados...
:) estoy totalmente de acuerdo yo empeze con el PIC16F877 con muchas mas funciones, aunque actualmente uso el pic16F87, menos funciones pero mas economico.
en realidad solo estoy empezando con el 16f84a pues me parece que hay bastante informacion al respecto
:lol: es la unico bueno de esos pic 16F84 que hay bastante informacion en Español.
saludos y espero te sirvan los links :comp:
-
hola tania_D exclente pagina para poder comenzar pero edite en mplab la practica numero 1 y luego de editar proyecto y y luego construir proyecto (ctrl + F10) me sale el siguinete mensaje
Building LUZ1.HEX...
Compiling LUZ1.ASM:
Command line: "C:\ARCHIV~1\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /c+ /p16F84A /q D:\SAM\EJEMPL~1\EJEM1\LUZ1.ASM"
Message[302] D:\SAM\EJEMPL~1\EJEM1\LUZ1.ASM 25 : Register in operand not in bank 0. Ensure that bank bits are correct.
Build completed successfully.
nose que significa pero igual lo guarde y abri el archivo luz1.hex con el ic-prog este lo abrio normal pero cuando lo carge al pic 16f84a me dice que fue grabado correctamente pero al probarlo en el esquema de la practica 1 de la pagina que me diste los leds no encienden, tendra qu ver algo es mensaje (en el mplab) o es que otra cosa esta mal, por favor ayudame
-
hola tania_D exclente pagina para poder comenzar pero edite en mplab la practica numero 1 y luego de editar proyecto y y luego construir proyecto (ctrl + F10) me sale el siguinete mensaje
Building LUZ1.HEX...
Compiling LUZ1.ASM:
Command line: "C:\ARCHIV~1\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /c+ /p16F84A /q D:\SAM\EJEMPL~1\EJEM1\LUZ1.ASM"
Message[302] D:\SAM\EJEMPL~1\EJEM1\LUZ1.ASM 25 : Register in operand not in bank 0. Ensure that bank bits are correct.
Build completed successfully.
nose que significa pero igual lo guarde y abri el archivo luz1.hex con el ic-prog este lo abrio normal pero cuando lo carge al pic 16f84a me dice que fue grabado correctamente pero al probarlo en el esquema de la practica 1 de la pagina que me diste los leds no encienden, tendra qu ver algo es mensaje (en el mplab) o es que otra cosa esta mal, por favor ayudame
-
Hola!! Bienvenido al mundo de los micros! :D :lol: Tu primer problema, y vaya que problema... creo que tu micro está quemado :( No, mentira es un chiste :P
Los PIC, y vale para todos los modelos, tienen la RAM particionada en varios bancos. Si te fijas en el registro STATUS, hay un par de bits (RP0 y RP1) con los que tienes que seleccionar tu mismo que banco vas a acceder; en el caso del 16F84, solo tiene 2 bancos, por lo que solo usas el bit RP0. Estos bits no son otra cosa que los bits de más peso de la dirección RAM.
Si miras el mensaje, es el 302, y dice "... not in bank 0..."
El programa se compila igual, pero no funciona porque estás accediendo a una posición de RAM distinta a la que quieres... y sabes que, por eso no se enciende el LED!! Los registros TRISx están en el banco 1, mientras que en la misma posición del banco 0 están los PORTx (coinciden). En tu caso, estoy seguro que es asi, escribes el TRIS correspondiente sin poner a 1 RP0 (RP1 = 0), entonces no estás definiendo el sentido de los pines de ese puerto. Por defecto, todos los pines arrancan como entrada; y en tu caso siguen siempre como entrada... por eso no enciende el LED ;)
Bueno, fijate y nos comentas...
Ah!, y a leer la hoja de datos, no les digo esto por capricho!
No te preocupes, a todos nos ha pasado el 302; a mi me tuvo un tiempo...
Saludos :hola:
-
disculpa pero si stoy psando al banco 1, por si acaso aqui te envios el texto
;PROGRAMA LED.ASM
;Apagar y encender el puerto B cada segundo
;--------------------------------------------------------
list p=16f84A
include "p16F84A.inc"
org 00h
reset
goto inicio
org 10h
inicio
;-------------------------------------------
;Configurar el puerto B como salida
;--------------------------------------------
;Registro TRISB=00h para salidas.
bsf STATUS,5 ;pongo a 1 el bit 5 del registro STATUS
; para entrar en el banco1.
movlw 00h ;cargo w con el dato 00h.
movwf TRISB ;cargo el registro TRISB con el w para
;hacer el puertoB como salida.
bcf STATUS,5 ;pongo a cero el bit 5 del registro
;STATUS para entrar en el banco 0.
;-----------------------------------
;PROGRAMA PRINCIPAL
;-----------------------------------
programa
movlw 00h ;cargo w con el dato 00h.
movwf PORTB ;cargo el registro PORTB con el w.
call sg1 ;subrutina de retardo de 1 seg.
call sg1
movlw 0fh ;cargo w con el dato 0fh.
movwf PORTB ;cargo el registro PORTB con el w.
call sg1
call sg1
swapf PORTB,1 ;aplico la intrucción al
;contenido del registro PORTB
;y lo deposito en el mismo ya
;que d= 1.
call sg1
call sg1
movlw 0ffh ;cargo el w con el dato ffh.
movwf PORTB ;cargo PORTB con el w.
call sg1
call sg1
call rotacion;subrutina de rotar un solo
;led de derecha a izquierda y
;viceversa ,una sola vez.
goto programa;salto al comienzo del progra-
;ma principal.
;-------------------------------------------------------------
;PROGRAMA DE ROTACION.
;-------------------------------------------------------------
rotacion
movlw 00h ;cargo w con el dato 00h.
movwf 10h ;cargo registro 10h con el w.
movlw 09h ;cargo w con el dato 09h.
movwf 11h ;cargo el registro 11h con w.
bsf STATUS,0;pongo a uno el bit 0 del STATUS
;( bit 0 = C = acarreo ).
der
decfsz 11h,1 ;decremento el registro 11h y salto si
;es cero y deposito el contenido en
;11h ya que d= 1.
goto derecha;salto a la etiqueta ( dirección ) llama-
;da derecha.
movlw 08h ;cargo w con el dato 08h.
movwf 11h ;cargo el registro 11h con w.
bcf STATUS,0;pongo a cero el bit 0 de STATUS
;( bit 0 = C = acarreo ).
izq
decfsz 11h,1 ;decremento el registro 11h y salto
;si vale cero depositando el conteni-
;do en el mismo ya d= 1.
goto izquierda;salto a la etiqueta ( dirección ) lla-
;mada izquierda.
return ;regreso de subrutina.
derecha
rrf 10h,0 ;roto a la derecha el contenido del
;registro 10h y lo almaceno en w ya
;que d= 0.
movwf 10h ;cargo el registro 10h con el w.
movwf PORTB ;cargo el registro PORTB con el w.
call sg1
goto der ;salto a etiqueta der.
izquierda
rlf 10h,0 ;roto a la izquierda el contenido del
;registro 10h y lo almaceno en w ya
;que d= 0.
movwf 10h ;cargo 10h con el w.
movwf PORTB ;cargo PORTB con w.
call sg1
goto izq ;salto a etiqueta izq.
;RETARDOS
;----------------------------------------
;ffh=255 goto=2 useg. decfsz=1 useg.
;(255 x 2) + 255= 765 useg
;(765 x 765) + 255= 585480 useg.
;(585480 x 2) + 1= 1170961 useg.
sg1
movlw 0ffh
movwf 0ch
movwf 0dh
movlw 01h
movwf 0eh
salto1
decfsz 0ch,1
goto salto1
decfsz 0dh,1
goto salto1
decfsz 0eh,1
goto salto1
return
end
gracias por la atencion
-
Hola! Tienes razón, pasas al banco 1, disculpas... :whistling:
Bueno, veamos lo siguiente... Cuando lo programas, fijate que esté desactivado el watchdog; también que esté bien seleccionado el tipo de oscilador (por lo que veo usas un xtal de 4 MHz).
La otra pregunta es si está bien conectado el led.
El programa, así como está, debería funcionar.
Pero prueba con lo siguiente, para simplificar:
programa
movlw 0xFF
movwf PORTB
call sg1
clrf PORTB
call sg1
goto programa
Al principio puedes poner
errorlevel -302
Y justo antes de esta línea, y despues del include
__CONFIG 0x3FF9
Con eso lo configuras para cristal (4 MHz = XT), sin watchdog ni protección de código.
Prueba y nos cuentas como te fue; debería funcionar...
Saludos
-
Hola salvadorss04 :hola: este mensaje
Message[302] D:\SAM\EJEMPL~1\EJEM1\LUZ1.ASM 25 : Register in operand not in bank 0. Ensure that bank bits are correct.
:) es solo un mensaje para que te asegures que estas trabajando en el banco correcto, NO es un error, lo va a poner siempre que ocupes registros que estan fuera del banco0, si accedes 100 veces a un registro fuera del banco0, te pondra 100 veces este mensaje, asi que que no hay problema con estos mensajes solo es para que estes pendiente :comp:, si te aparecece esto Build completed successfully
es que el proceso fue exitoso y que no hay errores :comp: .
ahora con respecto a:
pero al probarlo en el esquema de la practica 1 de la pagina que me diste los leds no encienden, tendra qu ver algo es mensaje (en el mplab) o es que otra cosa esta mal, por favor ayudame
ya que tienes el MPLAB pruebalo en el simulador veras que funciona, tu problema es seguramente lo que dice Huguen_aus_Tirol desactivar el watchdog y seleccionar el oscilador correcto, el programa no trae las sentecias necesarias porque esta para quemarlo con el WINPIC800 y no con el IC-PROG, ya que con el WINPIC800 seleccionar el oscilador y desactivar el watchdog se hace marcando chequecitos antes de quemarlo y NO poniendo sentencias en el programa. Asi que intentalo, debe funcionar :smartass:
saludos :hola: