De Pic a Pic.

Hola:

Quiero comprobar una cosa, quiero con este código del 16F84A adecuarlo al 16F88. He visto que el 16F88 es mucho más potente y más barato. Lo que hago con el 16F84A, se puede hacer con el 16F88 lo que no entiendo es hacer cosas como que primero tengo que configurarlo como entradas digitales, cosas así.

El que pueda pasar todo este código al 16F88 que lo logre, quiere ver sus comparativa y aprender como se emigra. seguro que en la zona de datos en diferente.

Código:
;************************************** 16F84A.asm
;
; Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A al que está conectado
; un array de interruptores. Por ejemplo, si por el Puerto A se introduce "---11001", por
; el Puerto B aparecerá "xxx11001" (el valor de las tres líneas superiores no importa).
;
; ZONA DE DATOS **********************************************************************

	__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC	; Configuración para el
															; grabador.
	LIST	P=16F84A			; Procesador.
	INCLUDE <P16F84A.INC>		; Definición de los operandos utilizados.

; ZONA DE CÓDIGOS ********************************************************************

	ORG 	0					; El programa comienza en la dirección 0 de memoria de
Inicio							; programa.
	bsf		STATUS,RP0			; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
	clrf	TRISB				; Las líneas del Puerto B se configuran como salidas.
	movlw	b'11111111'
	movwf	TRISA				; Las líneas del Puerto A se configuran como entradas.
	bcf		STATUS,RP0			; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
	movf 	PORTA,W				; Lee el Puerto A.
	movwf	PORTB				; El contenido de W se visualiza por el Puerto B.
	goto 	Principal			; Crea un bucle cerrado.

	END
 
El puerto A en este PIC se utiliza tambien como entradas analogicas, y por defecto (ante un reset) se configura como entrada analógica en lugar de entrada digital.
Por este motivo si se quiere usar el PORTA como E/S digital hay que configurarlo con el registro ANSEL.

ejemplo:
MOVLW 0
MOVWF ANSEL
esto configura todo el port A como e/s digital.

El port B es similar al F84.

Los fuses cambian en todos los modelos de PIC, por eso tienes que ver cual fuse configurar.
Ejemplo el CP (code protection) no es mas un bit, sino una serie de bits, porque puedes proteger varias zonas de memoria.
Tambien encontraras diferencia en la configuracion del clock, ya que este modelo tiene reloj interno.

El programita quedaria asi:

;********************************************************************
INCLUDE <P16F88.INC> ; Definición de los operandos utilizados.
__CONFIG _CONFIG1, _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLR_ON & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
LIST P=16F88 ; Procesador.
;********************************************************************
ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B se configuran como salidas.
MOVLW 0
MOVWF ANSEL
movlw b'11111111'
movwf TRISA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
movf PORTA,W ; Lee el Puerto A.
movwf PORTB ; El contenido de W se visualiza por el Puerto B.
goto Principal ; Crea un bucle cerrado.

END
 
Muchas gracias, jamás he odio nada del ANSEL. Voy a buscar información sobre ello. Ya que se me quemó el 16F84A no se si meterme con el 16F88.

Por cierto, ya me gustaría configurar el cristal de cuarzo a 4MHz, me refiero el interno del 16F88 ya que el 16F84A es externo. Con el 16F88 me ahorra componentes tanto el cristal como los condensadores. Dicen que se controla programándolo, ¿Cómo se hace?

Gracias de nuevo.
 
Meta dijo:
Muchas gracias, jamás he odio nada del ANSEL. Voy a buscar información sobre ello. Ya que se me quemó el 16F84A no se si meterme con el 16F88.

Por cierto, ya me gustaría configurar el cristal de cuarzo a 4MHz, me refiero el interno del 16F88 ya que el 16F84A es externo. Con el 16F88 me ahorra componentes tanto el cristal como los condensadores. Dicen que se controla programándolo, ¿Cómo se hace?

Gracias de nuevo.
aqui tiens un ejemplo en ccs c compiler utlizando el oscilador interno del pic16f88 las frecuncias internas que puedes utlizar son las siguientes

31KHZ
125KHZ
250KHZ
500KHZ
1MHZ
2MHZ
4MHZ
8MHZ

