TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: gesteva en 16 de Marzo de 2005, 18:02:00
-
He estado intentando encender un led con este pic, el pic18f452 pero no puedo compilar el codigo que resulta bastante basico y sencillo.
Que se debe considerar en este pic a diferencia del pic16f877?por ejemplo. Su arquitectura es diferente y por ende tiene otros registros que necesitan ser configurados?
Alguien ha programado este PIC en PICBASIC Pro?
Saludos
-
No he funcionado con PBP con el 18, pero si he arrancado un 18F452 con protón y creo que lo que hay que tener en cuenta es la palabra de configuración. Esta es mucho más dificil que la de la serie 16, pero el resto de cosas va igual.
Te pongo el ejemplo que yo he hecho para probar en prtón. Ten encuenta que esto es una cosa de pruebas y no hace practicamente nada, transmite por la puerta serie un valor de la tensión que aplico con un potenciómetro, hago la media con 20 valores y nada más. Te lo pongo por si te puede servir, aunque la sintaxis es un poco diferente a la de PBP.
Hay varias subrutinas que están comentadas y no funcionan.
Espero que te sea útil.
"****************************************************************
"* Titulo : Prueba del micro 18F452 *
"* Nombre : *
"* Autor : *
"* Notice : Copyright (c) 2002 *
"* : All Rights Reserved *
"* Fecha : 25/01/2005 *
"* Version : 1.00 *
"* MCU : PIC18F452 *
"* COMPILER: PROTON+ Compiler. Version 3.06 *
"* : *
"* REVISIÓN: *
"* *
"* REVISIÓN: *
"* REVISION: *
"* REVISION: *
"****************************************************************
"***************************************
"* FUSIBLES *
"***************************************
@CONFIG_REQ
@__CONFIG CONFIG1H, OSCS_OFF_1 & HS_OSC_1
@__CONFIG CONFIG2L, BOR_ON_2 & BORV_45_2 & PWRT_ON_2
@__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
@__CONFIG CONFIG3H, CCP2MX_ON_3
@__CONFIG CONFIG4L, STVR_ON_4 & LVP_OFF_4 & DEBUG_OFF_4
" SCS desactivado & Modo HS (20MHz) activado
" BOR activado & Tension BOR 4.5 & PWRT activado
" WDT desactivado & WDT post scaler a 128
" CCP2 multiplex activado
" Stack overflow reset activado & Low-voltage ICSP desactivado & debug desactivado
"** FIN DE FUSIBLES
"*****************************
"* DEFINE *
"*****************************
DEVICE 18F452
DECLARE XTAL 20 "Frecuencia del reloj 20MHz
DECLARE WATCHDOG OFF "Wachdog desconectado
DECLARE BOOTLOADER ON "Bootloader conectado
"DECLARE PARA PUERTA SERIE SOFTWARE*********
" DECLARE RSOUT_PIN PORTC.6
" DECLARE RSOUT_MODE TRUE
" DECLARE RSOUT_PACE 1000
" DECLARE RSIN_PIN PORTC.7
" DECLARE RSIN_MODE TRUE
" DECLARE RSIN_TIMEOUT 30 "Tiempo de espera en recepción de 30 milisegundos
" DECLARE SERIAL_BAUD 9600
HSERIAL_BAUD 19200 " Ajusto velocidad a 19200
HSERIAL_RCSTA %10010000 " Habilito puerto serie y recepcion continua
HSERIAL_TXSTA %00100100 " Habilito transmisión, modo asincrono BRGH 1
HSERIAL_CLEAR ON " Limpiar bufer antes de recibir
DECLARE ADIN_RES 12 " Resultado de 10 bits
DECLARE ADIN_TAD 32_FOSC " Elijo RC OSC, 2_FOSC , 8_FOSC , 32_FOSC, FRC
DECLARE ADIN_STIME 50 " Tiempo de muestreo 50us
"** FIN DE DEFINE
"DEFINICION DE CONSTANTES
SYMBOL LEDROJO = PORTE.1 "Led rojo
SYMBOL LEDVERDE=PORTE.0 "Led rojo
"DEFINICION DE VARIABLES
DIM cadena1 AS STRING * 40
DIM F_bufer AS BIT "Flag de pulsaciones guardadas en el bufer de pulsaciones
DIM F_tecla AS BIT "Flag que hay una tecla pulsada
" dim F_teclapulsada as bit
DIM F_okey AS BIT "Flag que indica que la transmision/recep es buena
DIM bufer_boton[10] AS BYTE "Bufer para guardar pulsaciones
DIM cuenta AS BYTE
DIM valor AS WORD
DIM RAWvalor AS WORD
DIM suma AS WORD
DIM veces AS BYTE
"DEFINICION DE LOS PINES DE ENTRADA/SALIDA.
ADCON1 = %10000000 "PORTA son canales analógicos
TRISA=%00000001 "Los pin PORTA son salidas
TRISB=%11111111 "Todo el puerto son entradas.
TRISC=%10000000 "Los pin son SALIDAS.
TRISD=%00000000 "Los pin son SALIDAS.
TRISE=%00000000 "Los pin son SALIDAS.
GOTO main "Me voy al comienzo del programa
"*************************************************************************
"** SUBRUTINA: escribir_PCF
"** escribe uno de los expansores de bus
"*************************************************************************
escribir_PCF:
"HBUSOUT direccion_I2C, [dato_I2C]
RETURN
"** FIN SUBRUTINA: escribir_PCF
"*************************************************************************
"** SUBRUTINA: pitar
"** produce TEMPO8 pitos, espaciados TEMPO16 milisegundos
"** Los parámetros de entrada se ajustan antes de la llamada
"*************************************************************************
pitar:
" FOR j=1 TO tempo8
" PITO=~PITO
" DELAYMS tempo16
" NEXT j
" PITO=0
RETURN
"** FIN SUBRUTINA: pitar
"*************************************************************************
"** SUBRUTINA: visualizar
"** Visualiza en el display la puerta que realiza la llamada y el sentido
"** de paso solicitado (entrada o salida)
"*************************************************************************
visualizar:
" CLS
" CURSOR 1,1
" PRINT CSTR linea1
" CURSOR 2,1
" PRINT CSTR sentido
RETURN
"** FIN SUBRUTINA: visualizar
"*************************************************************************
"** SUBRUTINA: recibir
"** Recibe la respuesta a un comando por la puerta serie.
"** Hay un tiempo de espera de 30 ms
"*************************************************************************
recibir:
" FLUJO=recibo
" RSIN {tiempo_espera},dato1_R,dato2_R,dato3_R
" tiempo_espera: "Termina la recepción pasado el timeout
RETURN
"** FIN SUBRUTINA: recibir
"*************************************************************************
"** SUBRUTINA: transmitir
"** Transmite un comando por la puerta serie esperando 5ms entre cada byte.
"*************************************************************************
transmitir:
" FLUJO=transmito
" DELAYMS 5 "Espero a que suba la señal
" RSOUT dato1
" DELAYMS 5
" RSOUT dato2
" DELAYMS 5
" RSOUT dato3
" FLUJO=recibo
RETURN
"** FIN SUBRUTINA: transmitir
"*************************************************************************
"** SUBRUTINA: inicializar
"** Arranca el equipo y pone los valores de inicialización
"*************************************************************************
inicializar:
HRSOUT "GF.....VER 1.0" ,10,13
RETURN
"** FIN SUBRUTINA: inicializar
"************************
"** PROGRAMA PRINCIPAL **
"************************
main:
"INICIALIZO VARIABLES DEL SISTEMA
cuenta=0
cadena1="HOLA CARIÑO, HE ENCOGIDO A LOS NIÑOS"
GOSUB inicializar
DELAYMS 2000
WHILE 1=1
suma=0
veces=0
WHILE veces<20 "Hago la media de 20 valores para
valor = ADIN 0 "amortiguar las variaciones
suma=suma+valor
INC veces
WEND
" HRSOUT BIN16 suma," ",DEC suma," ", dec suma/20,13
valor=suma/20
RAWvalor=valor
valor=(valor */ 500) >> 2 "esto es (valor*500)/1024
DELAYMS 3
IF RAWvalor>850 THEN
HRSOUT BIN16 valor," ",DEC (valor/100),".",DEC2 valor," ",DEC RAWvalor,13
INC cuenta
ELSE
HRSOUT "Alimentación interrumpida"
ENDIF
WEND
END "Fin del programa
Saludos
Ricky
-
Hola,
Yo he programado la serie 18FXXX (18F448) y no tuve mayor problema salvo el cambio de selección de parámetros ya que para la serie 18FXXX no puedes utilizar las directivas de esta manera:
@ DEVICE XT_OSC,LVP_OFF,WDT_OFF,PROTECT_OFF
Quizá ese sea un problema.
Otra cosa, el compilador cuando le dices que utilizarás la serie 18 deberás direccionarlo a que busque el MPASMWIN como ensamblador ya que la serie 18 trabaja con macros propios de la serie obtenidos únicamente en MPASMWIN y no con el ensamblador por default PM que instala el compildor.
Otra cosa es ver dónde lo programas (¿Qué ambiente de programación usas?), ya que eso también influye; yo uso el MicroCode Studio Plus de mecanique.
Una recomendación más:
Sería de gran ayuda si publicaras el programa realizado, el que dices no funciona.
Saludos.....
Mario
-
RETOMANDO EL TEMA, PUES ESTOY FALLO DE MEMORIA DE PROGRAMA OTRA VES!!!
SALUDOS RGL, Reppuken, LES ESCRIBO PORQUE HACE UN TIEMPO ATRAS ESTUVE INTENTANDO PROGRAMAR UN PIC18F442 YA QUE LA MEMORIA DEL 877 YA NO ME DA, SEGUI SUS CONSEJOS PARA OPTIMISAR EL PROGRAMA Y FUNCIONO, PERO NUEVAMENTE VUELVO A CAER EN EL MISMO HOYO, YA QUE LA MEMORIA NO ME ALCANZA NUEVAMENTE.
EN ESE HILO QUE PUSE ME RESPONDISTE QUE DEVÍA HACER ALGO CON RESPECTO A LA PALABRA DE CONFIGURACION DEL PIC, ADEMAS DE AGREGAR UN INCLUDE "P18F442.INC" Y COMPILAR CON MPASM, PERO ME DA ERROR Y ERROR...
USO EL MICROCODE STUDIO EN SU ULTIMA VERSION Y EL COMPILADOR ES EL PBPW V2.45.
EL ARCHIVO P18F442.INC QUE TENGO DICE ESTO:
;****************************************************************
;* 18F442.INC *
;* *
;* By : Leonard Zerman, Jeff Schmoyer *
;* Notice : Copyright (c) 2004 microEngineering Labs, Inc. *
;* All Rights Reserved *
;* Date : 01/27/04 *
;* Version : 2.45 *
;* Notes : *
;****************************************************************
NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F442, r = dec, w = -311, f = inhx32
INCLUDE "P18F442.INC" ; MPASM Header
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 8
POR FAVOR, SI PUEDES AYUDARME EN ESTO ESTARIA MUY AGRADECIDO!
SALUDOS, GESTEVA
-
Hola.
Tenía muuuuuuuuuuuuuuuuuuuuuuuuuuuchísimo tiempo de no ingresar a estas páginas. Ya termine la carrera así que casi no tengo tiempo de meterme a leer.
Sobre tu pregunta......
¿Lo que te falta de memoria es flash o ram?
Creo leí que utilizabas 18F442. Tiene 16K de flash y 768 de ram (creo). Si eso no te es suficiente pues cambiate a un 452 de 32K con 1536 ram.
Creo (pudiera ser) que tienes algo que también yo tenía. ¿Acaso usas la intrucción de BranchL o BranchH?
¿Tienes muchos registros de memoria activos (ram)?
Yo participé en un programa que se hizo para un sistema de detección de botellas para Nestle (de aquí de Mexicali) en el cual se utilizaban muchos registros Ram y se mandaba llamar a BRANCHs y el programa se quedaba colgado.
Ahora bien, quizá por aqui no es el asunto.
¿Qué usas para programar?
Yo uso el PICSTART PLUS de µicrochip (con MPLAB 7.01). Aquí una vez compilado puedo mover los fusibles de programación en CONFIGURATION BITS.
Tampoco creo que eso sea ya que dices que no tienes memoria asi que probablemente sea antes de compilar.
Lo más recomendable sería que dejaras escrito el programa o (por eso de las piraterías) mencionaras lo que te pone el MicroCode Studio en los errores; con esa información creo se podría encontrar la raíz del problema y quien sabe, quizá hasta puedas usar el 16F877 de 8K de flash.
Sobre lo que se mencionó de los fusibles en la réplica pasada.....
La primera vez que quise programar un 18FXXX tuve problemas pero la persona de Reynolds (www.rentron.com), me ayudó enormemente. Si no se puede solucionar quizá deberías dirigirte a él.
El problema que yo tenía era que quería prender y apagar led por led del puerto B de un 18F448 pero no podía. Me decía que debía utilizar Mplab assambler o algo asi (fue en Junio del 2004 asi que no recuerdo bien).
Este es el programa original:
DEFINE NO_CLRWDT 1 " Sin perro Guardian
TRISB=0
loop: PORTB.0=1 " Turn on LED connected to PORTB.0
PORTB.0=0 " Turn on LED connected to PORTB.0
PORTB.1=1 " Turn on LED connected to PORTB.0
PORTB.1=0 " Turn on LED connected to PORTB.0
PORTB.2=1 " Turn on LED connected to PORTB.0
PORTB.2=0 " Turn on LED connected to PORTB.0
PORTB.3=1 " Turn on LED connected to PORTB.0
PORTB.3=0 " Turn on LED connected to PORTB.0
PORTB.4=1 " Turn on LED connected to PORTB.0
PORTB.4=0 " Turn on LED connected to PORTB.0
PORTB.5=1 " Turn on LED connected to PORTB.0
PORTB.5=0 " Turn on LED connected to PORTB.0
PORTB.6=1 " Turn on LED connected to PORTB.0
PORTB.6=0 " Turn on LED connected to PORTB.0
PORTB.7=1 " Turn on LED connected to PORTB.0
PORTB.7=0 " Turn on LED connected to PORTB.0
Claro que aquí faltan los tiempos de prendido y apagado pero de todas formas no funciono.
Bruce me contesto asi (en inglés, soy un poco flojo para traducir):
Hi Mario,
> I"m bothering you again for some help.
No bother at all. I"m glad to offer help whenever I can.
MPASMWIN.EXE should be located in C:Program FilesMPLAB IDEMCHIP_Tools
if you accepted the default installation directory. If CodeDesigner Lite can"t find this
it will cause the error. If you"re running MPLAB, and it can"t find MPASMWIN.EXE,
then I would recommend adding the MPLAB directory to your path or reinstalling
MPLAB.
Note: You cannot use the @ DEVICE directive unless you"re using the default PM.EXE
assembler that ships with PBP.
For the 18F series, you have to use MPASMWIN.EXE since the PM.EXE assembler does
not support the 18F series.
To change fuses when using the 18F series, you can either accept the PBP default fuse
settings located in your file named 18F448.INC, or change them like this.
Open the 18F448.INC file in your PBP directory. You will see the "default" fuse settings
like this;
INCLUDE "P18F448.INC" ; MPASM Header
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
NOLIST
Now. You have two options.
Option #1. Change the fuse configurations values to whatever you want, then
save the 18F448.INC file like this;
Assuming this (shown below in @ DEVICE line) is what you want, and since
you cannot use the @ DEVICE directive,
" @ DEVICE XT_OSC,LVP_OFF,WDT_OFF,PROTECT_OFF
You would make this change, then save the 18F448.INC file;
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
Notice how I changed only the line _WDT_ON_2H to _WDT_OFF_2H
Option #2. Simply comment out each line in the 18F448.INC file, then save the file,
and include your fuse settings in your PBP code like this;
First comment out the PBP default fuse settings. Note: Change only these lines as
shown below in your 18F448.INC file;
; __CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
; __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
; __CONFIG _CONFIG4L, _LVP_OFF_4L
Now save the 18F448.INC file with these lines commented out.
Now you can drop your 18F MPASMWIN assembler compatible fuse
settings directly into your PBP code like this;
asm
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
endasm
DEFINE NO_CLRWDT 1 " Sin perro Guardian
TRISB=0
loop: PORTB.0=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.0=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.1=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.1=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.2=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.2=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.3=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.3=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.4=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.4=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.5=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.5=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.6=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.6=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.7=1 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
PORTB.7=0 " Turn on LED connected to PORTB.0
Pause 500 " Delay for .5 seconds
GoTo loop " Go back to loop and blink LED forever
End
You may want to download MicroCode Studio free version. It"s much easier & I
think better than CodeDesigner Lite. It"s all I ever use with PBP. You can get
the free version at the link below.
http://www.rentron.com/mcstudio/mcstudio.exe
Regards,
-Bruce
tech@rentron.com
Reynolds Electronics
Como vez él me sacó de la duda y si no podemos aquí lo mejor (creo ya que si no podemos en el foro sería poco recomendable abrir otro con el mismo nombre) sería preguntarle a él.
-
MUCHAS GRACIAS Reppuken... ESTO FUE DE GRAN AYUDA PUES YA LO PUDE COMPILAR Y FUNCIONO EL MISMO PROGRAMA QUE TENIA PARA EL 877. ESTO FUE LO QUE HICE SIGUIENDO TUS INSTRUCCIONES:
1. DESCARGUE EL MPLAB IDE V7.11
2. CONFIGURE EL MICROCODE STUDIO, EN "COMPILE AND PROGRAM OPTIONS" EN LA PESTAÑA "ASSEMBLER" LA RUTA DEL MPASMWIN.EXE, (TIENE QUE SER ESTE), EL TRADICIONAL MPASM.EXE NO FUNCIONA.
3. AGREGUE LAS SIGUIENTES LINEAS EN LA CABECERA DEL PROGRAMA:
asm
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG4L, _LVP_OFF_4L
endasm
DEFINE NO_CLRWDT 1 " Sin perro Guardian
4. EN EL ARCHIVO 18F442.INC EN LA RUTA C:PBP, SE DEBE RENOMBRAR TRES LINEAS COMO SE PUEDE VER A CONTINUACION:
NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F442, r = dec, w = -311, f = inhx32
INCLUDE "P18F442.INC" ; MPASM Header
; __CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
; __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
; __CONFIG _CONFIG4L, _LVP_OFF_4L
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 8
4. LUEGO SE GRABA, SE COMPILA Y LISTO!
LO HICE PARA UN PIC18F442. NO DARÍAMOS CON ESTOS DETALLES DE NO SER POR LA AYUDA PRESTADA EN ESTE FORO.
AGRADECIDO! 
-
Que bien.


Que bueno que se pudo y no era nada del otro mundo