Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
28/09/2013 #2621

Avatar de reyvilla

La forma en que yo lo hago es copiando directamente del archivo .INC los fuses correspondientes al pic y luego lo voy modificando según sea lo que necesite. En este caso de la matrix yo lo coloque así.

@ DEVICE PIC16F88
@ DEVICE XT_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE BOD_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE WRT_OFF
@ DEVICE DEBUG_OFF
@ DEVICE CCPMX_OFF
@ DEVICE PROTECT_OFF
29/09/2013 #2622
Moderador

Avatar de D@rkbytes

reyvilla dijo: Ver Mensaje
La forma en que yo lo hago es copiando directamente del archivo .INC los fuses correspondientes al pic y luego lo voy modificando según sea lo que necesite. En este caso de la matrix yo lo coloque así.

@ DEVICE PIC16F88
@ DEVICE XT_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE BOD_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE WRT_OFF
@ DEVICE DEBUG_OFF
@ DEVICE CCPMX_OFF
@ DEVICE PROTECT_OFF
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.
29/09/2013 #2623

Avatar de reyvilla

Gracias por la información muy bueno ese dato, ya revise y efectivamente esta incluido un poco mas abajo en el archivo .INC del 16f88 algo nuevo que aprendí hoy muchas gracias.
29/09/2013 #2624

Avatar de ferdy575

D@rkbytes dijo: Ver Mensaje
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.
Hola Darkbytes gracias por tu ayuda esta muy interesante esta información te cuento que puse los fuses como dijiste y en efecto ya no me sale el mensaje de error en el pickit2, y se deja cargar bien en el pic pero no da señales de vida, no logro que el pic arranque, subo el código a ver sí le encuentras donde está el error en la simulación en proteus funciona bien pero en protoboard no hace nada, muchas gracias de antemano
Archivos Adjuntos
Tipo de Archivo: rar prueba matriz 8x24 16f88.rar (26,3 KB (Kilobytes), 78 visitas)
29/09/2013 #2625
Moderador

Avatar de D@rkbytes

ferdy575 dijo: Ver Mensaje
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.
29/09/2013 #2626

Avatar de reyvilla

Compañ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
30/09/2013 #2627

Avatar de ferdy575

D@rkbytes dijo: Ver Mensaje
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.
reyvilla dijo: Ver Mensaje
Compañ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
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 gracias
30/09/2013 #2628

Avatar de reyvilla

Buen día que bueno me alegro mucho por ti, recuerda compartir aunque sea una imagen de tu proyecto funcionando..saludosss
02/10/2013 #2629


Palabra de configuracion PIC 18F4520
Hola alguien que me pueda ayudarcon la palabra de onfiguracion de un pic 18f4520 aca les dejo los archivos del programa y la simulacion en proteus es una matriz 6x6 que va sumando.
Archivos Adjuntos
Tipo de Archivo: rar TECL6X6 PIC18F4520.rar (85,4 KB (Kilobytes), 61 visitas)
02/10/2013 #2630
Moderador

Avatar de D@rkbytes

erickp dijo: Ver Mensaje
Hola alguien que me pueda ayudarcon la palabra de onfiguracion de un pic 18f4520
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:
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
5.- El código que contiene ese archivo deberá ser modificado en la parte que contiene la palabra de configuración.
Por ejemplo, de esta forma:
Có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
        CONFIG OSC = XT, WDT = OFF, PWRT = ON, LVP = OFF, BOREN = OFF
        NOLIST
    endif
        LIST
EEPROM_START    EQU    0F00000h
BLOCK_SIZE    EQU    32
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.INC

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:
IMPORTANTE: Para los dispositivos PIC18, la directiva __ CONFIG ha sido sustituida por la directiva CONFIG.

De esta forma es como he agregado la nueva palabra de configuración al archivo de PBP, 18F4520.INC

Teniendo este detalle en cuenta, no debes tener problema para compilar tu programa con la palabra de configuración.

Suerte.
10/10/2013 #2631


