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.
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.
Si lo que quieres es hacer un contador programable, es mejor que realices otro código.Suerte.
Buenas tardes amigo D@rkbytes. Gracias por este circuito.
Me tome el atrevimiento y lo monte en PROTEUS con un 16F628A y 3 displays.
Con un poco más de exactitud en el tiempo con respecto al reloj de PROTEUS en el ejemplo.
Arranca desde 180 y el reloj marca 3 minutos cuando llega a 000 el timer.
Adjunto carpeta con archivos y sigo en el proceso de poder programarlo con pulsadores.
Cualquier ayuda será bien recibida.
Pues no sé si serán los módulos rf los que presenten problema (FSI000A-CDR03A), hasta ahora los veo funcionando bien y como te comenté anteriormente, cuando programo para un solo pin parece funcionar bien por lo que creo que el problema no es tan trivial como parece. Voy a probar con un solo pin durante todo el día a ver si se mantiene y lo estoy comentando aquí nuevamente esta noche, de lo contrario, pues me tocaría desechar la idea del bloqueo con rf y pensarlo con teclado directamente en la moto para mayor seguridad.
Gracias.
en lugar de la sentencia if-then utiliza la funcion serin2 y WAITSTR ArrayVar{\n}¿como ago que CONEC me almacen esos dos caracteres?¿como puedo hacer la comparacion en if?