Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Este PIC tiene dos direcciones para la palabra de configuración: 0x2007 y 0x2008
En la dirección 0x2007 (CONFIG1) se establecen los fuses que muestras, pero en 0x2008 se establecen estos otros:
CONFIG2:
FCMEN = Fail-Safe Clock Monitor Enable bit
IESO = Internal External Switchover bit
Solo se establecen los primeros 2 bits (0 y 1) de los 13 bits del registro CONFIG2.
Por eso los incluí usando @ DEVICE2
No ocurrirá problema en nuestro programa si estos bits al no ser configurados quedan activos, mientras no falle el oscilador principal, pero si llegara a fallar se activaría el oscilador interno a la frecuencia que haya sido configurado en el registro OSCCON que por default será de 4MHz.
Y esto podría prestarse a confusiones sobre los tiempos de trabajo en el programa si se usa otra frecuencia.
Por aquí expuse unos ejemplos demostrando el funcionamiento del sistema "Fail-Safe Clock Monitor"
Saludos.
Necesitas configurar el puerto A como digital I/O, ya que usas los pines RA2 y RA3.en la simulación en proteus funciona bien pero en protoboard no hace nada
Necesitas configurar el puerto A como digital I/O, ya que usas los pines RA2 y RA3.
Utiliza ANSEL = 0 al inicio del programa para que el puerto A sea configurado con entradas y salidas digitales.
Suerte.
Señores los felicito y les agradezco su ayuda ustedes son unos monstruos para esta vaina segui sus consejos y funciona de maravilla nuevamente muchas graciasCompañero ferdy575 aun otra cosa se me olvido explicarte antes fue las configuraciones de los registros que controlar el hardware del microcontrolador, debes tomar en cuenta que el micro en si tiene una estructura interna que debes conoces bien asi como los fuses, también hay registros de control para los periféricos internos y externos del microcontrolador. En tu caso el micro tiene comparadores A/D y conversores A/D los cuales deben ser desactivados si no se van a utilizar de lo contrario van a estar activados. Estos registros normalmente son el CMCON y el ADCON0 y ADCON1 y ANSEL.
Como no los vas a usar colócalos así:
CMCON = 7 'desactiva modulo comparador
ADCON0 = 0 'desactiva modulos conversores
ADCON1 = 0 'controla modulos conversores
ANSEL = 0 'configura todos los canales del A/D a digitales
ADCON1 no influye si ADCON0 esta desactivado pero igual yo coloco todo a 0 para estar mas tranquilo con respecto a los módulos A/D.
Por otra parte e falto en los fuses
@ DEVICE2 IESO_OFF, FCMEN_OFF
Espero sea la solución a tu problema y si funciona coloca unas imágenes a ver como quedo...saludos
Para establecer la palabra de configuración en ese PIC o en otros de la serie 18, tienes que hacer lo siguiente.Hola alguien que me pueda ayudarcon la palabra de onfiguracion de un pic 18f4520
;****************************************************************
;* 18F4520.INC *
;* *
;* By : Leonard Zerman, Jeff Schmoyer *
;* Notice : Copyright (c) 2010 microEngineering Labs, Inc. *
;* All Rights Reserved *
;* Date : 05/21/10 *
;* Version : 2.60a *
;* Notes : *
;****************************************************************
NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F4520, r = dec, w = -311, w = -230, f = inhx32
INCLUDE "P18F4520.INC" ; MPASM Header
__CONFIG _CONFIG1H, _OSC_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
__CONFIG _CONFIG3H, _CCP2MX_PORTC_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 32
NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F4520, r = dec, w = -311, w = -230, f = inhx32
INCLUDE "P18F4520.INC" ; MPASM Header
[B]CONFIG OSC = XT, WDT = OFF, PWRT = ON, LVP = OFF, BOREN = OFF[/B]
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 32
Hola Torres, me sirvio mucho tu consejo para cambiar la forma de como estaba viendo el flujo del USBIN, y efectivamente se queda "esperando" el valor.
pongo el diagrama de flujo por si a alguien le sirve.
lo que hice fue poner un timer en VB6 que este enviando el Valor cada 1ms y asi "destrabar" la espera y como mencionas otra posibilidad es el uso de interrupciones en lugar del button, pero se me hizo mas facil de esa manera
Muchas gracias por tu ayuda!.
ademas anexo el ejemplo de comunicacion bidireccional con usb para quien le pueda servir.
esta probado en PBP 2.5, MCS 3.0, MPASM 5.2 y Proteus 7.8
SAludos y de nuevo gracias.
;****************************************************************
;* 18F4520.INC *
;* *
;* By : Leonard Zerman, Jeff Schmoyer *
;* Notice : Copyright (c) 2010 microEngineering Labs, Inc. *
;* All Rights Reserved *
;* Date : 05/21/10 *
;* Version : 2.60a *
;* Notes : *
;****************************************************************
NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F4520, r = dec, w = -311, w = -230, f = inhx32
INCLUDE "P18F4520.INC" ; MPASM Header
CONFIG OSC = XT, WDT = OFF, PWRT = ON, MCLRE = ON, PBADEN = OFF, LVP = OFF, BOREN = OFF
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 32
Para establecer la palabra de configuración en ese PIC o en otros de la serie 18, tienes que hacer lo siguiente.
1.- Buscar dentro de la carpeta de instalación del compilador PBP, el archivo 18F4520.INC y realizas una copia de seguridad de ese archivo, ya que tendrá que ser modificado.
2.- Para saber que fuses están disponibles para el PIC18F4520 se necesita el archivo P18F4520.INC que se encuentra en la carpeta MPASM Suite en la carpeta de instalación de MPLAB.
Por defecto en: C:\Archivos de programa\Microchip\MPASM Suite
Dentro del archivo que será editado (18F4520.INC) está el siguiente código:
5.- El código que contiene ese archivo deberá ser modificado en la parte que contiene la palabra de configuración.Código:;**************************************************************** ;* 18F4520.INC * ;* * ;* By : Leonard Zerman, Jeff Schmoyer * ;* Notice : Copyright (c) 2010 microEngineering Labs, Inc. * ;* All Rights Reserved * ;* Date : 05/21/10 * ;* Version : 2.60a * ;* Notes : * ;**************************************************************** NOLIST ifdef PM_USED LIST "Error: PM does not support this device. Use MPASM." NOLIST else LIST LIST p = 18F4520, r = dec, w = -311, w = -230, f = inhx32 INCLUDE "P18F4520.INC" ; MPASM Header __CONFIG _CONFIG1H, _OSC_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H __CONFIG _CONFIG3H, _CCP2MX_PORTC_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H __CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L NOLIST endif LIST EEPROM_START EQU 0F00000h BLOCK_SIZE EQU 32
Por ejemplo, de esta forma:
En este ejemplo utilicé la palabra de configuración que requiere tu programa, y puedes modificarla utilizando los fuses que se encuentran disponibles en el archivo P18F4520.INCCódigo:NOLIST ifdef PM_USED LIST "Error: PM does not support this device. Use MPASM." NOLIST else LIST LIST p = 18F4520, r = dec, w = -311, w = -230, f = inhx32 INCLUDE "P18F4520.INC" ; MPASM Header [B]CONFIG OSC = XT, WDT = OFF, PWRT = ON, LVP = OFF, BOREN = OFF[/B] NOLIST endif LIST EEPROM_START EQU 0F00000h BLOCK_SIZE EQU 32
Nota importante:
Este tipo de palabra de configuración tiene que ser soportada por MPASM, por lo cual se tiene que tener actualizado MPLAB ya que en el archivo P18F4520.INC se menciona lo siguiente...
; IMPORTANT: For the PIC18 devices, the __CONFIG directive has been
; superseded by the CONFIG directive.
Traducción:De esta forma es como he agregado la nueva palabra de configuración al archivo de PBP, 18F4520.INC
IMPORTANTE: Para los dispositivos PIC18, la directiva __ CONFIG ha sido sustituida por la directiva CONFIG.
Teniendo este detalle en cuenta, no debes tener problema para compilar tu programa con la palabra de configuración.
Suerte.
Lo ves, no es tan complicado modificar el archivo con la palabra de configuración que requiera tu programa.Hola amigo D@rkbytes
Agradezco mucho tu ayuda hice lo que me dijiste y le metí el código para mi programa como tu me lo escribiste y todo funcionaba bien excepto que el no leía el portb, como te comentaba desconozco lo referente a editar la palabra de configuración y no se el significado de los fuses quisiera aprender mas de esto si pudieras decirme o recomendarme donde aprender mas de esto te lo agradecería.
Al ver que mi puerto b no lo leía me metí al archivo que me mencionaste y comencé a leer un poco y por un golpe de suerte me encontré con la instrucción de PBADEN = OFF PORTB<4:0> pins are configured as digital I/O on Reset, y decidí agregársela al programa que tu me enviaste y pum funciono mi programa al menos en la simulación en proteus, espero que funcione físicamente. Nuevamente te agradezco y pongo como quedo el programa. Saludos y espero me recomiendes donde aprender mas de esto.
Saludos
cuenta = nu[0]+nu[1]+nu[2]+nu[3]+nu[4]+nu[5]+nu[6]+nu[7]+nu[8]+nu[9]+nu[10]+nu[11]+nu[12]+nu[13]+nu[14]+nu[15]
CLEAR
trisb = %00111111
trisc = 0
trisd = 0
portb = 0
portc = 0
portd = 0
cuenta var byte
cuentabcd var byte
nu var byte [36]
inicio:
'primera fila
portd = %00000001
if portb = %00000000 then nu[0] = 0
if portb = %00000001 then nu[1] = 1
if portb = %00000010 then nu[2] = 2
if portb = %00000100 then nu[3] = 3
if portb = %00001000 then nu[4] = 4
if portb = %00010000 then nu[5] = 5
if portb = %00100000 then nu[6] = 6
pause 10
'segunda fila
portd = %00000010
if portb = %00000001 then nu[7] = 6
if portb = %00000010 then nu[8] = 5
if portb = %00000100 then nu[9] = 4
if portb = %00001000 then nu[10] = 3
if portb = %00010000 then nu[11] = 2
if portb = %00100000 then nu[12] = 1
pause 10
'tercera fila
portd = %00000100
if portb = %00000001 then nu[13] = 1
if portb = %00000010 then nu[14] = 2
if portb = %00000100 then nu[15] = 3
if portb = %00001000 then nu[16] = 4
if portb = %00010000 then nu[17] = 5
if portb = %00100000 then nu[18] = 6
pause 10
'cuarta fila
portd = %00001000
if portb = %00000001 then nu[19] = 6
if portb = %00000010 then nu[20] = 5
if portb = %00000100 then nu[21] = 4
if portb = %00001000 then nu[22] = 3
if portb = %00010000 then nu[23] = 2
if portb = %00100000 then nu[24] = 1
pause 10
'quinta fila
portd = %00010000
if portb = %00000001 then nu[25] = 1
if portb = %00000010 then nu[26] = 2
if portb = %00000100 then nu[27] = 3
if portb = %00001000 then nu[28] = 4
if portb = %00010000 then nu[29] = 5
if portb = %00100000 then nu[30] = 6
pause 10
'sexta fila
portd = %00100000
if portb = %00000001 then nu[31] = 6
if portb = %00000010 then nu[32] = 5
if portb = %00000100 then nu[33] = 4
if portb = %00001000 then nu[34] = 3
if portb = %00010000 then nu[35] = 2
if portb = %00100000 then nu[36] = 1
pause 10
cuenta = nu[0]+nu[1]+nu[2]+nu[3]+nu[4]+nu[5]+nu[6]+nu[7]+nu[8]+nu[9]+nu[10]+nu[11]+nu[12]+nu[13]+nu[14]+nu[15]+nu[16]+nu[17]+nu[18]+nu[19]+nu[20]+nu[21]+nu[22]+nu[23]+nu[24]+nu[25]+nu[26]+nu[27]+nu[28]+nu[29]+nu[30]+nu[31]+nu[32]+nu[33]+nu[34]+nu[35]+nu[36]
cuentabcd = ((cuenta / 10) << 4) + (cuenta // 10)
portc = cuentabcd
goto inicio
Saludos erickp, si pudieses colocar el archivo de la simulacion para buscar una solucion, y ver en que te podemos ayudar seria bueno.! Saludos!
Eso se debe al utilizar las configuraciones que usa PICBasic Pro en las Definiciones.al ponerle 4 mhz en la frecuencia del microcrontrolador, me sale un error de que ADC conversión clock está mal.
En la simulación muchas veces debido a la velocidad de conmutación los displays no funcionan bien.El otro problema es. ¿Por qué en la simulación se ven así los displays?
Muy probablemente, ya que en tu código estás utilizando retardos de 10Ms después de cada lectura.No lo he llevado a cabo a la practica. ¿Me sucederá lo mismo?
Eso se debe al utilizar las configuraciones que usa PICBasic Pro en las Definiciones.
No en todos los PIC establece los parámetros adecuados para el conversor analógico.
Por eso es recomendable hacer un debug del programa para ver los valores de los registros en Watch Window
En la simulación muchas veces debido a la velocidad de conmutación los displays no funcionan bien.
Existen algunos trucos por software y por hardware para disminuir el parpadeo durante la simulación, pero luego al montar el circuito físicamente se tienen que eliminar para que el circuito funcione correctamente.
Muy probablemente, ya que en tu código estás utilizando retardos de 10Ms después de cada lectura.
Eso hará que el parpadeo de los displays sea muy notorio, porque estás realizando 6 lecturas.
Te recomiendo que antes de programar un PIC, leas bien sobre los registros con los que vas trabajar.
Así tendrás mayor información sobre lo que tienes que configurar y sabrás mejor lo que estás haciendo.
Adjunto tu programa y simulación funcionando, y si llegas a tener problemas al compilar el programa, puede ser porque agregué la palabra de configuración para usar el oscilador interno que es como lo necesitas en tu proyecto.
Y vi que compilaste tu programa con MPASM y eso te puede causar problemas al compilar.
Cómo es un PIC16 no selecciones utilizar compilar con MPASM y no debes tener problemas.
Notas:
Realicé varios cambios tanto al diseño de simulación como al programa y están comentados.
Al montar el proyecto físicamente, puedes realizar algunas pruebas con los valores de los retardos de conmutación hasta encontrar la mejor respuesta visual en los displays de 7 segmentos.
No tengo ese PIC, por lo tanto, lograr que funcione físicamente, ya corre por tu cuenta.
Suerte.
Lo que puedes hacer es realizar el mismo procedimiento que mencioné en el post #2733 para modificar la palabra de configuración en el archivo 16F677.INC y así seguir compilando con MPASM.Te comento que mi pc tiene el windows 7 de 64 bits y por lo que yo sé, no puedo compilar si no es con MPASM, ¿Habrá alguna solución o necesito definitivamente una maquina de 32 bits?
NOLIST
ifdef PM_USED
LIST
include 'M16F6xx.INC' ; PM header
device pic16F677, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
XALL
NOLIST
else
LIST
LIST p = 16F677, r = dec, w = -302
INCLUDE "P16F677.INC" ; MPASM Header
[B] __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF[/B]
NOLIST
endif
LIST
De nada erickp, y en lo que te podamos ayudar, cuenta con ello.Como siempre una felicitación y reconocimiento por tu gran ayuda.
Saludos y nuevamente gracias por tu gran ayuda a nosotros los novatos.
Atte.
erickp
Suerte.Tu código contiene varios errores, sobre todo en el control de la interrupción por cambio de estado RB4-RB7
Ya los corregí, y ahora al presionar el botón de tiempo extra, se reinicia el conteo a 29.
Suerte.
Leer información de varios sensores y luego mostrar la información en pantalla, no es difícil.
Tan solo se leen los sensores consecutivamente, se guarda la información en variables, se procesa y se muestra.
En el caso de sensores análogos como el LM35, realizar la tarea de leer varios y luego mostrar, es sencillo.
Cuando el proceso de lectura y conversión es semi complicado como el caso de un DS18B20,
entonces si puede demorar un poco la visualización si se usan varios sensores.
Aún así, para ambos casos no se requiere del uso de microcontroladores potentes.
Quizás este ejemplo que adjunto, te parecerá muy interesante, es sobre Pseudo Multitasking con PIC.
Hace ya algún tiempo que lo descubrí, y ahora los enlaces están rotos.
Pero por suerte logré descargar los archivos, y aquí se los dejo.
En el archivo viene la explicación de como funciona, y algunas librerías. "Está en inglés"
Nota:
El proyecto original usaba un PIC16F887A, yo lo adapte a un PIC16F88.
Como quiera dejé el archivo *.bas original sin realizar modificaciones.
Saludos.