Código:
/* Programa que enciende y apaga un led cada 1seg, usando el oscilador interno del PIC /a 8MHz 
#include <16F88.h>
#FUSES INTRC, NOWDT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO, NOMCLR, NOBROWNOUT, CCPB3
#use delay(clock=8000000)

void main()
{
   setup_oscillator(OSC_8MHZ|OSC_INTRC);
   output_bit( PIN_B0, 0);
   while(1)
   {
      output_toggle(PIN_B0);
      delay_ms(1000);
   }
}
 
Gracias, pero no se usar el C. Estoy aprendiendo ASM puro y duro, las 35 instrucciones que te viene la gama 16F y de milagro le estoy cogiendo el gusto. En el futuro aprenderé el C cuando me meta en un curso de C.

Aún así, gracias por postear.
 
Consultá siempre las hojas de datos del chip que estés utilizando.
Microchip cambia siempre entre un pic y otro pequeños detalles que hacen que nos funcione nada.

Con la palabra de configuracion le dices cual reloj quieres usar:
En la hoja de datos:
CONFIG – CONFIGURATION WORD REGISTER
FOSC<2:0>: Oscillator Selection bits.


En el codigo:
Código:
__CONFIG _CONFIG1, _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLR_ON & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

(Si miras el archivo P16F88.INC que estas incluyendo, al final del mismo tienes la descripcion de todos los bits de la palabra de configuracion.)
 
Meta migrar de un pic a otro no es muy complicado, sobre todo tomando en cuenta que estas migrando dentro de la familia de los 16F. Yo he migrado codigo de un 16F628 a un 16F88 sin problemas, simplemente me guio por la hoja de datos. La hoja de datos esun recurso muy importante ya que toda la funcionalidad del microcontrolador esta explicada ahi. Si quieres aprender te recomiendo que leas la hoja de datos, no tienes que leer todo, solamente aquellas partes que vayas necesitando (como la configuracion del oscilador interno o del puerto A).

PIC16F88
PIC16F87/88 Datasheet

Y aprovechando para hacerme un poco de publicidad: si algun dia ocupas hacer un circuito impreso en eagle con un 16F88 y no encuentras ese pic en ninguna libreria puedes descargar una desde mi pagina de librerias eagle
 
hola a todos soy estudiante de ingenieria y estoy empezando en el mundo de los pic elegí comenzar por el pic 16f88. este por defecto inicia con los pines como entradas analogicas, investigue la rutina para pasarlos a decimales pero parece ser que el software no reconoce (o no se que) el registro ansel y me muestra un mesaje marcado como 302 el cual me dice que pede ser que no este en el banco correcto.

sialguien me pudiera ayudar (deseo con todo mi corazon aprender a programar pic y no estoy exagerando) se lo agradeceria muchisimo.

lo que quiero hacer es encender un led (salida) dependiendo de una entrada.

le envio el codigo y el mensaje para ver si alguno sabe el porque y que de malo le ven al programa.

; Activar una salida a partir del estado de una entrada.
; Zona de direccionamiento de registros y configuracion de bits.

LIST P=16f88 ; microcontrolador a utilizar
#INCLUDE P16F88.INC ;Se incluye archivos con registros especiales.

__CONFIG _CONFIG1, _CP_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

; Zona de programa

; ETIQ OPERAC OPERANDO COMENTARIOS
ORG 0X00 ; inicio memoria de programa en direccion 00
GOTO INICIO ; voy al inicio de programa
ORG 0X05 ; salvo el vector de interrupcion

INICIO
BANKSEL TRISB ^ 0X80 ; voy al banco 1 de la memoria de datos.
MOVLW 0X00 ; cargo registro ANSEL con ceros para
; dejar los pines de los puertos como
MOVWF ANSEL ; I/O digitales
CLRF TRISB ^ 0X80 ; configuro el puerto B como salidas
MOVLW B'11111111' ; configuro el puerto A com entradas
MOVWF TRISA ^ 0X80
BANKSEL PORTB ; vuelvo al banco 0 de memoria de datos

CICLO
BTFSC PORTA,0 ; Si el bit 0 del puerto A está en 0 salto una instruccion
GOTO APAGUE ; si no lo está salto a la etiqueta APAGUE
MOVLW B'00000001' ; saco un 1 por el pin B0 del puerto B
MOVWF PORTB ; para prender el led
GOTO CICLO ; regreso a repetir el ciclo

APAGUE
CLRF PORTB ; limpio el puerto B (apago led)
GOTO CICLO ; regreso al inicio del programa
END ; final del programa.


y aqui esta el mensaje.

Clean: Deleting intermediary and output files.
Clean: Deleted file "1 led.err".
Clean: Deleted file "C:\microcontorladores\proyecto 1\1 led.cod".
Clean: Deleted file "C:\microcontorladores\proyecto 1\1 led.hex".
Clean: Deleted file "1 led.lst".
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F88 "1 led.asm" /l"1 led.lst" /e"1 led.err"
Message[302] C:\MICROCONTORLADORES\PROYECTO 1\1 LED.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct.
Loaded C:\microcontorladores\proyecto 1\1 led.COD
BUILD SUCCEEDED: Tue Apr 21 02:37:52 2009

muchas gracias por la atensión y perdonen la molestia.
daniel uribe l. :)
 
Atrás
Arriba