Program an Do
-
Upload
carlos-aranguren -
Category
Documents
-
view
257 -
download
1
Transcript of Program an Do
PROGRAMANDOElectronica, Microcontroladores, Computadores
Con la tecnología de Traductor de Googledomingo, 18 de julio de 2010
GUIA DE INICIO RAPIDO PARA PROGRAMAR MICROCONTROLADORES PIC DE MICROCHIP
Que es un microcontrolador?
Inicialmente podríamos decir que un microcontrolador es un circuito integrado que se puede programar para que haga lo que nosotros queremos, pero es eso y mucho mas, es una computadora, claro esta que del tamaño de un circuito integrado, pero hace las mismas funciones que esta.Un microcontrolador permite entrada de información (entradas), tiene la capacidad de procesar esa información, y entrega los resultados del procesamiento(salida), siendo este el esquema básico de una computadora, solo que a una escala muy pequeña.
Que necesitamos para hacer funcionar un microcontrolador?Un programa que le diga que es lo que tiene que hacer, esto es lo mismo que hacen los programas de computadora, le dicen a esta que hacer.
Y como hacemos estos programas?Los microcontroladores son sistemas digitales, por lo tanto entienden unos y ceros, pues entonces sera cuestión de escribir el programa en secuencias de unos y ceros, lo que a nosotros los humanos nos resultaría una tarea muy complicada, entonces para ello se inventaron los lenguajes de programación, que son mas fáciles de entender por nosotros y nos facilitaran la tarea de escribir los programas, para el caso de los microcontroladores cada fabricante proporciona un lenguaje con el cual se pueden controlar estas maquinas llamado lenguaje Ensamblador( Assembler ). mas adelante veremos que también se pueden programar con otros lenguajes.
Fabricantes de microcontroladores hay muchos, Freescale(Motorola), Intel, Microchip, Atmel, entre otros. Yo me ocupare de los que fabrica la empresa Microchip, mas conocidos como PIC's. La razón para usarlos es lo fácil que es conseguirlos, la variedad y lo económicos que resultan, ya que hay muchas referencias de PIC's y las herramientas para trabajar con ellos son muy fáciles de conseguir.
Para empezar no dirigimos a la pagina de Microchip y descargamos el programa MPLAB IDE (http://www.microchip.com ), este programa es para escribir en ensamblador lo que queremos que haga el microcontrolador y después traducirlo al lenguaje que entiende la maquina, a este proceso se le denomina comúnmente “compilar el programa” , claro que este programa tiene muchas mas funciones, también nos permite simular el programa, que es muy útil para encontrar errores cuando no nos funciona como queremos.
Bueno la idea era explicar la forma de programar un microcontrolador de forma fácil y no extenderme tanto, pero resulta muy difícil por que este tema es muy extenso, así que voy a empezar y espero que practicando vamos aprendiendo.
Instalamos el MPLAB
En windowsvamos a : Inicio-Programas-Microchip-MPLAB IDE
En LinuxLo instalamos con el Wine por que no tenemos una versión de este entorno gráfico para Linux, claro que si en modo consola. Existen otras formas de trabajar los PIC's en Linux como el Piklab, que es un entorno gráfico Open Source.
Esta es la vista al iniciar el MPLAD IDE, inicialmente vamos a hacer un programa sencillo, no crearemos un proyecto. Podemos cerrar las dos ventanas internas que aparecen.
Esta es la vista del PikLab para Linux
Vamos a File-New y nos abre una hoja de un editor de texto donde escribiremos nuestro primer programa. Aparece la ventana con el nombre Untitled, por que no hemos dado un nombre a nuestro programa.
Los archivos con el código de nuestro programa (código fuente) se deben guardar con la extensión .ASM, el programa que vamos a hacer como ejemplo hará que el micro prenda y apague un LED conectado en uno de sus pines ( el pin RB0 en este caso), este es como el “hola mundo” en la programación de microcontroladores, así que lo llamaremos onoff.asm.
En este punto debemos ya escoger que referencia de microcontrolador vamos a trabajar, ya que como habíamos dicho antes hay muchas referencias. El mas básico y mas usado de todos lo PIC para el aprendizaje es el PIC 16F84A, por lo que entonces el primer programa lo voy a hacer con este microcontrolador, pero después seguiré usando el PIC 16F88, ya que es un PIC mas potente que el anterior.
Empecemos copiando este código en el MPLAB
LIST P=16F84A INCLUDE P16F84A.INC
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
ORG 00 GOTO CONFIGURACION
CONFIGURACION NOP BANKSEL TRISA
CLRF TRISB BANKSEL PORTB CLRF PORTB
CICLO BSF PORTB,0 BCF PORTB,0 GOTO CICLO
END
Noten que se mantiene un orden respecto a las columnas (3 columnas), esto lo hacemos con el tabulador y es muy importante que se respete este orden. Después de haber copiado el programa, lo guardamos, en la opción File Name escribimos el nombre onoff.asm(no olviden la extensión .asm) y el la opción Files of Tipes seleccionamos la segunda opción “Assembly Source Files (*.asm.......) y le damos guardar(Save).
Notemos como al guardarlo cambian los colores del texto en el código.
Ya tenemos listo el código fuente. Recordemos que este esta escrito en el lenguaje de programación llamado Ensamblador o Assembler, y que la maquina no entiende esto, por eso lo debemos traducir para que la maquina lo entienda (compilar ) y para ello debemos seguir los siguientes pasos:
Seleccionar el microcontrolador en la opción Configure—Select Device nos aparece la siguiente ventana y seleccionamos nuestro PIC16F84A.
Compilar el programa con la opción Project—Quickbuild onoff.asmy si todo sale bien no aparece esta ventana diciendo que la compilación fue un éxito, que tuvo 0 errores y BUILD SUCCEEDED
Ya tenemos nuestro programa listo para enviárselo al PIC, pero de eso nos ocuparemos mas adelante, por ahora nos interesa saber como se puede hacer la simulación en el MPLAB.
Vamos Debugguer—Select Tool—MPLAB SIM. Esto es para activar el simulador.
Para la simulación tenemos las siguientes opciones que aparecen en el menu Debugguer y nos van a ser de mucha utilidad
Processor Reset F6 Reset del procesadorStep Into F7 Simulación paso a paso
Steo Over F8 Simulación paso a paso realizando las subrrutinas en tiempo real( las llamadas con CALL)
Al seleccionar el MPLAB SIM y presionar F6 tenemos la siguiente vista, noten la FLECHA VERDE que aparece en la linea 7 despues de la sentencia “ORG 00” (llamado vector de reset), esto es por que alli es donde empieza el procesador despues de un reinicio(reset).
Si presionamos F7 vemos como el programa va avanzando siguiendo las ordenes que dimos al microcontrolador.Como lo mensione al inicio este programa enciende y apaga un led conectado en el pin RB0 del micro, para observar esto en la simulacion hacemos lo siguiente:
vamos al menu View—Watch y obtenemos la siguiente vista
Vamos a organizar las dos ventanas para que se puedan ver al mismo tiempo y podamos observar como se comporta el microcontrolador en la simulación.
En la ventana Watch hacemos click derecho sobre la siguiente barra
y escojemos del menu que se nos muestran varias opciones, solo las 3 siguientes(por ahora)
Symbol NameDecimalBinary
y la barra nos quedara así
luego escogemos de la lista
que esta al lado del boton
la opción PORTB presionamos el botón y tendremos la siguiente vista
así ya tenemos todo listo para simular nuestro primer programa.
Básicamente las siguientes lineas de código son las que hacen prender y apagar el LED:
CICLO BSF PORTB,0 BCF PORTB,0 GOTO CICLO
Para entender la simulación debemos saber que los pines del microcontrolador están relacionados con algo que se llaman puertos de entrada/salida, nuestro micro tiene dos puertos el PORTA y el PORTB (así los bautizo el fabricante), cada uno de estos puertos esta dispuesto internamente en el micro como un Byte ( 8 bit's, se acuerdan de la electrónica digital, aquí aplica!!), por eso es que en la gráfica del Watch aparecen al frente del PORTB y debajo de la palabra Binary 8 ceros ( 00000000 ) que representan un Byte ( también se le llama REGISTRO), que a su vez representa 8 pines del micro asociados con el PORTB, osea que cada bit del registro (Byte) PORTB es un pin del circuito integrado ( del PIC), que trabalenguas, miremos la siguiente tabla:
PORTB
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Presionemos F7 hasta llegar(la flecha verde se mueve cada vez que presionamos F7) a la linea “GOTO BSF PORTB,0”, note que el RB0 es igual a 0 (cero)
presionemos F7 y vemos como cambia a 1 (uno).
Presionemos F7
presionamos F7 y vemos como se repite este ciclo una y otra vez, logrando con esto que el LED conectado al pin RB0 encienda y apague.Presionamos F7 y vemos como la flecha verde se posiciona de nuevo al frente de ciclo.
Con esto doy por terminada esta guiá de iniciación a la programación de microcontroladores PIC, ya con esto lograremos escribir y simular nuestros programas, en una próxima guiá describiré los pasos para lograr hacer que funcione en un board con un micro de verdad( y no en simulaciones)
Usted puede compiar, distribuir y/o modificar este doucmento bajo los terminos de la GFDL (licencia de documentacion libre de GNU) versión 1.3 o superior publicada por la fundacion de sontware libre.
Copyright (C) Edwin Espinosa Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
PROGRAMANDOElectronica, Microcontroladores, Computadores
Con la tecnología de Traductor de Googleviernes, 13 de agosto de 2010
Fusibles de configuracion "Bit's de configuracion" de los PIC'sLos bit's de configuracion o mas comunmente llamados "fusibles" permiten confugurar ciertas funciones en los microcontroladores PIC, como el tipo de cristal para el oscilador, permiten proteger el codigo en el micro, entre muchas funciones. La cantidad de funciones que se pueden configurar con los fusibles dependen del microcontrolador, si tenemos en el 16F84A 4 funciones, en el 16F88 son alrededor de 13 funciones.
Bueno y para que sirven?Como lo dije antes son para configurar algunas funciones del micro, como el tipo de oscilador, la proteccion de codigo, habilitar el perro guardian ( por que si no este los muerde), habilitar el reset maestro, habilitar un reset inicial, habilitar reset por bajo voltage en la fuente, y otros que como les dije depende del micro usado.
Ahhh y cuando se usan??En el momento en que se quiere programar el micro se le deben configurar los fusibles ( esto es usando un software como el WINPIC800, me parece necesario agradecer a los creadores de este software quienes nos permiten descargarlo y usarlo sin ningun problema, www.winpic800.com, GRACIAS!!!!!!) y si estamos usando alguno de los programadores de MICROCHIP como el pickit2 o el pickit3 debemos escribir la configuracion de estos fusibles en la cabecera de nuestro fuente antes de compilar.
Como se que fusibles usa mi pequeño monstruo?Como siempre digo "pues en el manual del micro", jeje suena obvio, y los podes obtener del fichero que incluimos en la cabecera del fuente, el P16F88.INC por ejemplo, que se encuentra en la carpeta "MPASM suite" que esta dentro de la carpeta "microchip" donde instalamos el MPLAB, ojo que el nombre del fichero depende del micro.
De los ficheros antes mencionados obtube lo siguiente:
Para el 16F84A
_CP_ON EQU H'000F'_CP_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'_PWRTE_OFF EQU H'3FFF'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_LP_OSC EQU H'3FFC'_XT_OSC EQU H'3FFD'_HS_OSC EQU H'3FFE'_RC_OSC EQU H'3FFF'
de donde se arma nuestra palabra de configuracion anteponiendo la directiva "__CONFIG"
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
Que es lo que debemos poner en la cabecera del fuente.
Aqui va la del 16F88
_CONFIG1 EQU H'2007'_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options_CP_ALL EQU H'1FFF'_CP_OFF EQU H'3FFF'_CCP1_RB0 EQU H'3FFF'_CCP1_RB3 EQU H'2FFF'_DEBUG_OFF EQU H'3FFF'_DEBUG_ON EQU H'37FF'_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected_CPD_ON EQU H'3EFF'_CPD_OFF EQU H'3FFF'_LVP_ON EQU H'3FFF'_LVP_OFF EQU H'3F7F'_BODEN_ON EQU H'3FFF'_BODEN_OFF EQU H'3FBF'_MCLR_ON EQU H'3FFF'_MCLR_OFF EQU H'3FDF'_PWRTE_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_EXTRC_CLKOUT EQU H'3FFF'_EXTRC_IO EQU H'3FFE'_INTRC_CLKOUT EQU H'3FFD'_INTRC_IO EQU H'3FFC'_EXTCLK EQU H'3FEF'_HS_OSC EQU H'3FEE'_XT_OSC EQU H'3FED'_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options_IESO_ON EQU H'3FFF'_IESO_OFF EQU H'3FFD'_FCMEN_ON EQU H'3FFF'_FCMEN_OFF EQU H'3FFE'
y la palabra seria algo como esto:
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;Program Configuration Register 2__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
Si necesitan de otro micro la pueden consultar el el fichero del micro como les comente antes, ahhh bueno pues!!!! me pueden escribir yo se las pongo aqui.Publicado por edwtron en 10:06
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con FacebookEtiquetas: 16F84A, 16F88, bit's, cristal, fusibles, memoria, microchip, microcontrolador, MPLAB IDE,oscilador, perro guardian
1 comentario:
1.
Danny 23 de noviembre de 2010 23:08
Socio usted es el mejor...
Excelentes esas plantillas...
Monta por favor herramientas de manejo del C para pics...
Responder
Entrada más reciente Entrada antigua Página principal
Suscribirse a: Enviar comentarios (Atom)Ajedrez
Etiquetas
12F675 16F84A 16F88 16f886 AD analogo Arduino assembler atmel basico binario bit's Byte C++ circuito circuito integrado codeblocks compilar contador control conversor cristal debugger desborde digital display ejempl
o ensamblador frecuencia Freescale fusibles harware libre hola
mundo instalacion instrucciones interrupcion interrupciones java LCD LED maquina memoria microchip microcontrolador microcontroladores modos modulos lcd monitor MPLAB IDE multiplexion netbeans oscilador P12F629 p16f88 p16f883 periodo perro
guardian PIC Piklab plantilla plataforma potencia potenciometro programacion Pulsador PWM Rutinas secuenciador simulacion software temporizador timer TMR0 USART
Sigueme en tu e-mail
Archivo del blog
► 2012 (22)
▼ 2010 (13)
o ► noviembre (1)
o ► octubre (3)
o ► septiembre (2)
o ▼ agosto (2)
Modulos LCD con PICs
Fusibles de configuracion "Bit's de configuracion"...
o ► julio (5)
Enlaces http://taller-electronica.blogspot.com http://www.debian.org/ http://es.wikipedia.org http://www.php.net/ http://c.conclase.net/ http://www.todopic.com.ar/ http://www.programacion.com/ http://www.securitybydefault.com/ http://www.microchip.com http://www.java.net/ http://www.python.org/
SociableSeleccion Youtube
Submit
con la tecnología de
Entradas populares
Contador de 0 a 99 con PICActualizado 21 de junio de 2012 22:48 Implementacion de un contador de 0 a 99 con dos display de 7 segmentos y microcontrolador usando la...
Fusibles de configuracion "Bit's de configuracion" de los PIC's Los bit's de configuracion o mas comunmente llamados "fusibles" permiten confugurar ciertas funciones en los microcontroladore...
GUIA DE INICIO RAPIDO PARA PROGRAMAR MICROCONTROLADORES PIC DE MICROCHIPQue es un microcontrolador? Inicialmente podríamos decir que un microcontrolador es un circuito integrado que se puede programar para que ...
Contador de 0 a 99 con pulsadoresEl contador es de 0 a 99 usando la tecnica de la multiplexion, tiene un pulsador para la cuenta ascendente y otro para la cuenta descendente...
Contador ascendente y descendente con pulsadoresEl circuito tiene dos pulsadores, ascendente y descendente Circuito esquemático Código fuente LIST P=16F886 INCLUDE P16...
El timer TMR0 en los PIC con ejemploEl timer TMR0 en los PIC Es un modulo que sirve como contador o como temporizador de 8 bit's. Funcionando como temporizador el TMR0...
xorwf f,d Hace una operacion or exclusiva entre el registro W y el registro F y el resultado lo almacena en d, y d puede ser W o F. tabla de verdad ...
Plantilla para un programa en ensamblador con el PIC 16f88 A continuacion el codigo fuente base para un programa con microcontroladores PIC en ensamblador, seria interesante que lo guardaran para te...
Conversor Analogo Adigital con PIC 16F886En una entrada anterior usamos el conversor análogo a digital del microcontrolador PIC 12f675 ( http://xorwf.blogspot.com/2012/06/conversor...
PROGRAMANDOElectronica, Microcontroladores, Computadores
Con la tecnología de Traductor de Googlemartes, 31 de agosto de 2010
Modulos LCD con PICs;Los modulos LCD son otra opcion para la visualizacion de datos, diferente a los display de 7 segmentos, los modulos LCD tienen sus procpios controladores quienes interpretan las ordenes y memoria donde almacenan los simbolos que se quieren visualizar. Usan el codigo de caracteres ASCII.
vista frontal
vista trasera
;Es un estandar que tengan 14 pines, aunque algunos tienen dos mas para el control de la luz (back litgh) los pines 15 y 16
NOMBRE DE LOS PINES
; Vss VDD contraste R/S R/W enable DO D1 D2 D3 D4 ; 1 2 3 4 5 6 7 8 9 10 11
12 13 14 D5 D6 D7
DESCRIPCION DE LOS PINES
; Vss GND
; VDD +5v
;CONTRASTE Aumenta o disminuye el contraste del modulo, se puede conectar un potenciometro de 10K, los extremos a +5v y GND y el centro al este PIN
;R/S Se indica si es un dato o una orden lo que se le quiere enviar al modulo 0 = instruccion, 1 = dato
;R/W Se indica la operacion es de escritura o de lectura. 0 = escritura, 1 = lectura normalmente lo mantenemos con un cero '0'
;ENABLE Habilita el modulo para cualquier operacion.
;DO....D7 Se escribe el dato o el comando que se quiere dar al modulo.
UTILIZACION
Entre las ordenes y los datos que se le envian al modulo es necesario agregarretardos, segun los fabricantes son del orden de los microsegundos, yo voy usar retardos de 1ms para todo el programa.
INICIALIZACION
Para el funcionamiento es necesario primero inicializar el modulo.Se deben seguir los siguientes pasos:
1 RS = 0
2 E = 0
3 cargar el comando para configurar el modo de funcionamiento en 0..D7 comunicacion a 8 bits usar las dos lineas del modulo tamano del caracter 7x5
4 E = 1
5 espera un tiempo ( 1ms)
6 E = 0
7 cargo comando
enciendo el LCD enciendo el cursor cursor intermitente
8 E = 1
9 espera un tiempo ( 1ms)
10 E = 0 revisar el manual para mas comandos y todo listo
este es el pedazo de codigo que hace lo indicado
BCF PORTA,0 ;RS = 0 BCF PORTA,1 ;E = 0 MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5 MOVWF PORTB BCF PORTA,0 ;RS=0 BSF PORTA,1 ;E=1 HABILITO ESCRITURA CALL RET_1MS BCF PORTA,1 ;E = 0 CALL RET_1MS MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER MOVWF PORTB BCF PORTA,0 ;RS=0 BSF PORTA,1 ;E=1 HABILITO ESCRITURA CALL RET_1MS BCF PORTA,1 ;E = 0 CALL RET_1MS
ESCRIBIR UN DATO
1 Cargo el dato en D0 a D7
2 RS = 1
3 E = 1
4 espero un momento
5 E = 0
ejemplo visualizando la letra E
MOVLW A'E' MOVWF PORTB BSF PORTA,0 BSF PORTA,1 CALL RET_10MS BCF PORTA,1 CALL RET_10MS
circuito de prueba click para ver grande
CODIGO DE PRUEBA COMPLETO
LIST P=16F88 INCLUDE P16F88.INC ERRORLEVEL -302 CBLOCK 0X20 PDel0 , PDel1 ENDC
ORG 00 GOTO CONFIGURACION;Retardo geneerado con el PCIDEL, agradezco a su autor;RET_10MS movlw .8 ; 1 set number of repetitions (B) movwf PDel0 ; 1 |PLoop1 movlw .249 ; 1 set number of repetitions (A) movwf PDel1 ; 1 |PLoop2 clrwdt ; 1 clear watchdog clrwdt ; 1 cycle delay decfsz PDel1, 1 ; 1 + (1) is the time over? (A) goto PLoop2 ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) is the time over? (B) goto PLoop1 ; 2 no, loopPDelL1 goto PDelL2 ; 2 cycles delayPDelL2 clrwdt ; 1 cycle delay return ; 2+2 Done
RET_1MS movlw .248 ; 1 set number of repetitions movwf PDel0 ; 1 |PLoop01 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) is the time over? goto PLoop01 ; 2 no, loopPDelL11 goto PDelL21 ; 2 cycles delayPDelL21 clrwdt ; 1 cycle delay return ; 2+2 Done
CONFIGURACION NOP BANKSEL ADCON1 CLRF ANSEL CLRF TRISA CLRF TRISB BANKSEL ADCON0 CLRF PORTA CLRF PORTB CALL RET_1MS BCF PORTA,0 ;RS = 0 BCF PORTA,1 ;E = 0 MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5 MOVWF PORTB BCF PORTA,0 ;RS=0 BSF PORTA,1 ;E=1 HABILITO ESCRITURA CALL RET_1MS BCF PORTA,1 ;E = 0 CALL RET_1MS MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER MOVWF PORTB BCF PORTA,0 ;RS=0 BSF PORTA,1 ;E=1 HABILITO ESCRITURA CALL RET_1MS BCF PORTA,1 ;E = 0 CALL RET_1MS
MOVLW A'E' ; Cargo el ASCII de la E MOVWF PORTB ;Envio la E al puerto BSF PORTA,0 BSF PORTA,1 CALL RET_10MS BCF PORTA,1 CALL RET_10MS
INICIO NOP GOTO INICIO
END Copyright 2010 EDWIN ESPINOSA Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior. Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
PROGRAMANDOElectronica, Microcontroladores, Computadores
Con la tecnología de Traductor de Googlejueves, 5 de julio de 2012
El timer TMR0 en los PIC con ejemplo
El timer TMR0 en los PICEs un modulo que sirve como contador o como temporizador de 8 bit's.Funcionando como temporizador el TMR0 es un registro donde yo puedo almacenar un valor y este se va incrementando de 1 en 1 con los ciclos de instruccion, es decir, con cada ciclo se incrementa en 1 el TMR0, cuando la cuenta llega a 255 y pasa a 0 (cero) se porduce una interrupcion por desborde del TMR0, recordemos que en un registro de 8 Bit's el valor mas alto que se puede almacenar es 255 y que si lo incrementamos estando en 255 pasa a cero, y es a esto a lo que se le denomina desborde.
Cual seria la ventaja entonces de usar el timer TMR0?
Cuando necesitemos temporizar, o lo que normalmente llamamos un retardo, no necesitaremos las acostumbradas rutinas para retardos, esto lo vamos a ver con un ejemplo.
El TMR0 tiene las siguientes caracteristicas:
-se puede leer y escribir-puede trabajar con relog externo o interno-detecta el flanco de subida o bajada del relog externo-tiene un prescaler de 8 bit´s-tiene una interrupcion por desborde de la cuenta de 255 a 0
los registros asociados a el son el TMR0, INTCON y el OPTION_REG
El bit T0CS (OPTION 2) a 1 trabaja como temporizador, 0 trabaja como contador
El bit T0SE (OPTION 4) en modo contador a 1 flanco descendente, 0 flanco ascendente
El bit PSA (OPTION 3) 0 prescaler al temporizador, 1 prescaler al perro guardian WDT
Cuando se desborda el TMR0, se activa el bit 2 de INTCON (T0IF) y si el T0IE esta activado el T0IF generara interrupcion y se debe borrar por software cuando se atienda la interrupcion
Para calcular el tiempo de temporizacion
Tiempo = 4 * Tosc * (256 - valor cargado en TMR0)*(Rango presaler)
donde
Tocs = 1 / Fosc (frecuencia del oscilador)
Entonces si necesitamos un determinado tiempo podemos despejar TMR0 y hallar su valor:
TiempoTMR0 = ---------------------------- - 256 4 * Tosc * Prescaler
Formula que nos dara un valor muy aproximado del Tiempo
Empecemos la configuración
Configuramos el OPTION_REG
BANKSEL OPTION_REG MOVLW B'00000000'
ANALICEMOS
BIT 7 Pull up PORTB Disable BTI 6 interrupcion por flaco de subida en el INT Pin BIT 5 fuente del clock para el TMR0, internal 1 ciclo ed intruccion (1/Fosc) BIT 4 Flanco de bajada para el incremento del TMR0 BIT 3 Prescaler asignado al TMR0 BIT 2-0 Division del prescaler
Configuramos el INTCON
Registro donde activamos las interrupciones globales y la del TMR0
MOVLW B'10100000' MOVWF OPTION_REG
BIT 7 Activamos las interrupciones Globales BIT 6 interrupciones de otros perifericos desactivadas BIT 5 Habilitamos la interrupcion por desborde en el TMR0 BIT 4 desabilitamos interrupcion externa INT BIT 3 desabilitamos interrupcion por cambio en el PORTB BIT 2 bandera interrupcion en TMR0 BIT 1 bandera interrupcion en INT BIT 0 bandera interrupcion por cambio en PORTB
EjemploVamos a crear una señal de 1 KHz usando el TMR0.
Código fuente
LIST P=16F886
INCLUDE P16F886.INC ERRORLEVEL -302 __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF CBLOCK 0X20
ENDC
ORG 0X00 GOTO CONFIGURA ORG 0X04 GOTO INTERRUPCION ORG 0X05
INTERRUPCION COMF PORTB,F MOVLW .7 MOVWF TMR0
BCF INTCON,T0IF RETFIE CONFIGURA CLRF PORTB BANKSEL ANSEL CLRF ANSEL CLRF ANSELH BANKSEL TRISB CLRF TRISB BANKSEL OPTION_REG MOVLW B'00000000' MOVWF OPTION_REG MOVLW B'10100000' MOVWF INTCON BANKSEL PORTB CLRF TMR0 CLRF PORTB
INICIO GOTO INICIO
END
Copyright 2012 edwtron Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior. Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
------ PAGINA PRINCIPAL -----
Los fuses del pic 16F628 y diferencias con el 16F628A
FUSES DEL PIC 16F628:
_BODEN_ON Activado el reset por bajada de tension
_BODEN_OFF
_CP_ALL proteccion para inpedir la lectura de toda la memoria del programa
_CP_75 proteccion del 75% de la memoria
_CP_50 proteccion del 50%
_CP_OFF permite la lectura de la memoria del programa
_DATA_CP_ON La memoria de datos de la eeprom no se puede leer
_DATA_CP_OFF
_PWRTE_ON Pequeño retardo al inicio de conectar la alimentacion, para permitir que la tension se estabilice.
_PWRTE_OFF
_WDT_ON activado el perro guardian que vigila el correcto funcionamiento del programa
_WDT_OFF
_LVP_ON habilitada la funcion de grabacion serie en baja tension RB4/PGM actua como tal
_LVP_OFF RB4 actua como pin de entrada/salida
_MCLRE_ON El pin de reset RA5/MCLR actua como tal
_MCLRE_OFF el pin actua como entrada o salida
_ER_OSC_CLKOUT oscilador con resistencia y condensador externos, con salida de reloj por RA6
_ER_OSC_NOCLKOUT oscilador exterior R/C sin salida de reloj. RA6 actua como Entrada/Salida
_INTRC_OSC_CLKOUT oscilador R/C interno, con salida de reloj por RA6, mientras que RA7 es I/O
_INTRC_OSC_NOCLKOUT oscilador R/C inetrno, sin salida de reloj. RA6 y RA7 actuan como I/O
_EXTCLK_OSC Reloj externo, siendo RA7 la entrada, y RA6 actua como I/0
_LP_OSC Cristal o resonador de baja velocidad, para bajar el consumo
_XT_OSC Cristal tipico de 4Mhz
_HS_OSC cristal de alta velocidad
FUSES DEL PIC 16F628A :
_BODEN_ON = 16f628
_BODEN_OFF = 16f628
_BOREN_ON Es exactamente igual que el BODEN pero con otro termino (pepe = Jose)
_BOREN_OFF se repite el termino BODEN con objeto de mantener la compatibilidad con el 16f628
_CP_ON Proteccion programa activado. El 16f628 tiene otro nombre. No es compatible
_CP_OFF = 16f628
_DATA_CP_ON = 16f628
_DATA_CP_OFF = 16F628
_PWRTE_OFF = 16F628
_PWRTE_ON = 16f628
_WDT_ON = 16F628
_WDT_OFF = 16f628
_LVP_ON = 16F628
_LVP_OFF = 16F628
_MCLRE_ON = 16f628
_MCLRE_OFF = 16F628
_RC_OSC_CLKOUT = _ER_OSC_CLKOUT del 16f628 ; el termino ER es compatible con las 2 versiones
_RC_OSC_NOCLKOUT = _ER_OSC_NOCLKOUT del 16f628
_ER_OSC_CLKOUT = 16f628
_ER_OSC_NOCLKOUT = 16f628
_INTOSC_OSC_CLKOUT = _INTRC_OSC_CLKOUT del 16f628
_INTOSC_OSC_NOCLKOUT = _INTRC_OSC_NOCLKOUT del 16f628
_INTRC_OSC_CLKOUT = 16f628
_INTRC_OSC_NOCLKOUT = 16f628
_EXTCLK_OSC = 16f628
_HS_OSC =16F628
_XT_OSC =16f628
_LP_OSC =16F628
A la vista de la comparacion, cualquier programa se puede grabar indistintamente en el pic 16F628 o en el 16F628A,
siempre y cuando NO tengamos activado el CODIGO DE PROTECCION DEL PROGRAMA.
Tambien podeis modificar este fuse para migrar de un microcontrolador al otro.
Programando PICsEste sitio ha sido creado para compartir códigos sencillos y útiles para la programación de microcontroladores de la familia Microchip.
DOMINGO, 8 DE JULIO DE 2012
Fusibles o "bits" de Configuración en PICLes dejo esta interesante y útil información para quienes comienzan a programar los PIC en assembler y en C...
Quiero dar las GRACIAS a http://xorwf.blogspot.com por el aporte...
¿Fusibles? Los bit's de configuración o también llamados "fusibles" permiten configurar ciertas funciones en los microcontroladores PIC. La cantidad de funciones dependen del microcontrolador, por ejemplo, en el 16F84A existen 4 funciones, en el 16F88 son alrededor de 13 funciones.
¿Para qué sirven?Nos permiten configurar algunas funciones del micro, como el tipo de oscilador, la proteccion de codigo, habilitar el perro guardian (evita que se quede pegado el micro), habilitar el reset maestro, habilitar un reset inicial, habilitar reset por bajo voltage en la fuente, habilita el modo "depurador" o debugger, entre otros.
¿Cuándo se usan?Si estamos usando alguno de los programadores de Microchip como el pickit2 o el pickit3, debemos escribir la configuracion de estos fusibles en la cabecera de nuestro código fuente, antes de compilar.
¿Como se que fusibles usa el micro?Todo esto aparece en la hoja de datos del micro (datasheet) , y se pueden obtener del fichero que incluimos en la cabecera del fuente, el P16F88.INC por ejemplo, que se encuentra en la carpeta "MPASM suite" que esta dentro de la carpeta "microchip" donde instalamos el MPLAB, ojo que el nombre del fichero depende del micro.
De los ficheros antes mencionados se obtiene lo siguiente:
Para el 16F84A
_CP_ON EQU H'000F'_CP_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_PWRTE_OFF EQU H'3FFF'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_LP_OSC EQU H'3FFC'_XT_OSC EQU H'3FFD'_HS_OSC EQU H'3FFE'_RC_OSC EQU H'3FFF'
La "Palabra de Configuración", es la que AGRUPA todos estos de la siguiente forma, usando la directiva: "__CONFIG" (ojo que tiene 2 guión bajo antes de config)
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
Si se quiere activar una de las opciones anteriores, solo hay que cambiar el OFF por el ON.
Para el 16F88
_CONFIG1 EQU H'2007'_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options_CP_ALL EQU H'1FFF'_CP_OFF EQU H'3FFF'_CCP1_RB0 EQU H'3FFF'_CCP1_RB3 EQU H'2FFF'_DEBUG_OFF EQU H'3FFF'_DEBUG_ON EQU H'37FF'_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected_CPD_ON EQU H'3EFF'_CPD_OFF EQU H'3FFF'_LVP_ON EQU H'3FFF'_LVP_OFF EQU H'3F7F'_BODEN_ON EQU H'3FFF'_BODEN_OFF EQU H'3FBF'_MCLR_ON EQU H'3FFF'_MCLR_OFF EQU H'3FDF'_PWRTE_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_EXTRC_CLKOUT EQU H'3FFF'_EXTRC_IO EQU H'3FFE'_INTRC_CLKOUT EQU H'3FFD'_INTRC_IO EQU H'3FFC'_EXTCLK EQU H'3FEF'_HS_OSC EQU H'3FEE'_XT_OSC EQU H'3FED'_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options_IESO_ON EQU H'3FFF'_IESO_OFF EQU H'3FFD'_FCMEN_ON EQU H'3FFF'_FCMEN_OFF EQU H'3FFE'
y la "Palabra de Configración" sería algo como esto:
;Program Configuration Register 1__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;Program Configuration Register 2__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFFPublicado por Paticio Cortés Aburto en 01:56
Palabras de configuración de los PICCuando vamos a usar un PIC que no conocemos, muchas dudas es que no sabemos con certeza las palabras de configuración de los PIC. La realidad es que si usamos el MPLAB v8 o el MPLAB X te vienen ya incluido, sólo hay que buscarlos.
Los PICs que más me preguntan los visitantes son esta pequeña lista.
PIC12F508A__CONFIG _CP_OFF & _WDT_ON & _MCLRE_ON & _ExtRC_OSC
PIC12F629__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
PIC16F84A__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC PIC16F628A__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
PIC16F88__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
PIC16F886__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
PIC16F887__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
PIC16F1827__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_ON & _IESO_OFF & _FCMEN_OFF __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
PIC18F2550CONFIG FOSC = XT_XT (En realidad es una gran lista. En el MPLAB v8, puedes verlos en la barra de herramientas arriba, Configure-->Configuration Bits).
PIC18F4550CONFIG FOSC = XT_XT (Lo mismo arriba).
Hay visitantes que no tienen instalado el MPLAB en este momento, así, este documento les puede ayudar y ahorrar tiempo.
La ubicación se encuentra en este directorio:C:\Archivos de programa\Microchip\MPASM Suite\Template\Code
Si quieres encontrar donde están los templates, por ejemplo, del PIC16F88, encuentras el archivo llamado 16F88TEMP.ASM y lo abres.
Puede dar el caso que quieras cambiar la configuración del oscilador interno al exteno y que sea del cuarzo. Un ejemplo abajo.
LIST P=16F88 ; Procesador.#INCLUDE ; Definición de los operandos utilizados.
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
; _CP_OFF: Protección de código DESACTIVADO.; _DEBUG_OFF: Debug en circuito DESACTIVADO.; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.; _CPD_OFF: Protección de código de datos DESACTIVADO.; _LVP_OFF: Programación en baja tensión DESACTIVADO.; _BODEN_OFF: Reset por Brown-out DESACTIVADO.; _MCLRE_ON: Reset por pin externo ACTIVADO.; _PWRTE_ON: Retraso al reset ACTIVADO.; _WDT_OFF: Watchdog DESACTIVADO.; _XT_OSC: Oscilador externo del tipo XT.
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.; _FCMEN_OFF: Monitor de CLK DESACTIVADO.
Hay que encontrar las directivas del PIC16F88 que está en la ubicación:C:\Archivos de programa\Microchip\MPASM Suite
El archivo se llama P16F88.INC y lo abrimos para localizar la palabra de configuración del oscilador externo de cuarzo.
Si abriste el archivo P16F88.INC con el notepad de Windows, pulsa "Control B" y busca "CONFIG1 Options", de todas las configuraciones que hay, se usa el _XT_OSC, por ejemplo el oscilador XT a 4MHz o el 20MHz.
Puedes simplificar el __CONFIG sólo introduciendo hexadecimales en vez de los textos aunque resulte más engorroso de interpretar. Cuando lo tengas configurados la configuración de Bits en el MPLAB, lo miras y apuntas.
Ejemplo 1:
LIST P=16F88 INCLUDE __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
Ejemplo 2:
LIST P=16F88 INCLUDE __CONFIG _CONFIG1, 0x3F21 __CONFIG _CONFIG2, 0x3FFC
Los dos ejemplos son exactamente lo mismo, sólo que te ahorra tiempo y espacio en escribirlo, aún así, es más aconsejable, legible y recomendable el primer ejemplo. Puedes buscar más información en las ayudas del MPLAB escribiendo __config.
Autor: Ángel Acaymo M.G.
ola:
Esta es la configuración para los fuses del 16F628A:
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo @ DEVICE pic16f628A, WDT_OFF ' Watchdog Timer desconectado @ DEVICE pic16f628A, PWRT_ON ' Power-On Timer conectado @ DEVICE pic16f628A, BOD_ON ' Brown-Out Detect conectado @ DEVICE pic16f628A, MCLR_OFF ' Master Clear Externo desconectado @ DEVICE pic16f628A, LVP_OFF ' Low-Voltage Programming desconectado @ DEVICE pic16f628A, CPD_OFF ' Data Memory Code Protect desconectado
No hace falta el XT_OSC, ya que si no usas DEFINE OSC, la frecuencia que asume PBP es 4mhz y es XT, lo que si tienes que deginir es para
cuando uses frecuencias mas altas HS.
Puedes ir verificándolo en el WINPIC, siempre que intento configurar fuses lo he hecho así, incluso para el 18F2550 en Protón
Puedes revisar los archivos .INC en la carpeta de PBP para que veas la configuración por defecto de los fuses, en el caso del 628A es este:
Fuses en pbp para pic16f877a
Señores necesito
ayuda veran
tengo el copilador
pbp sobre el
MPLAB, cuento
tambien con el
programdor
PICKIT2.
El problema
radica en que el
software del
programador no
me deja
configurar los
fuses ya que no
trae la opción.
Me contaron que
si se pueden
configurar desde
el PBP pero no sé
como.
Gracias por los
comentarios.
Citar
13/03/2012 #2
D@rkbytes
Moderador
jehanandre dijo:
Señores necesito ayuda veran tengo el copilador pbp sobre el MPLAB, cuento tambien con el
programdor PICKIT2.
El problema radica en que el software del programador no me deja configurar los fuses ya que no
trae la opción.
Me contaron que si se pueden configurar desde el PBP pero no sé como.
Gracias por los comentarios.
jehanandre.
Si ya tienes el plugin instalado para PBP en el MPLAB.
Los fuses se configuran en el archivo *.INC correspondiente al PIC que vas a utilizar.
En este caso debes modificar el archivo 16F877A.INC que se encuentra en la carpeta de
instalación
del compilador PBP, por default en C:\PBP Y dentro del archivo veras este código:Código:
NOLIST
ifdef PM_USED
LIST
include 'M16F87xA.INC' ; PM header
device pic16F877A, xt_osc, wdt_on, lvp_off, protect_off
XALL
NOLIST
else
LIST
LIST p = 16F877A, r = dec, w = -302
INCLUDE "P16F877A.INC" ; MPASM Header
__config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
NOLIST
endif
LIST
La parte que puse en color azul es la parte que yo modifico (Esta en ensamblador)
Para que sepas que FUSES usar, busca también el archivo template correspondiente al
PIC.
Este otro archivo se encuentra en la carpeta C:\Archivos de programa\Microchip\MPASM
Suite\Template\Code
Dentro de ese archivo encontraras los fuses que usa el PIC que utilices.
Ahora que, si vas a programar en PBP te recomiendo que uses el editor MicroCode Studio
Y te evitas este tipo de problemas.
Espero haberte ayudado. Suerte y hasta luego.
Citar
13/03/2012 #3
judex podriais ponerme los fuses para la serie 18 de pics en pbp, por favor
gracias
Citar
13/03/2012 #4
jehanandre Muchas gracias amigo yo eh intentado desde la ventana del MPLAB donde dice
configuration Bits pero no sé si da resultado.
---------- Actualizado después de 5 minutos ----------
Pero con lo de tu respuesta tengo algunas dudas:
1)Abro el archivo en Block de NOtas y luego cambio
device pic16F877A, xt_osc, wdt_on, lvp_off, protect_off por esto: device pic16F877A,
HS_osc, wdt_on, lvp_off, protect_off y vuelbo a guardar el Archivo(block de Notas) para
luego ir e iniciar mi proyecto desde cero en el MPLAB?
Citar
13/03/2012 #5
D@rkbytes
Moderador
judex dijo:
podriais ponerme los fuses para la serie 18 de pics en pbp, por favor
gracias
Los fuses disponibles para la serie 18 se encuentran en la carpeta de instalación de PBP
como mencione.
Consulta su correspondiente archivo *.inc
jehanandre dijo:
Muchas gracias amigo yo eh intentado desde la ventana del MPLAB donde dice configuration Bits
pero no sé si da resultado.
Pero con lo de tu respuesta tengo algunas dudas:
1)Abro el archivo en Block de NOtas y luego cambio
device pic16F877A, xt_osc, wdt_on, lvp_off, protect_off por esto: device pic16F877A, HS_osc, wdt_on,
lvp_off, protect_off y vuelbo a guardar el Archivo(block de Notas) para luego ir e iniciar mi proyecto
desde cero en el MPLAB?
1.- Si da resultado si configuras los fuses desde el editor de fuses de MPLAB
Yo me imagine que los querias configurar de otra forma.
2.- Si debes editar el archivo *.inc con el block de notas y lo guardas.
Esos fuses que modifiques serán los fuses que se tomaran como default para ese PIC
3.- Debes cambiar solo los fuses que indique anteriormente, solo los que estan en azul.
Los de la primer sección no son tomados en cuenta por el compilador.
Citar
14/03/2012 #6
jehanandre ok gracias y yo se que molesto mucho pero te comento.
Hace como un mes realice un contador con el pic16f877a todo salio bien en el proteus y el
programador hizo su trabajo.
El problema estaba que no funcionaba hasta que tocara un capacitor de ceramica (15p)
que esta en paralelo con el Cyrstal de 4MHz, y si no lo tocaba no funcionaba :P no se si me
puedes ayudar con ese tema.
Citar
14/03/2012 #7
ricbevi jehanandre dijo:
ok gracias y yo se que molesto mucho pero te comento.
Hace como un mes realice un contador con el pic16f877a todo salio bien en el proteus y el
programador hizo su trabajo.
El problema estaba que no funcionaba hasta que tocara un capacitor de ceramica (15p) que esta en
paralelo con el Cyrstal de 4MHz, y si no lo tocaba no funcionaba :P no se si me puedes ayudar con
ese tema.
Hola a todos...con el cristal no va ningún capacitor en paralelo si no de cada pata a gnd y
generalmente para 4Mhz se utiliza de 22PF a 27PF pero eso es según el requerimiento del
corte del cristal y el oscilador del pic.Si lo tocas con la mano le introduces ruido al sistema
que si esta al limite inferior del arranque puede ser que encienda el oscilador y se
mantenga así hasta el próximo encendido.
Saludos.
Ric.
Citar
14/03/2012 #8
jehanandre mmmmmmmmm no te entendi mucho me confundi es una conección en serie entre cada
pata del Crystal con un condensador a tierra(si me equivoco perdon).
Se podria decir que al momento de tocar el condensador hago que el pic trabaje porque
aumento su voltaje debido al ruido que le introduzco?
Citar
15/03/2012 #9
D@rkbytes
Moderador
jehanandre dijo:
mmmmmmmmm no te entendi mucho me confundi es una conección en serie entre cada pata del
Crystal con un condensador a tierra(si me equivoco perdon).
Se podria decir que al momento de tocar el condensador hago que el pic trabaje porque aumento su
voltaje debido al ruido que le introduzco?
Saludos.
No, no creo que sea por eso.
Seguramente debe ser porque tienes mal configurado el oscilador (Diseño o Fuses)
Yo he colocado un Xtal de hasta 10MHz sin capacitores en el protoboard y funciona sin
tocar nada.
Esta es la configuración clasica para el Xtal.
Si requieres de presición en la frecuencia, puedes sustituir C1 por un C Variable de 50pF
También puedes verificar la configuración de los fuses con el programa ICProg o el
WinPic800
Y en dado caso hasta grabarlos al *.HEX con esos programas, antes de grabar el PIC con tu
programador.
Suerte y hasta luego.
Imágenes Adjuntas
PIC_Xtal.gif (34,9 KB (Kilobytes), 85 visitas)
Citar
17/03/2012 #10
jehanandre Gracias por todo señores actualmente todo funciona bien.
El problema era que tenia un Crystal de 4Mhz y lo ponia como HS cuando era XT XD
gracias.
Citar
Directivas del ensamblador
Las directivas no son instrucciones del microcontrolador, son indicaciones que se le dan al ensamblador para
controlar algunos aspectos del ensamblado del código. Todas las directivas se detallan en el manual respectivo de los
tantos que se instalan junto con el paquete MPLAB.
Como con los mnemónicos de instrucciones, al ensamblador le da igual si las directivas están en mayúsculas o en
minúsculas.
Aquí presentaremos las que suelen ser las más habituales. Ya vimos en acción a muchas de ellas y las restantes las
empezaremos a usar en adelante.
Directiva list
Directiva processor
Directiva include
Directivas __config y __fuses
Directiva equ
Directivas cblock y endc
Directiva org
Directiva end
Directiva banksel
Directiva #define
Directiva $
Directiva dt
Directiva errorlevel
Directiva messg
Directivas if, ifdef, ifndef, else y endif
La directiva list
Es una directiva para listar una serie de opciones de ensamblado de diversa índole. Los parámetros listados se
separan por comas. Por ejemplo, siguiente directiva list p = PIC16F84A, r = dec, b = 8, f = INHX8M
tiene cuatro parametros, cuyo significado es:
p: establece el Procesador destino (PICmicro). Esto será equivalente a la directiva processor.
r: establece el sistema de numeración a usar por defecto. Como se vio al inicio, el formato de los números se
suele especificar por un prefijo: 0x para hexadecimal, . para decimal, etc. En caso de no especificar nada, el
número será considerado en el formato señalado por r. En el ejemplo, es obvio que se indica decimal. El valor
por defecto es hex (hexadecimal). Esto es equivalente a la directiva radix.
b: establece la cantidad de espacios en blanco que serán insertados en lugar de cada tabulación del archivo
*.lst. Éste es un archivo secundario de los tantos que genera el ensamblador. De cualquier forma, más adelante
veremos para que puede servir.
f: establece el Formato del archivo hexadecimal de salida. las opciones disponibles son INHX8M, INHX8S e
INHX32. La primera es el valor por defecto.
Además de los citados en este ejemplo hay muchos más parámetros que se pueden incluir con la directiva list. Lo
curioso es que ninguno puede ser necesario, es decir, todos se pueden indicar de otra forma, ya sea desde el entorno
del ensamblador MPASM, del mismo MPLAB o mediante otra directiva. Mas aun, ni siquiera suele ser necesario mover
las configuraciones por defecto.
Es una costumbre poner list con al menos el parametro p = indicando el procesador. Para este propósito sería más
práctivo e intuitivo usar la directiva processor, descrita continuación, que tiene el mismo objetivo.
La directiva processor
Es una directiva para establecer el PICmicro para el que se ensamblará el código fuente. Es equivalente a poner la
directiva list con el parámetro p. Con esta directiva el ensamblador sabrá qué tipo de instrucciones utilizar, aunque en
ese sentido hay muy pocas variaciones entre uno y otro “procesador”.
No obstante, resalto que poner estas directivas solo suele ser necesario cuando se llame al ensamblador desde una
línea de comandos, por ejemplo, cuando se ensambla el programa desde Proteus VSM. No hacen falta, por ejemplo,
cuando se cuando se contruye el proyecto desde MPLAB IDE. processor PIC16F84A
La directiva include
Es la directiva para incluir como parte del programa el archivo que se indica. La inclusión se realiza como si se
aplicara un “copiar - pegar” del contenido entero del archivo incluido en el lugar donde aparece la directiva.
Esta directiva debe aparecer en todos los programas de ensamblador al menos para incluir el archivo de dispositivo
del PIC usado, como muestra el siguiente ejemplo. Estos archivos se hallan en la carpeta de instalación del
ensamblador MPASM, que a su vez se instala con MPLAB IDE, norlmalmente C:\Microchip\MPASM Suite. Solo ponemos
la directiva y el ensamblador sabrá dónde buscarlo. include <P16F84A.inc> ; incluir archivo P16F84A.inc
Include también se usa para incorporar archivos de otros tipos, como librerías de códigos. Es una convención usar los
signos < > para referirse a los archivos estándar y los signos “ ” para referirse a los archivos de usuario. Incluso
pueden ignorarse dichos signos asi como poner por delante el signo #. Queda claro que no se imponen las
restricciones que tiene esta directiva en el lenguaje C. include "lcd.asm" ; incluir archivo lcd.asm
#include P16F877A.inc ; incluir archivo P16F877A.inc
Las directivas __config y __fuses
__config es más popular que __fuses a pesar de tener el mismo propósito (por lo menos en los PIC16) y de que el
nombre de la segunda parecería más ilustrativo.
Son directivas para establecer los Fuses de Configuración. Los fuses también se pueden establecer en el entorno del
programa grabador (WinPic800, por ejemplo), pero es recomedable hacerlo mediante esta directiva para que formen
parte del archivo *.hex resultante.
Recuerda que el PIC16F84A tiene 4 fuses y los PIC16F87xA tienen 9. Todos los hemos estudiado antes. Los fuses se
ponen con un número o a través de máscaras que las representan. Estas máscaras se encuentran en el archivo de
dipositivo del PICmicro.
Por ejemplo, en la gran mayoría de las prácticas con el PIC16F84A de este curso vamos a usar la siguiente
configuración: __config _XT_OSC & _WDT_OFF & _PWRTE_ON
que es equivalente a: __fuses _XT_OSC & _WDT_OFF & _PWRTE_ON
Para los PIC16F87xA especificaremos los siguientes fuses: __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF
Los fuses no indicados, como la Protección de Código, quedarán con su valor por defecto. Para mayor información
puedes volver al capítulo 3.
La directiva equ
Cuando se quiere acceder a los registros (SFR o GPR) de la RAM se les debe referenciar por sus direcciones. Como eso
sería una labor muy tediosa, el ensamblador permite identificarlos con un alías o nombre escogido por el usuario
mediante la directiva equ.
Aunque equ permite igualar (equal = igual) un identificador con cualquier constante númerica, su principal aplicación
es “darles nombres” a los registros de la RAM. De hecho, todos los registros SFR del PIC ya están identificados así en
su correspondiente archivo de dispositivo (revísalos, si quieres). A nosotros equ nos servirá para trabajar con los
registros GPR.
Con el siguiente ejemplo se “bautizan” con cont1 y cont2 a los registros ubicados en las direcciones 0x0C y 0x0D,
respectivamente.cont1 equ 0x0C ; Ubicar cont1 en dirección 0x0C cont2 equ 0x0D ; Ubicar cont2 en dirección 0x0D
Las directivas cblock y endc
Incluso si usamos la directiva equ para referirnos con más comodidad a los registros GPR, si nuestro programa va a
procesar varios datos y variables, seremos propensos a comenter errores con las designaciones.
Las directivas cblock y endc siempre deben ir juntas para formar un bloque de variables que ocupan posiciones
consecutivas en la RAM del PICmicro, siendo la dirección de la primera variable la indicada después de cblock. Para
tener un mejor contexto de su uso analicemos el siguiente boceto de código: processor PIC16F84A include <P16F84A.inc>
cblock 0x0C ; En el PIC16F84A los registros GPR están
cont ; disponibles a partir de la dirección 0x0C var temp endc
org 0x000Start ; ... call subroutine ; ... goto Start
;************************************************************************** cblock ; Aquí no necesitas establecer una bus ; dirección base del0 endcsubroutine ; ... ; ... return end
En el boceto el primer bloque cblock - endc es equivalente a haber puesto las líneas de código:cont equ 0x0C ; Ubicar count en dirección 0x0Cvar equ 0x0D ; Ubicar var en dirección 0x0Dtemp equ 0x0E ; Ubicar temp en dirección 0x0E
Más abajo aparece otro bloque cblock - endc con dos variables, bus y del0, que también se pudieron incluir en el
primer bloque, pero que se separan, como muchas veces se preferirá, por guardar alguna relación entre ellas y para
tratar de ordenar el código. No obstante, a diferencia de los lenguajes como el C, estos registros serán accesibles
desde cualquier parte del programa.
Ahora bien, si como dice el comentario, el segundo bloque no necesita una dirección base, ¿qué direcciones les
corresponden a esas variables? Como el ensamblador sabe dónde se quedó, a las variables del siguiente bloque les
asignará las locaciones subsiguientes. Es decir, el segundo cblock - endc sería equivalente a:bus equ 0x0F ; Ubicar bus en dirección 0x0Fdel0 equ 0x10 ; Ubicar del0 en dirección 0x10
De hecho, en un programa puedes poner varios bloques más de este tipo, pero sin olvidar que, a menos que sepas lo
que haces, solamente el primero debe tener la dirección de la primera variable, inclusive si está vacío.
La directiva org
Su nombre deriva de origen. Es para indicarle al ensamblador a partir de que dirección empezará a mapear el
subsiguiente código ejecutable. Como el CPU empieza a ejecutar el código desde la dirección 0x000, al menos la
primera instrucción de código debería estar allí.
Sin embargo, poner org 0x00 en programas con código continuo se ha convertido en un hábito a veces hasta
innecesario porque el ensamblador, que no es tan tonto, sabe que por defecto debe colocar el código a partir de la
dirección 0x000. org 0x000
Usar org sí es útil cuando se quiere reubicar algunas rutinas de código en determinados segmentos de la memoria de
programa.
La directiva end
Es la directiva que pone fin a la lectura del código fuente por parte del ensamblador. Cualquier código ubicado
después de esta directiva ya no será tomado en cuenta, lo que implica que solo debería haber una directiva end por
programa, incluso si consta de varios archivos. Son sofisticados los programas donde se puede usar varias veces.
La directiva banksel
El nombre de esta directiva es un acrónimo de BANK SELection y, como se prevé, sirve para cambiar de bancos.
Como sabemos, la RAM de los PICmicros de familias Baseline y Midrange se divide en varios bancos por los que
tenemos que ir saltando para acceder a sus registros, “jugando” con los bits RP0 y RP1, del registro STATUS, así:
Tabla RP1 RP0
RP1 RP0Banco accedido
0 0 Banco 0
0 1 Banco 1
1 0 Banco 2
1 1 Banco 3
En los PIC con dos bancos, como el PIC16F84A, solo se trabaja con el bit RP0.
Dado el tedio que puede acarrear este trabajo, sobre todo si no recordamos a qué banco pertenece un registro, la
directiva banksel puede ser de gran ayuda. Banksel se encargará de colocar las instrucciones necesarias para acceder
al registro que se le indica como parámetro. banksel TRISA ; Seleccionar banco del registro TRISA (Banco 1)
La directiva #define
Es otra directiva que se utiliza muy a menudo. Los que programaron alguna vez en C/C++ saben cómo funciona. Para
los otros, deben saber que tiene tres partes: el mismo define, un identificador y toda la cadena restante.#define identificador cadena ;
Lo que hará el ensamblador es sustituir el identificador por toda la cadena restante tal cual es en cada punto del
programa donde se encuentre identificador. Por eso se le conoce como directiva de sustitución de texto.
identificador es una palabra con las mismas reglas impuestas a otros identificadores, como las etiquetas o nombres
de registros GPR. En cambio, cadena puede estar formado por cualesquiera otros elementos de código ensamblador.
Un típico ejemplo de define es para establecer los puertos de interface, más o menos así:#define switch PORTB, 0
Y cuando más adelante escribamos, por ejemplo, btfsc Switch ; Ver si switch vale 0
lo que en realidad entenderá el ensamblador será btfsc PORTB, 0 ; Ver si switch vale 0
La directiva $
Recordemos que las etiquetas en el fondo representan las direcciones de las instrucciones a las que preceden y
sirven de referencia para las instrucciones de salto. Así mismo, la directiva $ marca la dirección de la instrucción
actual y, por ejemplo, $ - 2 será la dirección de la instrucción que está dos posiciones atrás.
Normalmente es preferible colocar etiquetas y dejar el uso de $ solo para los casos donde la propensión a cometer
errores sea mínima, por ejemplo, para las instrucciones de saltos cortos.
A continuación se muestran dos rutinas de delay de 50 ms aprox. Ambas son equivalentes, solo que la segunda
emplea la directiva $ en vez de las etiquetas. Se asume que la variable cont ha sido definida previamente.delay_50ms movlw .33 movwf contlaba addlw .1 btfss STATUS, Z goto labb ; Saltar a labb decfsz cont, Flabb goto laba ; Saltar a laba return
delay_50ms
movlw .33 movwf cont addlw .1 btfss STATUS, Z goto $ + 2 ; Saltar 2 instrucciones adelante decfsz cont, F goto $ - 4 ; Saltar 4 instrucciones atrás return
La directiva dt
Dt construye una tabla de datos a base de instrucciones retlw. Las tablas son matrices de constantes a cuyos
elementos se puede acceder secuencialmente mediante una variable índice.
Dt puede recibir uno o más parámetros separados por comas. Los parámetros de cadenas de texto serán
descompuestos en sus letras. Por ejemplo, la siguiente directivadt "test"
será entendida por el ensamblador como: retlw 't' retlw 'e' retlw 's' retlw 't'
La directiva errorlevel
Después de ensamblar o intentar ensamblar el código el ensamblador generará una serie de mensajes, errores y
advertencias. Con la directiva errorlevel podemos indicar cuáles de ellos pueden ser ignorados o reportados. Los
errores no se pueden inhibir.
Sus parámetros pueden ser:
0. Indica reportar mensajes, error y advertencias
1. Indica reportar advertencias y errores.
2. Indica reportar errores.
- msgnum. Indica no reportar los mensajes identificados por el número msgnum.
+ msgnum. Indica reportar los mensajes identificados por el número msgnum.
Los valores de msgnum forman una lista casi interminable que la puedes encontrar en el manual del ensamblador
MPASM.
Por ejemplo, un clásico mensaje que aparece constantemente incluso cuando el código está escrito correctamente es
el 302, que dice “Register in operand not in bank 0. Ensure that bank bits are correct”. Allí nos avisa que estamos
accediendo a un registro que no es del banco 0 y que debemos asegurarnos de estar haciendo lo correcto. Si nos
cansamos de verlo, podemos escribir la siguiente directiva. errorlevel -302
La directiva messg
Sirve para generar mensajes personalizados definidos por el usuario. El mensaje suele ser condicional, para lo que se
requiere de algunas otras directivas como if, ifdef, ifndef, else y endif.
Ejemplo, la siguiente directiva hará surgir el mensaje “Este código está realizado para el PIC16F876A”, si es que se
trata de ensamblar para otro PICmicro. (la constante __16F876A está definida en el archivo de dispositivo
P16F876A.inc.) ifndef __16F876A messg "Este codigo esta realizado para el PIC16F876A" endif
Las directivas if, ifdef, ifndef, else y endif
Son directivas para ensamblado condicional. Mediante ellas indicaremos si una o algunas rutinas de código o
directivas inclusive serán tomadas en cuenta o no por el ensamblador.
Su estructura se muestra a continuación. El uso del bloque de else es opcional. if (ifdef o ifndef) condition ; si condition se cumple (o si es una expresión previamente definida) ; Se considerará este código else ; De lo contrario ; Se considerará este código endif
A modo de ejemplo, supongamos que hacemos un programa para el PIC16F84A y que eventualmente querremos
cambiar el código para que se pueda ensamblar para el PIC16F877A. Sabemos que los principales cambios a tener en
cuenta son el archivo de dispositivo a incluir, la directiva de los fuses, el inicio de los registros GPR y la configuración
del registro ADCON1 de los PIC16F87xA para que el puerto A sea de E/S digital.
El siguiente boceto de programa considera estos cuatro puntos y se puede ensamblar para uno u utro
microcontrolador tan solo cambiando la directiva processor, aunque tampoco eso sería necesario si el programa se
construye desde otro IDE como MPLAB, por ejemplo. processor PIC16F84A ; Seleccionar PIC destino
ifdef __16F877A include <P16F877A.inc> __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF cblock 0x20 endc else ; Si no es PIC16F877A, asumir que es PIC16F84A include <P16F84A.inc> __config _XT_OSC & _WDT_OFF & _PWRTE_ON cblock 0x0C endc endif cblock ; Algunas variables del programa endc
org 0x000Start ifdef __16F877A ; Si está definido __16F877A banksel ADCON1 movlw 0x06 ; Hacer PORTA digital movwf ADCON1 ; endif ; Resto del cuerpo del programa end
Set de instrucciones de los PIC de familia Mid-Range
Hasta el momento hemos visto la operación de varias de las instrucciones del PIC. Como habrás notado, son bastante
fáciles de usar. Ahora, antes de continuar y para no tener que seguir explicándolas al vuelo, conoceremos el resto de
las 35 instrucciones de los PICs Mid-range.
Es un alivio saber que estos PICs tengan tan pocas instrucciones, haciendo todo el honor a su procesador de
arquitectura RISC (Reduced Instruction Set Computer). Es probable que en el futuro también estudiemos otros
módulos, dedicados a otros microcontroladores, aparte de los PICmicros. La mayoría de ellos, aunque también tienen
un diseño RISC, poseen cerca de 100 instrucciones. Así que ponle ganas y termina cuanto antes este capítulo.
Convención de términos
f Cualquier registro (SFR o GPR) de la RAM del PIC
w Work register o Registro de trabajo
b Posición de bit
k Campo literal, dato constante o etiqueta
d Selección de destino; d = 0: el resultado se almacena en W
d = 1: el resultado almacenar en el registro F
PC Program Counter o Contador de Programa
TOS Top Of Stack o Cima de la Pila
< > Posición de bit dentro de un registro
TO Bit de Time-Out
PD Bit de Power-down
Label Nombre de una etiqueta
Notación de números en ensamblador
Hexadecimal: 0x15, H45, h7A
Decimal: D'41', d'156 ', .25
Binario: B'11110010', b'01010000'
Octal: O'32', o'77'
Ascii: 'A', 'a', 'b'
Expresiones adoptadas
Para fines de documentación vamos a emplear algunos signos o expresiones que resumen el significado de alguna
operación, como:
→ Se utiliza para indicar la transferencia de un dato. Por ejemplo:
0x00 → (TRISB) Significa “cargar el dato 0x00 en el registro TRISB”.
( ) Se utiliza para referenciar el contenido de un registro. Por ejemplo:
(W) → (PORTB) Significa “el contenido del registro W se pasa al registro PORTB”.
= A pesar de la sencillez de estos símbolos, yo prefiero emplear el operador =, propia de los lenguajes de alto
nivel. Solo debes acostumbrarte a que la transferencia del dato se dirige de derecha a izquierda y entender que
el signo = no implica una ecuación matemática (donde los dos miembros de la expresión son iguales de
antemano), solo significa que el valor del segundo miembro es asignado al primero. Por ejemplo.
TRISB = 0x00; significa TRISB pasará a valer 0x00.
PORTB = PORTA; significa PORTB valdrá igual que PORTA.
cnt = PORTB + 0x06; significa cnt será la suma de PORTB y la constante 0x06.
PORTB = PORTB + 1; significa PORTB es incrementado en 1.
PORTA = ~ PORTA; significa PORTA invierte su valor.
Z = 0; significa el bit Z será igual a 0.
C = 1; significa el bit C será igual a 1.
Puedes notar que se prescinde de la expresión “el contenido del registro...”, ya que se asume que de eso se
trata.
. Aunque en la documentación de Microchip se adoptan los signos < > para indicar la posición de un bit dentro
de un registro, aquí también prefiero cambiar a otra notación, punto en este caso. Por ejemplo
PORTB.2 = 0; significa limpiar el bit 2 del registro PORTB.
TRISA.5 = 1; significa setear el bit 5 del registro TRISA.
INTCON.GIE = 0; significa limpiar el bit GIE del registro INTCON.
Configuracion de Bits Master Prog
Hola,
Soy estudiante De
electronica (nivel
Medio superior) y
tengo un problema con
el grabador master
prog,
para programar uso el
Lenguaje basic (con el
microcode Studio)
en la escuela, usamos
un programado marca
Volnia y todo va
perfecto al grabar las
practicas ya que este
programador tiene
opcion para agregar los
bits de configuracion,
el problema es que el
master prog no tiene la
opcion, y en los
manuales que me
dieron
dice que en lenguaje
ensamblador debes
agregarlos... o bien en
el MPLAb...
el problema es que ya
eh hecho todo lo que
me dice los manuales...
(Configurado Fuses,
abierto archivos ASM
con el mplab y
agregarle los bits de
config desde ahi) La
verdad me eh
desesperado ya ,...
mas por que esto
detiene un poco mi
avance en la escuela...
Les agradesco de
antemano su ayuda
Citar
16/11/2011 #2
D@rkbytes
Moderador
chess98 dijo:
Hola,
Soy estudiante De electronica (nivel Medio superior) y
tengo un problema con el grabador master prog,
para programar uso el Lenguaje basic (con el microcode Studio)
en la escuela, usamos un programado marca Volnia y todo va perfecto al grabar las
practicas ya que este programador tiene opcion para agregar los bits de configuracion, el
problema es que el master prog no tiene la opcion, y en los manuales que me dieron
dice que en lenguaje ensamblador debes agregarlos... o bien en el MPLAb...
el problema es que ya eh hecho todo lo que me dice los manuales...(Configurado Fuses,
abierto archivos ASM con el mplab y agregarle los bits de config desde ahi) La verdad me
eh desesperado ya ,... mas por que esto detiene un poco mi avance en la escuela...
Les agradesco de antemano su ayuda
Cada lenguaje de programación para PIC tiene su propia forma de escribir la
palabra de configuración.
Dependiendo del compilador que este use, es como sera interpretada tal palabra.
En tu caso mencionas que utilizas BASIC usando como editor MicroCode Studio
El compilador por default para MCS es el PBP (PICBASICPRO)
En la cabecera de tu programa es donde se escribe la palabra de configuración.
Y esta sera interpretada por el compilador, incluyendola dentro del archivo
ejecutable *.HEX
De esta manera es como se agregan los FUSES seleccionados para los grabadores
que
no tienen la opción de setearlos manualmente por medio del programa.
Vendria siendo como esto:Código:
'********************************************************************
***********
@ DEVICE PIC16F628A
@ DEVICE
INTRC_OSC_NOCLKOUT,PROTECT_OFF,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,LVP_OF
F,CPD_OFF
'********************************************************************
***********
Lo que sigue a continuación de esta palabra sera tu código
de configuración de puertos, variables, etc.
Este es solo un ejemplo, la palabra varia dependiendo de los FUSES requeridos.
Saludos.
Citar
16/11/2011 #3
chess98Gracias
Gracias por la Ayuda, Me fue de mucha utilidad
Si logre hacerlo Funcionar, Al fin!
Ya le habia configurado los Fuses asi Varias Veces...
quiza me faltaba modificar alguno...
Muchas Gracias por tu Ayuda x)
Citar
16/11/2011 #4
D@rkbytes
Moderador
chess98 dijo:
Gracias por la Ayuda, Me fue de mucha utilidad
Si logre hacerlo Funcionar, Al fin!
Ya le habia configurado los Fuses asi Varias Veces...
quiza me faltaba modificar alguno...
Muchas Gracias por tu Ayuda x)
Que bien, suerte y hasta pronto.
Citar
27/10/2012 #5
helterSkelterProblema con palabra de configuración PIC16F887 (PICBasic)
Hola,
Soy estudiante de medio superior y estoy haciendo un programa usando microcode para el
Pic16f887, el problema está que cuando genero el .hex y quiero quemar mi programa usando
el MASTERPROG
me dice
"AVISO: Faltan los Bits de configuración en el archivo Hex"
Lo que pasa, es que normalmente uso MPLAB para hacer mis Hex... y desconosco totalmente
como agregar la palabra de configuración usando Microcode, si me pudieran auxiliar! Les
estariamos eternamente agradecidos!!
Citar
27/10/2012 #6
D@rkbytes
Moderador
helterSkelter dijo:
Lo que pasa, es que normalmente uso MPLAB para hacer mis Hex... y desconozco totalmente como
agregar la palabra de configuración usando MicroCode, si me pudieran auxiliar! Les estaríamos
eternamente agradecidos!!
Si estas utilizando el programa MicroCode Studio, esta es una opción para la palabra de
configuración.
Se utiliza oscilador interno establecido a 8MHz.Código:
@ DEVICE
INTRC_OSC_NOCLKOUT,PROTECT_OFF,CPD_OFF,PWRT_ON,WDT_OFF,LVP_OFF,MCLR_ON,BOD_OFF,F
CMEN_ON,IESO_OFF
@ DEVICE2 WRT_OFF,BOR21V
DEFINE OSC 8 ; Definir que se trabajará con 8MHz
OSCCON = $76 ; %01110110 (118) Reloj interno estable a 8MHz
Tipos de oscilador:
LP_OSC ; Resonador cerámico
XT_OSC ; Cristal de baja frecuencia
HS_OSC ; Cristal de alta frecuencia
EXTCLK_OSC ; Fuente de reloj externa
INTRC_OSC_NOCLKOUT ; Oscilador interno sin salida de reloj
INTRC_OSC_CLKOUT ; Oscilador interno con salida de reloj
RC_OSC_NOCLKOUT ; Oscilador RC externo sin salida de reloj
RC_OSC_CLKOUT ; Oscilador RC externo con salida de reloj
Otro método usando MPLAB fue tratado por aquí: ¿Cómo generar DTMF con PIC?
Suerte.
Citar
03/01/2013 #7
carlosguit Amigos estoy super estresado con este tema le puse los fuses de arriba para un pic
16f877a y me da muchos herrores porfavor mas informes acerca de esto o tengo que
cambiar de programador esque uso masterprog y me aparece el mensaje de los bits que
me faltan y en los libros de basic no agregan fuses ni nada solo veo que te plantean hacer
un programador con picall pero es por puerto dv9 o algo asi pero creo yo y esta obsoleto
ayuda porfavor
Citar
03/01/2013 #8
D@rkbytes
Moderador
carlosguit dijo:
Amigos estoy super estresado con este tema le puse los fuses de arriba para un pic 16f877a y me
da muchos errores por-favor mas informes acerca de esto o tengo que cambiar de programador es-
que uso masterprog y me aparece el mensaje de los bits que me faltan y en los libros de basic no
agregan fuses ni nada solo veo que te plantean hacer un programador con picall pero es por puerto
db9 o algo así pero creo yo y esta obsoleto ayuda por-favor
Sucede que los fuses que mencione anteriormente son para un PIC16F887 no para un
PIC16F877A
Si utilizas MicroCode Studio puedes usar esta palabra de configuración...Código:
@ DEVICE PIC16F877A
@ DEVICE XT_OSC,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
Con estos fuses no debes tener problemas al compilar.
La información sobre los fuses para cada PIC la encuentras en su correspondiente hoja de
datos.
Suerte.
Citar
03/01/2013 #9
carlosguit D@rkbytes dijo:
Sucede que los fuses que mencione anteriormente son para un PIC16F887 no para un
PIC16F877A
Si utilizas MicroCode Studio puedes usar esta palabra de configuración...Código:
@ DEVICE PIC16F877A
@ DEVICE XT_OSC,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
Con estos fuses no debes tener problemas al compilar.
La información sobre los fuses para cada PIC la encuentras en su correspondiente hoja de
datos.
Suerte.
gracias amigo lo boy aprobar y denuevo muchas gracias por las molestias
Citar
11/03/2013 #10
heribertoromerocueva
s
Bits de configuración del archivo .hex
hola, el ccs me compila sin errores, me genera el archivo .hex el problema es que a
la hora de querer escribir en el pic mediante el master prog me sale una leyenda que
dice faltan bits de configuración en el archivo .hex pero en el código pongo todos los
fuses. este este el código de prueba que estoy intentando. agradecería mucho sus
observacionesCódigo:
#include <16f84a.h>
#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#use delay(clock=4000000)
#BYTE PORTB=6
#BYTE PORTA=5
VOID MAIN ()
{
SET_TRIS_A(0xFF);
SET_TRIS_B(0X00);
portb=(0x00);
while(TRUE)
{
if(porta==(0x01))
{
portb=(0x01);
}
if(porta==(0x02))
{
portb=(0x02);
}
}
}
Citar
27/04/2013 #11
lolopollo Hola soy estudiante de nivel
medio superior de
electronica
Tengo porblemas con la
palabra de configuracion
con pic18f4550, usando el
microcode estudio, y el
mpasm, lo que pasa que
cuando intento grabar me
dice que hace falta bits de
configuracion en el hex y no
se que hacer
porfavor ayuda
Citar
A lo que me referia es que como se hace para configurar los fuses desde microcode studio o
como puedo saber la configuracion de bits para hacerlo directo desde el pickit.
Y he probado un programa sencillo para hacer parpadear unos leds para ver si funciona el pic,
para leer el dato de un sensor qrd1114 , y por lo menos eso si puede hacer.
Citar
08/07/2012 #2262
LaElectronicaMeOdia Para hacerlo
desde el
software se
pone algo
parecido a
esto:
Código:
@ DEVICE
PIC16F84A
@ DEVICE
XT_OSC
@ DEVICE
WDT_OFF
@ DEVICE
PWRT_OFF
@ DEVICE
PROTECT_OFF
pero los
propios para
el
pic18f4550
que son
unos
cuantos
mas. yo no
tengo el
pickit y
desconozco
si esos fuses
se pueden
configurar
desde su
interfaz.
Citar
08/07/2012 #2263
D@rkbytes
Moderador
quevon24 dijo:
A lo que me referia es que como se hace para configurar los fuses desde microcode studio
Saludos quevon24
Para determinar exactamente que bits de configuración se requieren para cada proyecto,
debes empezar a leer desde la página 288 de la hoja de datos del 18F4550.
Ahora, como lo que quieres es saber como se hace esto desde MCS, aquí adjunto un
ejemplo.
Las instrucciones están comentadas dentro del código.
Suerte.
Archivos Adjuntos
18F4550 Fuses Sample.rar (28,4 KB (Kilobytes), 87 visitas)
Citar
17/07/2012 #2264
christus Estimados Amigos;
Como están por favor quisiera saber si se puede programar en Pic Basic en un PIC12F675:
Gracias de antemano por su ayuda.
Citar
17/07/2012 #2265
D@rkbytes
Moderador
christus dijo:
Estimados Amigos;
Como están por favor quisiera saber si se puede programar en Pic Basic en un PIC12F675:
Gracias de antemano por su ayuda.
Saludos.
Claro que se puede.
Desde un PIC10F202 y con la más reciente versión de PICBasic Pro que es la 3.0.6
Se puede programar hasta un PIC18LF66K80
Suerte.
Citar
18/07/2012 #2266
christus Gracias por la respuesta amigo d@rkbytes pero en el caso de este pic tengo entendido
que hay que hacer una configuracion especial en el programa para que use su clock
interno y en PBP mas o menos como seria y en el caso de los puertos normalmente
trabajamos siempre asi digamos "PORTA.0 = variable" pero en este pic sus pines no estan
nombrados asi.
Te agradezco nuevamente por tu ayuda.
Citar
18/07/2012 #2267
D@rkbytes
Moderador
christus dijo:
Gracias por la respuesta amigo d@rkbytes pero en el caso de este pic tengo entendido que hay que
hacer una configuracion especial en el programa para que use su clock interno y en PBP mas o
menos como seria y en el caso de los puertos normalmente trabajamos siempre asi digamos
"PORTA.0 = variable" pero en este pic sus pines no estan nombrados asi.
Te agradezco nuevamente por tu ayuda.
Saludos nuevamente christus.
Así es. En este tipo de PIC pequeños, cambian algunas cosas.
Por ejemplo, para la calibración del oscilador interno se usa esta definición en la cabecera
del programa.
DEFINE OSCCAL_1K 1
El nombre del puerto cambia de PORTX a GPIO
Por ejemplo para poner un 1 en el bit 0 del puerto, sería...
GPIO.0 = 1 o HIGH GPIO.0
Como mencionaste anteriormente que necesitabas programar un 12F675,
quizás también requieras saber como hacer para que sus pines GP,0,1,2,4 trabajen de
forma digital.
Ya qué en este PIC se pueden usar algunos pines como conversores ADC o en modo
comparador.
Esto se consigue configurando el registro ANSEL en 0 y el registro CMCON en 7 por
ejemplo...
ANSEL = 0
CMCON = 7
Y si requieres que un pin o más sean análogos ya tienes que ver la hoja de datos del PIC,
para seleccionar los pines y configurar correctamente los parámetros del ADC.
Nota: Al programar en PICBasic existe la posibilidad de ahorrarse algunas configuraciones.
Pero siempre es recomendable que conozcas bien como funcionan los registros de los PIC.
Espero que estos comentarios te sirvan de ayuda para programarlo en PICBasic.
Suerte.
Citar
20/07/2012 #2268
christus hola D@rkbytes gracias nuevamente por tu apoyo, queria comentarte he hecho un
programa de prueba y lo estoy simulando en proteus pero no hace nada, el programa es el
siguiente :
DEFINE OSCCAL_1K 1
ANSEL = %00000000
CMCON = 7
Inicio:
GPIO.0 = 1
pause 500
GPIO.0 = 0
pause 500
goto inicio
end
No se si estoy cometiendo algún error, gracias por la atencion prestada
Citar
20/07/2012 #2269
D@rkbytes
Moderador
christus dijo:
hola D@rkbytes gracias nuevamente por tu apoyo, queria comentarte he hecho un programa de
prueba y lo estoy simulando en proteus pero no hace nada, el programa es el siguiente :
DEFINE OSCCAL_1K 1
ANSEL = %00000000
CMCON = 7
Inicio:
GPIO.0 = 1
pause 500
GPIO.0 = 0
pause 500
goto inicio
end
No se si estoy cometiendo algún error, gracias por la atencion prestada
El programa esta bien.
Lo que le hace falta es establecer que pines serán usados como entradas y salidas.
También es recomendable definir la palabra de configuración.
Cuando no se establece ninguna, el compilador utiliza la configuración del archivo
12F675.INC
Y a veces no es la configuración que nuestro programa requiere.
Por eso es importante declararla o establecerla con el programa que graba el PIC.
Adjunto tu programa con las configuraciones correspondientes.
Para que tengas una idea de como se hace esto para un PIC12F675.
Sigue el curso para que puedas comprender muchas cosas más.
Suerte.
Imágenes Adjuntas
12F675_Default_Compiler_Fuses_.gif (2,9 KB (Kilobytes), 201 visitas)
Archivos Adjuntos
12F675 LED.rar (13,8 KB (Kilobytes), 47 visitas)
Citar
23/07/2012 #2270
christus Muchas gracias amigo d@rkbytes por la ayuda y funciona muy bien gracias de nuevo.
saludos y exitos.
Citar
26/07/2012 #2271
cesarim buenas tardes amigos del foro me gusta bastante esta pagina ya que estoy aprendiendo
mucho he encontrado un tutuorial sobre el manejo de temporizadores y contadores que el
amigo mecatrodatos dejo en la pagina 21 es muy bueno y explicativo quisiera poder pedir
alguien que me oriente yo soy nuevo en esto de los pic estoy programando en basic y uso
el proteus que aca en el foro recomiendan con la version 7.7 con toda franqueza gracias a
todo por el tiempo que le dedican en ayudar a quien piden auxilio mi duda es esta.
en el tutorial que nuestro amigo mecatrodatos explica es muy bueno deja entender de
como se genera una interrupcion sin afectar lo que el pic este haciendo como tarea
este es el programa que el amigo mecatrodo puso como ejemplo donde habilita el
prescaler a 64 con un cristal de 4 mhz lo que hace es contar y cada que llega a 61 habilita
el led3 por un segundo y lo deshabilita x otro segundo y asi rutinariamente es muy bueno
en el archivo rar que mando quise modificar un poco el programa pero no logro entender
como podria hacer para incrementar el tiempo de 1 segundo.
le aumente a 2 segundo el tiempo del led3 y funciona osea se prende por 2 segundos y se
apaga por otro 2 segundo y hasta 4 seg funciona modificando los valores que en el
programa escribo y detallo pero si quiero aumentarle a 5 segundo nunca prende el led3
pero los otros led1 y led2 si oscilan el tiempo que se indica quise probar poniendole
registros osea que la cuenta se almacene es una variable cuenta por decir y que cada 61
veces aumente y 1 en cuenta y asi hasta que llegue a un total de cuenta <10 then
cuenta=0 y recien prende el led3 pero no me sale y quisiera saber si ustedes me podrian
ayudar talvez diciendome como hacerlo o con otro tutorial buenazo como el del amigo
mecatrodo gracias aquellas personas que puedan ayudarme
Código:
clear
define osc 4
OPTION_REG=%10000101
;BIT 7=1 DESHABILITA PULL-UPS DE P.B
;BIT 5=0 SELECCIONA EL MODO DE TEMPORIZADOR
;BIT 2=1}
;BIT 1=0} TIMER0 CONJUNTO PREESCALADOR PARA 64
;BIT 0=1}
INTCON=%10100000
;BIT 7=1 PERMITE TODAS LAS INTERRUPCIONES
;BIT 5=1 PERMITE LA INTERRUPCION POR TIMER0
;BIT 2=0 SE ESTABLECE SOBRE LA INTERRUPCION TOIF O ITCON2
Alpha var word ;variable en el codigo de pausa
Beta var byte ;esta vaiable contabiliza 61 en interrupcion
TrisD=%11110100
portD=%00000000
Led0 var Portd.0
Led1 var portd.1
Led3 var Portd.3
beta=0
on interrupt goto SaltoRutina
MainLoop:
if led1=0 then
led1=1
led0=0
else
led1=0
led0=1
endif
for alpha=1 to 300
pauseus 100
next alpha
goto mainloop
disable ;deshabilita y habilita el soporte de la rutina a interrumpir
;256*64=16384//16384/1SEG=16.384 ===61
;256*64=16384//16384/2SEG=8.192 ====122 3SEG===183 4SEG===244
saltorutina:
beta=beta+1
if beta < 61 then endinterrupt
beta=0
if led3=1 then
led3=0
else
led3=1
endif
endinterrupt:
INTCON.2=0
RESUME
ENABLE
END
---------- Actualizado después de 18 minutos ----------
este es el codigo que trato de modificar pero no logro crear un registro que me permita
almacenar un conteo para mas tiempo se podria cambiar los tiempo de encendido del led
prendido como apagado o siempre el tiempo que prenda ese mismo tiempo apagara
Código:
clear
define osc 4
OPTION_REG=%10000101 ;----aca el prescaler es para 64----
;BIT 7=1 DESHABILITA PULL-UPS DE P.B
;BIT 5=0 SELECCIONA EL MODO DE TEMPORIZADOR
;BIT 2=1}
;BIT 1=0} TIMER0 CONJUNTO PREESCALADOR PARA 64-----
;BIT 0=1}
INTCON=%10100000
;BIT 7=1 PERMITE TODAS LAS INTERRUPCIONES
;BIT 5=1 PERMITE LA INTERRUPCION POR TIMER0
;BIT 2=0 SE ESTABLECE SOBRE LA INTERRUPCION TOIF O ITCON2
Alpha var word ;variable en el codigo de pausa
Beta var byte ;esta vaiable contabiliza 61 en interrupcion
Cuenta var word
TrisD=%11110100
portD=%00000000
Led0 var Portd.0
Led1 var portd.1
Led3 var Portd.3
beta=0
on interrupt goto SaltoRutina
MainLoop:
if led1=0 then
led1=1
led0=0
else
led1=0
led0=1
endif
for alpha=1 to 300
pauseus 100
next alpha
goto mainloop
disable ;deshabilita y habilita el soporte de la rutina a interrumpir
saltorutina:
beta=beta+1
if beta < 61 then ;endinterrupt
cuenta=0
beta=0
if beta=0 then
cuenta=cuenta+1
if cuenta <= 10 then endinterrupt
cuenta=0
if led3=1 then
led3=0
else
led3=1
endif
endif
endif
endinterrupt:
INTCON.2=0
RESUME
ENABLE
END
estoy leyendo las paginas siguientes pero no logran hablar de este mismo tema creo que
ustedes estan en un nivel super avanzado
Archivos Adjuntos
contador,temporizador.rar (30,2 KB (Kilobytes), 34 visitas)
Citar
27/07/2012 #2272
cesarimhola Amigo mecatrodo
hola amigo mecatrodo me podrias dar un camino o alguien de ustedes brindar una idea
con ejemplos de como empezar hacer este codigo me imagino que devo de crear registro
para almacenar un conteo y si quisiera usar tiempo difernete en encendido y apagado
deberia de usar dos registro pero desconozco de como hacerlo si ustedes me ayudaran les
agradeceria coordilmente
Citar
27/07/2012 #2273
reyvilla cesarim dijo:
hola amigo mecatrodo me podrias dar un camino o alguien de ustedes brindar una idea con
ejemplos de como empezar hacer este codigo me imagino que devo de crear registro para
almacenar un conteo y si quisiera usar tiempo difernete en encendido y apagado deberia de usar
dos registro pero desconozco de como hacerlo si ustedes me ayudaran les agradeceria coordilmente
Hola cesarim, exactamente cual es tu duda, si sabes usar interrupciones y sabes calcular
el prescaler, lo demás es mas sencillo, lo que quiere decir que no deberías tener ningún
problema. Deberías de plantear un código nuevo echo a partir del ejemplo del amigo
mecatrodatos y no escribir encima de el. Fíjate los ejemplos propuestos aquí yo
particularmente los vería como ejemplo y para la practica, ya que solo para eso sirven,
puede que alguno lo logres adaptar a tus necesidades, pero también creo que es mas
difícil que hacer uno desde cero...Si es de tu interés podríamos empezar con un código
bien sencillo y que debido a que lo vas hacer tu podrás adaptarlo o modificarlo a tu antojo
y así no tener que deducir el código de otro, cada cabeza es un mundo y cada uno tiene
su manera de generar su código en un orden o desorden especifico, aparte de aprender
como funciona cada cosa... Avísame saludoss
Citar
28/07/2012 #2274
cesarimReyvilla
hola gracias por respnderme bueno con el tutorial que mencione de nuestro amigo
mecatrodo me estoy iniciando es por ello que quisiera que me puedan orientar muy
agradecido por haberme respondido pense que no obtendria respuestas
Citar
28/07/2012 #2275
reyvilla Bueno empieza organizando un poco las ideas, y para eso te recomiendo hacer un código
de puras configuraciones, osea donde coloques las configuraciones de los fuses, el
oscilador, el tmr0, etc... Menos el código en si, esto para ir corrigiendo por partes en caso
de que haya algo mal en el código...Y unas vez que hayamos depurado esa parte entonces
es que vamos a ver como hacer las temporizaciones mas largas y funcionales.
Citar
30/07/2012 #2276
cesarimsaludos
vale entoncs lo hago y x la noche lo pongo aca en el foro gracias por tu alientos de querer
enseñarme
Citar
31/07/2012 #2277
cesarimAmigo Reyvilla
@ DEVICE PIC16F628A
@ DEVICE Intrc_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE LVP_OFF
@ DEVICE WRT_OFF
@ DEVICE CPD_OFF
@ DEVICE PROTECT_OFF
cmcon=7 ;digitaliza el puertoA
define osc 4
OPTION_REG=%10000101 ;----aca el prescaler es para 64----
INTCON=%10100000
; aca defino de acuerdo al prescaler y el cristal ya sea interno o externo
; 1/fosc*4 ====> 1/4=0.25us*4=1us
; esta formula lo logro entender y haber si me ayudas y me corriges mi duda
;256* prescaler configurado=====>(256*64)=16384
;ahora 16384/1000 ===>este valor(1000)de donde vendria a salir del tiempo 1 seg
;que quedaria 16.384 y por ultimo dividiria 1us /16.384 ====61.035===>61
ConLed var word ;variable en el codigo de pausa
Incremento var byte ;esta variable seria las veces que contara? 61 antes de producirse la
interrupcion
Registro1 var word ;aca guardaria el conteo de encendido
Registro2 var word ;aca guardaria el conteo de apagado
;====>la variable incremento cuenta las 61 veces y se genera o se p`roduce la
interrupcion,cuando la interrupcion
;se haya generado se visualizara en el led0 y luego se va gusrandando en el
;registro1 ¿x veces? luego que llego al valor dado ¿x veces? enciende led1
;sigue ahora el conteo del registro1 donde va contando ¿n veces? lo que el led1 estara
prendido
;almacenando ese tiempo ahora en el registro2 ¿l veces? cuando llego al tiempo dado se
apaga el led1
TrisD=%11110100
portD=%00000000
Led0 var Portd.0
Led1 var portd.1
;este es el 1º paso del codigo que me pediste amigo te agradesco tu tiempo y ojala lo
podamos trabajar.
Citar
02/08/2012 #2278
reyvilla Hola disculpa la demora, te recomiendo colocar los codigos entre los comandos [ CODE ]
[ /CODE ] , para que se puedan leer mejor y ocupen menos espacio. Quedaria algo asi:
Código:
@ DEVICE PIC16F628A
@ DEVICE Intrc_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE LVP_OFF
@ DEVICE WRT_OFF
@ DEVICE CPD_OFF
@ DEVICE PROTECT_OFF
cmcon=7 ;digitaliza el puertoA
define osc 4
OPTION_REG=%10000101 ;----aca el prescaler es para 64----
INTCON=%10100000
; aca defino de acuerdo al prescaler y el cristal ya sea interno o externo
; 1/fosc*4 ====> 1/4=0.25us*4=1us
; esta formula lo logro entender y haber si me ayudas y me corriges mi duda
;256* prescaler configurado=====>(256*64)=16384
;ahora 16384/1000 ===>este valor(1000)de donde vendria a salir del tiempo 1
seg
;que quedaria 16.384 y por ultimo dividiria 1us /16.384 ====61.035===>61
ConLed var word ;variable en el codigo de pausa
Incremento var byte ;esta variable seria las veces que contara? 61
antes de producirse la interrupcion
Registro1 var word ;aca guardaria el conteo de encendido
Registro2 var word ;aca guardaria el conteo de apagado
;====>la variable incremento cuenta las 61 veces y se genera o se p`roduce
la interrupcion,cuando la interrupcion
;se haya generado se visualizara en el led0 y luego se va gusrandando en el
;registro1 ¿x veces? luego que llego al valor dado ¿x veces? enciende led1
;sigue ahora el conteo del registro1 donde va contando ¿n veces? lo que el
led1 estara prendido
;almacenando ese tiempo ahora en el registro2 ¿l veces? cuando llego al
tiempo dado se apaga el led1
TrisD=%11110100
portD=%00000000
Led0 var Portd.0
Led1 var portd.1
No se si trataste de compilarlo pero yo al hacerlo me arroja 3 errores, de los cuales uno
tiene que ver con la configuracion de fuses, los otros dos con el puerto d.
Si te fijas en el porque de estos errores, puede que no sepas que el 16F628A, no posee un
puerto d y tampoco WRT, por lo cual no puedes configurar algo que no existe para ese pic,
eso no es necesario saberlo de memoria aunque muchos no los aprendemos, pero existen
muchos pic, con diferentes puertos y fuses, por lo cual para nosotros es de mucha ayuda
estos errores ya que nos indica donde nos estamos equivocando o que estamos haciendo
mal, permitiéndonos corregir el error antes de programar el pic.
Ahora ya corrigiendo eso nos permite compilar, asi mismo continuo revisando el codigo y
voy indicando a detalle que es lo que ocurre en cada linea.
Código:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 02/08/2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
@ DEVICE PIC16F628A ;Declaramos el pic a utilizar
@ DEVICE Intrc_OSC ;Declaramos el tipo de oscilador a usar, interno,
externo XT, RC, ETC...
@ DEVICE WDT_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el WDT(Watchdog
Timer), temporizador perro guardian
@ DEVICE PWRT_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el PWRT(Power-
up Timer ), tiempo de encendido
@ DEVICE LVP_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el LVP(LOW
VOLTAGE PROGRAMMING), programacion de bajo voltaje
;@ DEVICE WRT_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el WRT(FLASH
Program Memory Write)
@ DEVICE CPD_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el (Data EE
Memory Code Protect)
@ DEVICE PROTECT_OFF ;Declaramos si(ON) Ó no(OFF)se va usar el (FLASH
Program Memory Code Protection)
cmcon=7 ;Configuracion del modulo comparador (CMCON), de 7 Bit's se
;describen a continuacion.
;bit 7 C2OUT: Comparator 2 Output
;When C2INV = 0:
;1 = C2 VIN+ > C2 VIN-
;0 = C2 VIN+ < C2 VIN
;When C2INV = 1:
;1 = C2 VIN+ < C2 VIN-
;0 = C2 VIN+ > C2 VIN
;bit 6 C1OUT: Comparator 1 Output
;When C1INV = 0:
;1 = C1 VIN+ > C1 VIN-
;0 = C1 VIN+ < C1 VIN
;When C1INV = 1:
;1 = C1 VIN+ < C1 VIN-
;0 = C1 VIN+ > C1 VIN
;bit 5 C2INV: Comparator 2 Output Inversion
;1 = C2 Output inverted
;0 = C2 Output not inverted
;bit 4 C1INV: Comparator 1 Output Inversion
;1 = C1 Output inverted
;0 = C1 Output not inverted
;bit 3 CIS: Comparator Input Switch
;When CM2:CM0: = 001
;Then:
;1 = C1 VIN- connects to RA3
;0 = C1 VIN- connects to RA0
;When CM2:CM0 = 010
;Then:
;1 = C1 VIN- connects to RA3
; C2 VIN- connects to RA2
; = C1 VIN- connects to RA0
; C2 VIN- connects to RA1
;bit 2-0 CM2:CM0: Comparator Mode
;Figure 10-1 shows the Comparator modes and CM2:CM0 bit settings
;Ahora que significa cmcon = 7
;Significa que los primeros 3 bit's del cmon valen 1 y el resto vale 0
;Osea es igual que cmcon = %00000111
;Donde los bit's CM0, CM1 Y CM2 quedan en 1
;Si vemos la hoja de datos nos daremos cuentas y una mejor idea con la
grafica.
;Comparators Off
;CM2:CM0 = 111
define osc 4 ;Definimos la frecuencia de oscilacion 4, 20, etc...
OPTION_REG=%10000101 ;Registro especial option
;se describe a continuacion.
;bit 7 RBPU: PORTB Pull-up Enable bit
;1 = PORTB pull-ups are disabled
;0 = PORTB pull-ups are enabled by individual port latch values
;bit 6 INTEDG: Interrupt Edge Select bit
;1 = Interrupt on rising edge of RB0/INT pin
;0 = Interrupt on falling edge of RB0/INT pin
;bit 5 T0CS: TMR0 Clock Source Select bit
;1 = Transition on RA4/T0CKI pin
;0 = Internal instruction cycle clock (CLKOUT)
;bit 4 T0SE: TMR0 Source Edge Select bit
;1 = Increment on high-to-low transition on RA4/T0CKI pin
;0 = Increment on low-to-high transition on RA4/T0CKI pin
;bit 3 PSA: Prescaler Assignment bit
;1 = Prescaler is assigned to the WDT
;0 = Prescaler is assigned to the Timer0 module
;bit 2-0 PS2:PS0: Prescaler Rate Select bits
'BIT.2 PS2
'BIT.1 PS1
'BIT.0 PS0
'Bit Value - TMR0 Rate - WDT Rate
'PS0,PS1,PS2 -
' 0 0 0 - 1 : 2 - 1 : 1
' 0 0 1 - 1 : 4 - 1 : 2
' 0 1 0 - 1 : 8 - 1 : 4
' 0 1 1 - 1 : 16 - 1 : 8
' 1 0 0 - 1 : 32 - 1 : 16
' 1 0 1 - 1 : 64 - 1 : 32
' 1 1 0 - 1 : 128 - 1 : 64
' 1 1 1 - 1 : 256 - 1 : 128
;Donde quedo asi: OPTION_REG=%10000101
;Prescaler a 64 y con pulls-up activas
INTCON=%10100000 ;Registro especial INTCON
;se describe a continuacion.
;bit 7 GIE: Global Interrupt Enable bit
;1 = Enables all un-masked interrupts
;0 = Disables all interrupts
;bit 6 PEIE: Peripheral Interrupt Enable bit
;1 = Enables all un-masked peripheral interrupts
;0 = Disables all peripheral interrupts
;bit 5 T0IE: TMR0 Overflow Interrupt Enable bit
;1 = Enables the TMR0 interrupt
;0 = Disables the TMR0 interrupt
;bit 4 INTE: RB0/INT External Interrupt Enable bit
;1 = Enables the RB0/INT external interrupt
;0 = Disables the RB0/INT external interrupt
;bit 3 RBIE: RB Port Change Interrupt Enable bit
;1 = Enables the RB port change interrupt
;0 = Disables the RB port change interrupt
;bit 2 T0IF: TMR0 Overflow Interrupt Flag bit
;1 = TMR0 register has overflowed (must be cleared in software)
;0 = TMR0 register did not overflow
;bit 1 INTF: RB0/INT External Interrupt Flag bit
;1 = The RB0/INT external interrupt occurred (must be cleared in software)
;0 = The RB0/INT external interrupt did not occur
;bit 0 RBIF: RB Port Change Interrupt Flag bit
;1 = When at least one of the RB7:RB4 pins changed state (must be cleared in
software)
;0 = None of the RB7:RB4 pins have changed state
;Donde quedo asi: INTCON=%10100000
;Se activaron las interrupciones globales, y unicamente se uso la
interrupcion
;por desbordamiento del TMR0
;Hasta aqui bastante bien...
;Aun faltan cosas antes de empezar a usar variables y son las declaraciones
;de los puertos y los pines de los puertos cuales con entradas y cuales
;son salidas, aparte de la instrupcion de interrupcion y la subrutina
;de salto en caso de interrupcion.
ConLed var word ;variable en el codigo de pausa
Incremento var byte ;esta variable seria las veces que contara? 61 antes de
producirse la interrupcion
Registro1 var word ;aca guardaria el conteo de encendido
Registro2 var word ;aca guardaria el conteo de apagado
;TrisD=%11110100 N/A, osea, NO EXISTE ó NO APLICA
;portD=%00000000 N/A, osea, NO EXISTE ó NO APLICA
;Led0 var Portd.0 N/A, osea, NO EXISTE ó NO APLICA
;Led1 var portd.1 N/A, osea, NO EXISTE ó NO APLICA
Bueno cualquier cosa me avisas saludoss
Citar
03/08/2012 #2279
cesarim amigo si tienes razon muy buena tu explicacion sobre el cmcon
Código:
@ DEVICE PIC16F628A
@ DEVICE Intrc_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE PROTECT_OFF
cmcon=7
define osc 4
OPTION_REG=%10000101
INTCON=%10100000
ConLed var word ;variable en el codigo de pausa
Incremento var byte ;esta variable seria las veces que contara? 61 antes al
producirse la interrupcion salta a registro1
Registro1 var word ;guarda el conteo de encendido por 5 min luego salta al
registro2
Registro2 var word ;guarda el conteo de apagado por 1 min luego vuelve a
la misma rutina si no se creo ningun codigo mas
Led0 var PortB.0 ;avisó´que se produjo la interrupcion de echo me
imagino que ni se vera pero en un osciloscopio me gustaria ver
Led1 var PortB.6 ;cuando registro1 se activo se prende por 5 min
luego se apaga
Led2 var PortB.7 ;cuando registro2 se cativa se prende por 1 min
espero;;;;;espero poder estar haciendo algo correcto
;de verdad gracias por corregirme si me equivoco
Push1 var PortA.6 ;si se quisiera trabajar con pulsador1
Push2 var PortA.7 ;o pulsador2
Trisb=%00111110 ;$3E
PortB=0
TrisA=%11000000 ;$C0
PortA=0
aca dejo este codigo
Citar
03/08/2012 #2280
reyvilla que bueno, mira para que no te confundas tanto, en el icono de abajo de Más
Opciones..., te da una barra de herramientas donde tienes un icono con el símbolo #,
para poder usarlo seleccionas el texto que deseas que quede dentro del recuadro y luego
de tener seleccionado el texto le das al icono # y listo el lo coloca, para poder ver como
va a quedar le das a vista previa y eso te permite corregir antes de publicar tu
comentario, trata de corregirlo para poder entender mejor tu código...saludosss
GRAN MASTER#3 22/Ene/2009, 12:31
Bien puedes encontrar detallada informacion dentro de la hoja de datos del PIC que estas usando y a manera de resumen:
WDT o WDTEN = es el Watch Dog Timer, sirve para monitorear el estado de un PIC y si se ha trabado o hay un desbordamiento no Programado causa el reset del PIC, muy util en trabajos
profesionales pero el no saber configurarlo nos trae muchos problemas.
XT = Es pra oscilador Externos de baja velocidad por ejemplo cuando usas un cristal de 4MHz
HS = High Speed para osciladores externos para cristales mayores a 8MHz debes habilitar dicho Fuse, en este PIC hay sus variaciones como los de USB y los registros PLL que son divisores los cuales elevan la frecuencia.
MCLR = Es para activar el reset manual del PIC, este va en la patilla marcada como MCLR que a veces posee funciones de I/O, es por ello que debe ser programada segun tus requerimientos. Hay PICs como el 16F84A que solo tiene la funcion de reset. Cuando funciona como tal debes poner un boton pulldown para generar el reset manual.
PWRT= Power-on Reset Esta característica permite al PIC no inicializar hasta que le circuito interno se haya cargado completamente, lo cual es útil para evitar falsos inicios en el PIC.
LVP= Operación Low-Power Esta característica permite al PIC trabajar en bajo consumo, generalmente a 5V consumen cerca de 2mA pero si se activa esta opción puede operar con 15µA a 3V, lo cual lo hace muy funcional cuando se usan baterías.
CP = Code Protection, Habilita la proteccion de codigo de tu PIC, es decir una vez grabado lo puedes volver a leer pero no te mostrara el codigo fuente o el HEX si no mostrar solo FF o 00 lo cual sirve para proteger contra pirateria en chip jejeje.
CPD = Data Code Protec, Habilita la Proteccion de codigo de la EEprom del PIC evitando asi ser Leida.
Y bueno todos esos depende del PIC mas info en la hoja de datos del PIC que uses.
Saludos
M2ETH V2 soporte para PoE y VoIP: VoIPIC Comig soon!
Usa el foro para preguntar, NO ENVIES PRIVADOS
ZEROYPAMEPADAWAN
#4 22/Ene/2009, 12:32
Ok en eso estoy de acuerdo, pero mi duda es cuando se deve activar cada opcion o para que se deve activar, para que es cada opcion del oscilador y de los fuses??
por ejemplo para un simple programita para prender y apagar un led:
'Programa que enciende un led
inicio: High 0 pause 1000 low 0 pause 1000 goto inicioend
para un 16f628A, que se debe activar o desactivar y en la parte de oscilador que se selecciona?
y el circuito es el pic y el led a la pata 6 con su resistencia, sin oscilador
Gracias.
navaismoGRAN MASTER
#5 22/Ene/2009, 12:34
Cita:por ejemplo para un simple programita para prender y apagar un led:Todo depedn'Programa que enciende un led
inicio: High 0 pause 1000 low 0 pause 1000 goto inicioend
para un 16f628A, que se debe activar o desactivar y en la parte de oscilador que se selecciona?
y el circuito es el pic y el led a la pata 6 con su resistencia, sin oscilador
Gracias.
Todo eso depende de las consideraciones del Programador, es decir, de ti tu defines que quieres usar y que no o como quieres que funcione, para un programa sencillo basta con activar el MCLR, el XT o INTRC etc y con eso funcionara.
M2ETH V2 soporte para PoE y VoIP: VoIPIC Comig soon!
Usa el foro para preguntar, NO ENVIES PRIVADOS
ZEROYPAMEPADAWAN
#6 22/Ene/2009, 12:43
Ok con eso me doy por bien servido, muchchas gracias por su tiempo, a seguir estudiando y probando. gracias
ZEROYPAMEPADAWAN
#7 22/Ene/2009, 15:05
Hola otra vez molestandolos compañeros
solo una pregunta, encontr este programa en internet es para un letrero con matriz de leds:
http://www.4shared.com/file/81990506/e1dfc613/programa.html
alguien sabe en que programa lo puedo compilar???
por que lo he compilado en el micro code studio y con el proton y me manda muchos errores o sera que le faltan lineas???
Gracias...
navaismoGRAN MASTER
#8 22/Ene/2009, 15:18Editado por navaismo
Nop, no es ninguno de los dos, de hecho no parece tener una estructura conocida a algun Basic me aventuraria a decirte que lo probaras con MBASIC o PSI.
Pero lo que si es que se ve 100% traducible a PBP o Proton.
M2ETH V2 soporte para PoE y VoIP: VoIPIC Comig soon!
Usa el foro para preguntar, NO ENVIES PRIVADOS
ZEROYPAMEPADAWAN
#9 22/Ene/2009, 16:38
Ok gracias por tu teimpo comañero, voy a chekarlo.
DOMINGO, 8 DE JULIO DE 2012
Fusibles o "bits" de Configuración en PICLes dejo esta interesante y útil información para quienes comienzan a programar los PIC en assembler y en C...
Quiero dar las GRACIAS a http://xorwf.blogspot.com por el aporte...
¿Fusibles? Los bit's de configuración o también llamados "fusibles" permiten configurar ciertas funciones en los microcontroladores PIC. La cantidad de funciones dependen del microcontrolador, por ejemplo, en el 16F84A existen 4 funciones, en el 16F88 son alrededor de 13 funciones.
¿Para qué sirven?Nos permiten configurar algunas funciones del micro, como el tipo de oscilador, la proteccion de codigo, habilitar el perro guardian (evita que se quede pegado el micro), habilitar el reset maestro, habilitar un reset inicial, habilitar reset por bajo voltage en la fuente, habilita el modo "depurador" o debugger, entre otros.
¿Cuándo se usan?Si estamos usando alguno de los programadores de Microchip como el pickit2 o el pickit3, debemos escribir la configuracion de estos fusibles en la cabecera de nuestro código fuente, antes de compilar.
¿Como se que fusibles usa el micro?Todo esto aparece en la hoja de datos del micro (datasheet) , y se pueden obtener del fichero que incluimos en la cabecera del fuente, el P16F88.INC por ejemplo, que se encuentra en la carpeta "MPASM suite" que esta dentro de la carpeta "microchip" donde instalamos el MPLAB, ojo que el nombre del fichero depende del micro.
De los ficheros antes mencionados se obtiene lo siguiente:
Para el 16F84A
_CP_ON EQU H'000F'_CP_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_PWRTE_OFF EQU H'3FFF'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_LP_OSC EQU H'3FFC'_XT_OSC EQU H'3FFD'_HS_OSC EQU H'3FFE'_RC_OSC EQU H'3FFF'
La "Palabra de Configuración", es la que AGRUPA todos estos de la siguiente forma, usando la directiva: "__CONFIG" (ojo que tiene 2 guión bajo antes de config)
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
Si se quiere activar una de las opciones anteriores, solo hay que cambiar el OFF por el ON.
Para el 16F88
_CONFIG1 EQU H'2007'_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options_CP_ALL EQU H'1FFF'_CP_OFF EQU H'3FFF'_CCP1_RB0 EQU H'3FFF'_CCP1_RB3 EQU H'2FFF'_DEBUG_OFF EQU H'3FFF'_DEBUG_ON EQU H'37FF'_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected_CPD_ON EQU H'3EFF'_CPD_OFF EQU H'3FFF'_LVP_ON EQU H'3FFF'_LVP_OFF EQU H'3F7F'_BODEN_ON EQU H'3FFF'_BODEN_OFF EQU H'3FBF'_MCLR_ON EQU H'3FFF'_MCLR_OFF EQU H'3FDF'_PWRTE_OFF EQU H'3FFF'_PWRTE_ON EQU H'3FF7'_WDT_ON EQU H'3FFF'_WDT_OFF EQU H'3FFB'_EXTRC_CLKOUT EQU H'3FFF'_EXTRC_IO EQU H'3FFE'_INTRC_CLKOUT EQU H'3FFD'_INTRC_IO EQU H'3FFC'_EXTCLK EQU H'3FEF'_HS_OSC EQU H'3FEE'_XT_OSC EQU H'3FED'_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options_IESO_ON EQU H'3FFF'_IESO_OFF EQU H'3FFD'_FCMEN_ON EQU H'3FFF'_FCMEN_OFF EQU H'3FFE'
y la "Palabra de Configración" sería algo como esto:
;Program Configuration Register 1__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;Program Configuration Register 2__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFFPublicado por Paticio Cortés Aburto en 01:56
Configuracion bits Pickit 2 programmer
Buenas a todos, abro este hilo porque estoy intentando averiguar cuales son los bits que
corresponden a la configuracion de un pic mediante pickit 2 program para el pickit 2 clone,
si alguien tiene alguna informacion por lo minima que sea de que funcion activa y
desactiva cada bit en la config de pic y desea compartirla se lo agradeceria, en el MPlab se
activan y desactivan los fuses al mismo tiempo que compilas pero seria mucho mas
comodo el poder hacerlo desde el propio pickit 2 programmer sin tener que recompilar
para cambiar los fuses.
Os adjunto una imagen de la parte de la configuracion del pickit 2 programmer por si
estoy equivocado y desea arrojarme algo de luz al respecto.
config bit.jpg
Saludos a todos.
Citar
06/08/2011 #2
Daniel Meza Simplemente se tiene que hace click sobre las casillas que no estén sombreadas para
cambiar el valor de cada bit. Por otra parte en la hoja técnica del PIC que uses esta el
orden de los bits de la palabra de configuración para saber que bits modificar. Saludos
Citar
06/08/2011 #3
Moyano Jonathan Lo más recomendable es programar los fusibles dentro del código fuente, entonces
cuando compiles el programa lo único que tenés que hacer es grabarlo en el
microcontrolador, ya que el software del pickit2 se encarga de grabar los fuses contenidos
en el archivo .hex
Citar
06/08/2011 #4
rockbrand amigo te adjunto un txt con una configuracion básica encontrada en un ejercicio guia.
Espero te sirvan. Saludos
Archivos Adjuntos
config bits.txt (2,7 KB (Kilobytes), 365 visitas)
Citar
07/08/2011 #5
mikeekim Si me sirve, aunque siento habeos hecho perder el tiempo, he encontrado una manera
bastante comoda de cambiar los fuses, en el MPlab en el menu configure/ configuration
bits te da un valor en la pestaña value que corresponden a los bits configurados, ese value
se lo introduces al pickit2 program en configuration y no necesitas recompilar para
cambiar la config/fuses, por ejemplo si el pic fuese un 16F84A con XT WDT OFF, PWRTE
ON, CP OFF el MPlab te da 3FF1 solo hay que introducirlo ese valor en el pickit 2 program
en configuracion, que value marque 3FF1 y tienes la config deseada.
Saludos y gracias por vuestra ayuda.
Citar
29/10/2012 #6
ctronicDulceycodigo binario de configuracion del 16f877a para pickit2
que tal compañeros..!
tengo una pregunta: sé que se pueden configurar los fusibles del pic16f877a en la edicion
del codigo fuente..
pero para grabar el pic tengo el PICKIT2 y en la parte superior derecha del area de trabajo
hay un boton para configurar el dispositivo mediante un codigo binario el cual no
conozco...
alguien podria decirme por favor cual es el codigo de configuracion correspondiente al
16f877a para pickit2???? muchas gracias de antemano.....
buen dia
Citar
13/02/2013 #7
jeryusDuda en Configuracion de P16F887 Prog PICBASIC
saludos amigos!
se me presento una duda, estoy iniciando en esto de la programación de
microcontroladores en el lenguaje Basic, inicie con el programa MicroCode Studio y un
pequeño manual de practicas y los pequeños codigos sin problemas, compilados
correctamente pero a la hora de querer escribir el pic me aparece un error en el PicKit
como el que adjunto en la imagen, hasta donde entiendo me falta la palabra de
configuración, intente escribirla como se escribe en ensamblador pero me da error de
sintaxis asi que lo borre pero el problema persistio, alguien sabe como corregir este
error ? de antemano, muchas gracias por la atención!
Citar
13/02/2013 #8
razetto Configuraste el PICkit para que funcione con el Micro Studio?. Fijate en View>Compile and
program options>Pestaña programmer. tenes que tener cargado el PICkit ahi.
Citar
13/02/2013 #9
jeryus si, de echo cuando presiono el boton de compile and program, compila el programa y me
abre el pckit pero cuando quiero cargar el Xnombre.hex me aparece el error mencionado
arriba...
Citar
13/02/2013 #10
D@rkbytes
Moderador
Lo que pasa es que no estás declarando la palabra de configuración en tu código.
Agrega esta configuración de fuses en la cabecera de tu programa.Código:
;*****************************************************************************
**
; Palabra de configuración
@ DEVICE
INTOSCIO,PWRT_ON,MCLR_ON,WDT_OFF,BOD_OFF,LVP_OFF,FCMEN_OFF,IESO_OFF
@ DEVICE2 WRT_OFF,BOR21V
;*****************************************************************************
**
OSCCON = %1110101 ; Oscilador interno estable a 8MHz.
DEFINE OSC 8 ; Definir que se usaran 8MHz de reloj
;*****************************************************************************
**
Puedes modificar los que desees, conforme a los requerimientos de tu programa.
Ésta configuración es standard para trabajar con el oscilador interno a 8MHz.
Los fuses disponibles para el PIC16F887 los encuentras en la carpeta INC donde tengas
instalado PBP
Por default C:\PBP\INC
El archivo se llama M16F88X.INC
Suerte.
Citar
13/02/2013 #11
jeryus D@rkbytes dijo:
Lo que pasa es que no estás declarando la palabra de configuración en tu código.
Agrega esta configuración de fuses en la cabecera de tu programa.Código:
;*****************************************************************************
**
; Palabra de configuración
@ DEVICE
INTOSCIO,PWRT_ON,MCLR_ON,WDT_OFF,BOD_OFF,LVP_OFF,FCMEN_OFF,IESO_OFF
@ DEVICE2 WRT_OFF,BOR21V
;*****************************************************************************
**
OSCCON = %1110101 ; Oscilador interno estable a 8MHz.
DEFINE OSC 8 ; Definir que se usaran 8MHz de reloj
;*****************************************************************************
**
Puedes modificar los que desees, conforme a los requerimientos de tu programa.
Ésta configuración es standard para trabajar con el oscilador interno a 8MHz.
Los fuses disponibles para el PIC16F887 los encuentras en la carpeta INC donde tengas instalado PBP
Por default C:\PBP\INC
El archivo se llama M16F88X.INC
Suerte.
saludos Darkbytes, agregue la parte de codigo que me dijiste, y ahora me aparecen 2 alertas
y 2 errores como podras ver en la imagen, cual es el problema persistente? agrego que el
problema con PicKit2 Persiste :s
por otro lado, llamame novato si gustas pero, podrias explicarme mas a detalle que son los
fuses ? son los fuses los que se activan/desactivan en las palabras de configuracion ?
Citar
13/02/2013 #12
D@rkbytes
Moderador
Saludos, como este asunto de los fuses ya lo he tratado en varios temas,
aquí tienes un documento que te va a servir para su comprensión.
Significado de los Fuses (DOC) Y al parecer cuando en MicroCode al declarar los fuses, te
produce error,
debes actualizar el PBP que tienes a la versión 2.60, que fue la última antes de MCS v5.0.0.0
con PBPX v3.0.X.X
Al hacer la actualización, ya podrás compilar sin errores.
Nota: No uses la opción (Use MPASM) para compilar a menos que vayas a usar un PIC18
Suerte.
Citar
27/02/2013 #13
electronica001problema con pickit2
hola tengo un problema con el pickit2 generico cuando le conecto no me reconoce como
nuevo dispocitivo pero si me reconoce el pic en el programa, aora lo grabo pero no me
funciona cuando lo armo en el proto e probado con circuitos sensillos como apagar y
encender un led pero no funciona a que se debe por que no esta grabando me parece que
debo configurar o que cambios debo hacer en el programa gracias.
la vercion que tengo es 2.61
Citar
27/02/2013 #14
jeryus electronica001 dijo:
hola tengo un problema con el pickit2 generico cuando le conecto no me reconoce como nuevo
dispocitivo pero si me reconoce el pic en el programa, aora lo grabo pero no me funciona cuando lo
armo en el proto e probado con circuitos sensillos como apagar y encender un led pero no funciona
a que se debe por que no esta grabando me parece que debo configurar o que cambios debo hacer
en el programa gracias.
la vercion que tengo es 2.61
yo nunca pude hacer trabajar los programas en microcode studio, no encontre el proble,a
lo que yo hice fue instalarme el MikroBasic y trabajar en ese, con este programa no eh
tenido ningun problema
Citar
31/05/2013 #15
Alcocer Garcia
Felix Davi
tengo un problema parecido el programa lo graba bien en el pic 16f877a pero no funciona
al momento de implmentarlo en protoboard . Gracias
Citar
31/05/2013 #16
D@rkbytes
Moderador
Alcocer Garcia Felix Davi dijo:
tengo un problema parecido el programa lo graba bien en el pic 16f877a pero no funciona al
momento de implmentarlo en protoboard . Gracias
¿Ya revisaste bien la palabra de configuración?
¿La configuración del registro ADCON1, para determinar que pines serán análogos y
cuales digitales?
¿El pin de reset, cristal, etc.?