Hola amigos de los pic:
Estoy intentando hacer un timer regulable (con pot) con el pic12f675 por ser pequeño, he buscado informacion pero solo hay en lenguaje C, y la verdad soy nuevo con esto de los pic, todavia no comprendo como usar el ADC, si alguien me ayuda por favor. El proyecto es para encender 2 luces exteriores, cuando se presiona un pulsador se encienden las dos y luego la una se apaga en 1 min aprox y la otra se apaga en 5min aprox. Lo tengo hecho con tiempos fijos, con pauses y next for, pero me gustaria hacerlo regulable para no estar retirando el pic cada rato para probar un nuevo tiempo. Por cierto estoy practicando con basic. Gracias por su ayuda.
14/10/2013 #2632


Hola LaElectronicaMeOdia, muchas gracias por tu valioso aporte, agradecería mucho me puedas ayudar con una duda que tengo, he bajado tu código y al inicio del programa CyberCtrl.pbp tienes algunas declaraciones que van precedidas de un símbolo aroba @, es necesario poner eso?; porque yo estoy realizando un programa con un PIC18F2550 al cual he conectado 18 LED en los puertos desde el A1 al B7; todo me funciona perfecto y puedo encender y apagar los LEDs desde la PC usando VB.NET 2010 sin uysar esas declaraciones; pero al aumente una parte de código para que una vez encienda el puerto usando DoUSBOut yo lea el puerto que acabo de encender y lo mando hacia la compu la cual me lee si es (1) ó (0) y me da un mensaje de que se encendió correctamente o no; pero al incrementar eso el programa empieza a colgarse y para encender cada led debo esperar entre 3 segundos o 4 no puedo encenderlos de manera seguida porque el PIC deja de funcionar; y en otras ocaciones asi espere ese tiempo ya no responde el PIC, espero ser claro en mi pregunta y gracias de antemano

---------- Actualizado después de 5 minutos ----------

LaElectronicaMeOdia dijo: Ver Mensaje
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.

Hola LaElectronicaMeOdia, muchas gracias por tu valioso aporte, agradecería mucho me puedas ayudar con una duda que tengo, he bajado tu código y al inicio del programa CyberCtrl.pbp tienes algunas declaraciones que van precedidas de un símbolo aroba @, es necesario poner eso?; porque yo estoy realizando un programa con un PIC18F2550 al cual he conectado 18 LED en los puertos desde el A1 al B7; todo me funciona perfecto y puedo encender y apagar los LEDs desde la PC usando VB.NET 2010 sin uysar esas declaraciones; pero al aumente una parte de código para que una vez encienda el puerto usando DoUSBOut yo lea el puerto que acabo de encender y lo mando hacia la compu la cual me lee si es (1) ó (0) y me da un mensaje de que se encendió correctamente o no; pero al incrementar eso el programa empieza a colgarse y para encender cada led debo esperar entre 3 segundos o 4 no puedo encenderlos de manera seguida porque el PIC deja de funcionar; y en otras ocaciones asi espere ese tiempo ya no responde el PIC, espero ser claro en mi pregunta y gracias de antemano
14/10/2013 #2633


Hola amigo D@rkbytes
Agradezco mucho tu ayuda hice lo que me dijiste y le meti el codigo para mi programa como tu me lo escribiste y todo funcionaba bien excepto que el no leia el portb, como te comentaba desconozco lo referente a editar la palabra de configuracion 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 agradeceria.
Al ver que mi puerto b no lo leia me meti al archivo que me mencionaste y comence a leer un poco y por un golpe de suerte me encontre con la instruccion de PBADEN = OFF PORTB<4:0> pins are configured as digital I/O on Reset, y decidi agregarsela al programa que tu me enviaste y pum funciono mi programa al menos en la simulacion en proteus, espero que funcione fisicamente. Nuevamente te agradezco y pongo como quedo el programa. Saludos y espero me recomiendes donde aprender mas de esto.
Saludos
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 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
D@rkbytes dijo: Ver Mensaje
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:
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
5.- El código que contiene ese archivo deberá ser modificado en la parte que contiene la palabra de configuración.
Por ejemplo, de esta forma:
Có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
        CONFIG OSC = XT, WDT = OFF, PWRT = ON, LVP = OFF, BOREN = OFF
        NOLIST
    endif
        LIST
EEPROM_START    EQU    0F00000h
BLOCK_SIZE    EQU    32
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.INC

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:
IMPORTANTE: Para los dispositivos PIC18, la directiva __ CONFIG ha sido sustituida por la directiva CONFIG.

De esta forma es como he agregado la nueva palabra de configuración al archivo de PBP, 18F4520.INC

Teniendo este detalle en cuenta, no debes tener problema para compilar tu programa con la palabra de configuración.

Suerte.
14/10/2013 #2634
Moderador

Avatar de D@rkbytes

erickp dijo: Ver Mensaje
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
Lo ves, no es tan complicado modificar el archivo con la palabra de configuración que requiera tu programa.
Tan solo tienes que ver para que sirve cada fuse y determinar si lo necesitas activar o no.

En cuanto a aprender más acerca de la palabra de configuración, hay poca información al respecto,
ya que son muchos tipos de PIC los que hay, y varían los nombres que se usan en la palabra de configuración.
El mejor archivo con la explicación es precisamente el que te mencioné, ahí vienen explicados.
En esa carpeta encontrarás los archivos correspondientes *.INC con mucha información del PIC en cuestión.

Saludos.
31/10/2013 #2635


Ayuda para simplificar codigo
Hola quiero hacer una suma de variables, quisiera saber si alguien me puede ayudar para simplificar el codigo lo intente con FOR NEXT pero no me quedo en que estare equivocandome
Lo hice asi:

Código:
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]
aca esta mi codigo completo.

Código:
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
01/11/2013 #2636


Saludos erickp, si pudieses colocar el archivo de la simulacion para buscar una solucion, y ver en que te podemos ayudar seria bueno.! Saludos!
01/11/2013 #2637


xmagdielx dijo: Ver Mensaje
Saludos erickp, si pudieses colocar el archivo de la simulacion para buscar una solucion, y ver en que te podemos ayudar seria bueno.! Saludos!

Hola te nvio las archivos que me pides, cabe señalar que el codigo si funciona, solo quiero depurar esa parte, ya que soy novato en programacion, agradezco tu interes. saludos
Archivos Adjuntos
Tipo de Archivo: rar tecmatdep.rar (78,8 KB (Kilobytes), 47 visitas)
02/11/2013 #2638


adc conversion clock
Hola. A ver si alguien me puede ayudar.
Hice el siguiente código y lo simule en proteus, pero al ponerle 4 mhz en la frecuencia del microcrontrolador, me sale un error de que ADC conversión clock está mal.
El otro problema es. ¿Por qué en la simulación se ven así los displays?
No lo he llevado a cabo a la practica. ¿Me sucederá lo mismo?
Saludos y gracias.
Archivos Adjuntos
Tipo de Archivo: rar ADCSIN7447PIC16F677.rar (92,7 KB (Kilobytes), 49 visitas)
04/11/2013 #2639
Moderador

Avatar de D@rkbytes

erickp dijo: Ver Mensaje
al ponerle 4 mhz en la frecuencia del microcrontrolador, me sale un error de que ADC conversión clock está mal.
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
erickp dijo: Ver Mensaje
El otro problema es. ¿Por qué en la simulación se ven así los displays?
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.
erickp dijo: Ver Mensaje
No lo he llevado a cabo a la practica. ¿Me sucederá lo mismo?
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.
Archivos Adjuntos
Tipo de Archivo: rar 16F677 ADC.rar (25,4 KB (Kilobytes), 48 visitas)
04/11/2013 #2640


D@rkbytes dijo: Ver Mensaje
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.
Hola D@rkbytes:

Como siempre una felicitacion y reconocimento por tu gran ayuda. Te comento que mi pc tiene el windows 7 de 64 bits y por lo que yo se, no puedo compilar si no es con MPASM, ¿habra alguna solucion o necesito definitivamente una maquina de 32 bits?
Saludos y nuevamente gracias por tu gran ayuda a nosotros los novatos.

atte
erickp
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.