Author Topic: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE  (Read 57260 times)

0 Members and 1 Guest are viewing this topic.

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #30 on: February 21, 2011, 02:39:56 pm »
he aqui el programa inicial de calculo de 1 segundo.

lo que hace es que cada segundo pone en 1 la linea 4 del puerto B, el pulso dura 100ms

Quote
'#Programa de Reloj Digital
'#Codigo por : Jorge Ramirez
'#estado: Prueba de rutina de calculo de 1 segundo
'#ultima modificacion: 21/02/2011 2:00pm
'#compilado usando COMPILADOR BASIC del programa PIC SIMULATOR IDE v6.83

'todos los puertos son digitales
AllDigital
'osc 4MHz
'configurar Puerto B como salida
TRISB = 0x00
'configurar Puerto A como entrada
TRISA = 0xff

'variables
Dim seg As Byte
Dim blink As Byte
'Dim horas As Byte
'Dim minutos As Byte

'interrupcion por Timer0
'prescaler a 256
'se carga 61 para conseguir desborde cada 49.92ms
'se incrementará en 1 segundo cada 0.9984 segundos
'el error es de 0.16%

'seleccionando reloj interno
OPTION_REG.T0CS = 0
'seleccionando frecuencia de reloj interno de 4MHz
'es indiferente porque usamos reloj externo de cristal
PCON.OSCF = 1
'prescaler asignado a Timer0
OPTION_REG.PSA = 0
'valor de prescaler (1:256)
OPTION_REG.PS2 = 1
OPTION_REG.PS1 = 1
OPTION_REG.PS0 = 1
'se carga el TIMER0 con 61 para conseguir el conteo deseado
TMR0 = 61
'se activan las interrupciones de TIMER0
INTCON.T0IE = 1
'se activan las interrupciones
Enable

'se inicializan variables
seg = 0
RB4 = 0
'lazo principal de programa
'el programa esta indefinidamente en este lazo revisando las variables "seg" y "blink"
loop:

'checando que seg haya llegado a 20 cuentas (aprox 1seg)
If seg = 20 Then
'se cumple el segundo
'limpiar seg para comenzar nuevo conteo
seg = 0
'inicializar conteo de
blink = 0
'enciende led en RB4 mientras blink < 2
'cada desborde es de 50ms
'50ms x 2 = 0.1 segundos dura el blink (pulsos de 100ms de duración
While blink < 2
'levantamos la linea 4 del PuertoB
RB4 = 1
'fin de WHILE
Wend
'Bajamos la linea 4 del PuertoB
RB4 = 0

Endif

Goto loop
End                                               
'seccion de interrupciones
On Interrupt
   'salva las variables de sistema
   Save System
   'incrementa contador de segundo
   seg = seg + 1
   'incrementa contador de pulso
   blink = blink + 1
   'baja la bandera de la interrupcion de TIMER0
   INTCON.T0IF = 0
   'le agrega 61 al TIMER0 para nuevo calculo de segundo aprox
   TMR0 = TMR0 + 61
Resume                                           
N/A

Offline smrenderos

  • MiembrosReales
  • *
  • Posts: 17
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #31 on: February 22, 2011, 11:09:33 pm »
cual es la mejor forma para que el programa autocorrija su error de tiempo?

Agregando un retardo en la subrutina de la interrupcion para complementar a los 0.9984 segundos que calculaste para generar 1 seg.

Tomando como base el analisis que hiciste para calcular el valor del TRM0, hice este programa en mikroC:
Code: [Select]
/*  Nombre de programa: Reloj Digital v0.1
    Autor: SvCommunity [smrenderos]
    Descripcion: Calculo de un segundo, se genera un conteo en el PuertoB
    Microcontrolador: PIC16F627
    Oscilador: XT, 04.0000 MHz
    Software: mikroC v8.2  */

unsigned contador=0x00;
void interrupt() {
  contador++;
  TMR0 = 61;
  INTCON = 0x20;
}
void main(){
  int temp=1;
  CMCON = 0x07;
  PCON.OSCF = 1;
  OPTION_REG = 0x07;
  TRISB = 0;
  PORTB = 0x00;
  TMR0 = 61;
  INTCON = 0xA0;
  while(1) {
      if (contador == 20) {
         PORTB += 0x10;
         if (PORTB >= 0xA0) {
            PORTB = temp++;
            if (temp == 0x06)
               temp=0;
         }
         contador = 0;
      }
   }
}

Simulandolo en proteus es visible el error a un determinado tiempo..


Haciendo el ajuste que comente, realizo un retardo de 70us dentro de la funcion de interrupcion:
Code: [Select]
unsigned contador=0x00;
unsigned rutina=0x00;
void interrupt() {
  contador++;
  asm {
    movlw  7
    movwf  rutina
    retardo10:
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    decfsz rutina,F
    goto retardo10
  }
  TMR0 = 61;
  INTCON = 0x20;
}

Se obtiene algo mejor :yahoo: aunque siempre hay error..


Nota: el retardo ideal tiene que ser 1-0.9984 que son 1.6ms pero cuando realice la prueba con este valor (cargando la variable rutina con un valor decimal de 160) el reloj de simulacion de proteus se adelanta 1 segundo a los 5 minutos con respecto de nuestro conteo :-/, me imagino que es por el pequeño retraso que lleva el motor de simulacion. Haciendo pruebas obtuve el retardo de 70us.

Les dejo el link con el archivo del proyecto(mikroC v8.2) y la simulacion(Proteus 7.6 SP4), tambien un archivo txt con los link para descargar los programas :thumbsup:

http://www.megaupload.com/?d=LXIDIZ5P

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #32 on: February 22, 2011, 11:28:50 pm »
juela   :)

que nice.

fijate que corregi el retardo haciendo este calculo

Reloj = XT
Fosc = 4MHz
F = 4MHz/4 = 1MHz -> 1uS

preescaler de 1:4

cada conteo de TIMER0 = 4uS
Cada desborde de TIMER0 = 4us x 256 = 1024us

si queremos interrupciones cada 1000us:
1024us - X = 1000us
x = 24us
Cuentas a sumar = 24us / 4us = 6 cuentas (a pre-sumar a TIMER0)

cada desborde es de 1ms (1000us)

1S / 1mS = 1000 Conteos

variable a declarar debe ser WORD para poder contar mas de 255

asi resolvemos el problema del error de 1 segundo

@SMRENDEROS.
quebrate vos tu programa en MikroC y yo lo voy a hacer en BASIC y vemos las diferencias.
cuando actualize el código lo subo  :drinks:

PS:
la simulacion del PROTEUS no la senti del todo tiempo real.
creo que lo mejor será continuar asumiendo que la rutina de calculo del segundo esta bien y seguir con el resto del programa, ya cualquier ajuste creo que se puede hacer ya teniendo armado el circuito en la vida real
« Last Edit: February 22, 2011, 11:50:22 pm by naruto »
N/A

Offline smrenderos

  • MiembrosReales
  • *
  • Posts: 17
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #33 on: February 23, 2011, 01:06:02 am »
preescaler de 1:4

cada conteo de TIMER0 = 4uS
Cada desborde de TIMER0 = 4us x 256 = 1024us

si queremos interrupciones cada 1000us:
1024us - X = 1000us
x = 24us
Cuentas a sumar = 24us / 4us = 6 cuentas (a pre-sumar a TIMER0)

cada desborde es de 1ms (1000us)

1S / 1mS = 1000 Conteos

variable a declarar debe ser WORD para poder contar mas de 255

asi resolvemos el problema del error de 1 segundo
...  :thumbsup:

tambien:
preescaler de 1:8
TMR0 inicializado con 6 para generar 2ms con cada desbordamiento
500 conteos

disculpa mi ignorancia pero empiezo con C para micros, solo habia programado en ensamblador, pura programacion orientada a byte (hablo de micros con registros de 8 bit). Como genera Basic o C una variable con datos mayor a 255 y en mikroC que tipo de variable es?
 

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #34 on: March 02, 2011, 02:11:40 pm »
avances de mi programa en BASIC
Code: [Select]
'#Programa de Reloj Digital
'#Codigo por : Jorge Ramirez
'#estado: Prueba de rutina de calculo de 1 segundo
'#ultima modificacion: 02/03/2011 2:00pm
'#compilado usando COMPILADOR BASIC del programa PIC SIMULATOR IDE v6.83

'todos los puertos son digitales
AllDigital
'osc 4MHz
'configurar Puerto B como salida
TRISB = 0x00
'configurar Puerto A como entrada
TRISA = 0xff

'variables
Dim mseg As Word
Dim segundos As Byte
'Dim blink As Byte
Dim horas As Byte
Dim minutos As Byte

'interrupcion por Timer0
'prescaler a 8
'se carga 6 para conmseguir desborde cada 2ms


'seleccionando reloj interno
OPTION_REG.T0CS = 0
'seleccionando frecuencia de reloj interno de 4MHz
'es indiferente porque usamos reloj externo de cristal
PCON.OSCF = 1
'prescaler asignado a Timer0
OPTION_REG.PSA = 0
'valor de prescaler (1:8) (0-1-0)
OPTION_REG.PS2 = 0
OPTION_REG.PS1 = 1
OPTION_REG.PS0 = 0
'se carga el TIMER0 con 6 para conmseguir el conteo deseado
TMR0 = 6
'se activan las interrupciones de TIMER0
INTCON.T0IE = 1
'se activan las interrupciones
Enable

'se inicializan variables
mseg = 0
RB4 = 0
segundos = 0
minutos = 0
horas = 0

'lazo principal de programa
'el programa esta indefinidamente en este lazo revisando las variables "mseg"
loop:

'checando que mseg haya llegado a 500 cuentas (1segundo)
If mseg = 500 Then
'se cumple el segundo
'limpiar mseg para comenzar nuevo conteo
mseg = 0
'####### ETAPA DE CONTROL DE VARIABLES DE TIEMPO #######
segundos = segundos + 1
If segundos = 60 Then
'inicia nueva cuenta de segundos
segundos = 0
'aumenta minutos en 1
minutos = minutos + 1
If minutos = 60 Then
minutos = 0
'aumenta horas en 1 (horas formato 24)
horas = horas + 1
If horas = 24 Then
'reinicia horas
horas = 0
Endif
Endif
Endif
'####### ETAPA DE CONTROL DE VARIABLES DE TIEMPO #######

'####### ETAPA DE DESPLIEGUE DE HORA ####
'-- escriba despliegue de hora aqui --
'####### ETAPA DE DESPLIEGUE DE HORA ####

Endif

Goto loop
End                                               
'seccion de interrupciones
On Interrupt
'salva las variables de sistema
Save System
'incrementa contador de msegundo
mseg = mseg + 1
'baja la bandera de la interrupcion de TIMER0
INTCON.T0IF = 0
'le agrega 6 al TIMER0 para nuevo calculo de msegundo aprox
TMR0 = TMR0 + 6
Resume                                           



Hasta el momento se ha agregado el calculo de horas, minutos y segundos, éstos se van guardando en variables e incrementando en base al calculo del segundo.

les debo la simulacion
« Last Edit: March 02, 2011, 02:17:32 pm by naruto »
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #35 on: March 04, 2011, 12:46:48 pm »
hey todavia hay gente que nos sigue con este volado?


tomando en cuenta la sugerencia de smrenderos puse el preescaler de 1:8 ( es igual que ponerlo de 1:4 y contar 1000 veces pero lo cambie a su sugerencia para que vean que hay muchas formas de resolver el problema)

explicación:

Reloj = XT
Fosc = 4MHz
F = 4MHz/4 = 1MHz -> 1uS

preescaler de 1:8

cada conteo de TIMER0 = 8uS
Cada desborde de TIMER0 = 8us x 256 = 2048us = 2.048ms

si queremos interrupciones cada 2000us = 2ms
2048us - X = 2000us
X = 2048us - 2000us = 48us
Cuentas a sumar = 48us / 8us = 6 cuentas (a pre-sumar a TIMER0)

cada desborde es de 2ms (2000us)

1S / 2mS = 500 Conteos

variable a declarar debe ser WORD para poder contar mas de 255

asi resolvemos el problema del error de 1 segundo



Por cierto, la lógica de cálculo de tiempo que usó (~) es la misma que use yo.

usando horario de 24 horas (no "am" ni "pm", mas fácil de programar)
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #36 on: March 29, 2011, 11:35:33 pm »
actualizando el tema.

ya probe el codigo para convertir el valor BINARIO a BCD en DOS DIGITOS
por ejemplo

en las variables

horas, minutos y segundos llevamos los valores actuales de las respectivas variables de tiempo.

pero para desplegar horas necesitamos 2 displays asi tambien para los minutos

un ejemplo de la conversion seria:

minutos contiene 45
en binario es %00101101

pero necesitamos tener el numero 4 en un display y el 5 en otro, y no se puede simplemente agarrar de 4 en 4 los bits del numero binario, no funciona asi.

los procesos matematicos a seguir son los siguientes

se divide el valor entre 10, asi tendremos el valor correspondiente a las decenas de la parte entera de la division
45/10 = 4.5 -> cuya parte entera es 4


se opera el valor con MOD 10 para obtener el RESIDUO de la division del valor entre 10
45 MOD 10 = 5 -> obtenemos directamente las unidades en base 10

en el codigo mostrado en este post, despliego el valor de las unidades de la respuesta BCD en la parte baja del puerto B y el resultado de las decenas en la parte alta del Puerto B

en la simulacion use unos displays que ya vienen decodificados para aceptar BCD (en nuestro circuito final usaremos decodificadores de BCD a 7 segmentos (el 74LS48)


Adjunto a este post:

Paquete zip con archivos de codigo y simulacion
- archivo de simulacion para usar con el software PROTEUS
- archivos de codigo creados y generados con el software PIC SIMULATOR IDE V6.83
Code: [Select]
http://www.mediafire.com/?c8w3w6b2wlya3pz
Codigo Basic para compilar con PIC SIMULATOR IDE  v6.83 (ya contenido en el zip adjunto)
Code: [Select]
'#Programa de Reloj Digital
'#Codigo por : Jorge Ramirez
'#estado: Prueba de rutina de calculo de 1 segundo
'#ultima modificacion: 29/03/2011 11:00pm
'#compilado usando COMPILADOR BASIC del programa PIC SIMULATOR IDE v6.83

'todos los puertos son digitales
AllDigital
'osc 4MHz
'configurar Puerto B como salida
TRISB = 0x00
'configurar Puerto A como entrada
TRISA = 0xff

'variables
Dim mseg As Word
Dim segundos As Byte
'Dim blink As Byte
Dim horas As Byte
Dim minutos As Byte
Dim numhigh As Byte
Dim numlow As Byte
Dim aux As Byte
Dim aux2 As Byte

'interrupcion por Timer0
'prescaler a 8
'se carga 6 para conmseguir desborde cada 2ms


'seleccionando reloj interno
OPTION_REG.T0CS = 0
'seleccionando frecuencia de reloj interno de 4MHz
'es indiferente porque usamos reloj externo de cristal
PCON.OSCF = 1
'prescaler asignado a Timer0
OPTION_REG.PSA = 0
'valor de prescaler (1:8) (0-1-0)
OPTION_REG.PS2 = 0
OPTION_REG.PS1 = 1
OPTION_REG.PS0 = 0
'se carga el TIMER0 con 6 para conmseguir el conteo deseado
TMR0 = 6
'se activan las interrupciones de TIMER0
INTCON.T0IE = 1
'se activan las interrupciones
Enable

'se inicializan variables
mseg = 0
RB4 = 0
segundos = 0
minutos = 0
horas = 0

'lazo principal de programa
'el programa esta indefinidamente en este lazo revisando las variables "mseg"
loop:

'checando que mseg haya llegado a 500 cuentas (1segundo)
If mseg = 500 Then
'se cumple el segundo
'limpiar mseg para comenzar nuevo conteo
mseg = 0
'####### ETAPA DE CONTROL DE VARIABLES DE TIEMPO #######
segundos = segundos + 1
If segundos = 60 Then
'inicia nueva cuenta de segundos
segundos = 0
'aumenta minutos en 1
minutos = minutos + 1
If minutos = 60 Then
minutos = 0
'aumenta horas en 1 (horas formato 24)
horas = horas + 1
If horas = 24 Then
'reinicia horas
horas = 0
Endif
Endif
Endif
'####### ETAPA DE CONTROL DE VARIABLES DE TIEMPO #######

'####### ETAPA DE DESPLIEGUE DE HORA ####
'-- escriba despliegue de hora aqui --
'guardo variable segundos por una posible interrupcion
aux = segundos
'llamamos rutina de convertir a bcd las unidades
numlow = tobcdl(aux)
'hacemos una mascara al PORTB para obtener su nibble alto
aux2 = %11110000 And PORTB
'unimos el nibble alto de PORTB con el bajo de numlow
'-> para formar el nuevo valor de PORTB
PORTB = aux2 Or numlow

'llamamos rutina de convertir a bcd las decenas
'(el valor ya viene en el nibble alto)
numhigh = tobcdh(aux)
'mascara para capturar el nibble bajo de PORTB
aux2 = %00001111 And PORTB
'unimos el nibble bajo de PORTB con el alto de numhigh
PORTB = aux2 Or numhigh
'####### ETAPA DE DESPLIEGUE DE HORA ####

Endif

Goto loop
End                                               

'##### seccion de Funciones
Function tobcdl(decn As Byte) As Byte
tobcdl = decn Mod 10
End Function                                     

Function tobcdh(decn As Byte) As Byte
aux = decn / 10
tobcdh = ShiftLeft(aux, 4)
End Function                                     


'##### seccion de interrupciones
On Interrupt
'salva las variables de sistema
Save System
'incrementa contador de msegundo
mseg = mseg + 1
'baja la bandera de la interrupcion de TIMER0
INTCON.T0IF = 0
'le agrega 6 al TIMER0 para nuevo calculo de msegundo aprox
TMR0 = TMR0 + 6
Resume                                           

Codigo para facil lectura

« Last Edit: March 29, 2011, 11:42:37 pm by naruto »
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
« Last Edit: September 11, 2011, 04:53:45 pm by naruto »
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #38 on: March 31, 2011, 11:21:31 pm »
ahora con respecto a las opciones que tendra el relojito.

originalmente es solo para dar la hora, pero como es programa y el firmware(osea el programa que controla el funcionamiento) puede actualizarse, seria bueno dejar los controles del reloj listos para un posible upgrade de codigo y funcionalidades

los controles que propongo son los siguientes:

RA2 -> (INPUT) Function / Edit  {F/E}
RA3 -> (INPUT) Selection / Change   {E/C}
RA4 -> (OUTPUT) a un led

dejo libres RA0 y RA1 porque son entradas analogicas y podrian servir para en un futuro agregarle un sensor de temperatura y que nuestro reloj despliegue la temperatura ambiente.

el funcionamiento lo he imaginado asi


   
Nomenclatura:

{} BOTON
()  ACCION
-*:  El asterisco indica que si se presiona el mismo ejecuta la accion y se queda en el mismo estado,
-F/E: Funcion / Edicion
-E/C: Seleccion/Cambio 
-IDLE:   fuera de opciones, desplegando la ultima opcion seleccionada, lo mas comun, la hora
-F1:   Seleccion Configurar Tiempo (hh:mm)
-F2:   Seleccion Configurar Alarma  (hh:mm)
-Fn:   Seleccion Cualquier funcion extra que pudiera agregarse
-ET:   Modo configuracion de Tiempo
-EH:   Modo configuracion de HORAS
-EMD:   Modo configuracion de LAS DECENAS DE LOS MINUTOS
-EMU:   Modo configuracion de LAS UNIDADES DE LOS MINUTOS
-EHu:   Cambio de HORAS hacia ARRIBA
-EMDu:   Cambio de LAS DECENAS DE LOS MINUTOS hacia ARRIBA
-EMUu:   Cambio de LAS UNIDADES DE LOS MINUTOS hacia ARRIBA
-Fx:   Funcion siguiente al estado en que se encuentre
   
hijole talvez me entienden, me pegue una fumadita para inventarme ese flujo de comandos, y otra media hora para hacerles el muñequito del diagrama de flujo
« Last Edit: March 31, 2011, 11:45:00 pm by naruto »
N/A

Offline smrenderos

  • MiembrosReales
  • *
  • Posts: 17
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #39 on: April 01, 2011, 01:21:24 am »
Excelente  :thumbsup:

Hasta ayer me puse de nuevo con esto, hay un problema con la simulacion del circuito final en proteus.
Se congela cuando se realiza el barrido de display a la frecuencia propuesta(10Hz), ya no digamos si lo hacemos a una frecuencia estandar como 60Hz.

Realice la prueba con la idea de formar el numero 5 5 5 5 en los cuatro display a 50Hz y se congela, asi que tendriamos que realizar de aqui en adelante pruebas con el circuito fisico.



Dejo el link del archivo:
http://www.megaupload.com/?d=P779YL9B

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #40 on: April 10, 2011, 12:57:50 pm »
Se simulo el circuito con los 4 displays tomando en cuenta los siguientes parametros para la simulacion:

• Se aumento la velocidad del tiempo
• Se disminuyo la frecuencia de barrido del despliegue en los displays
• Se precargo horas con 23 y minutos con 58 para verificar el apropiado calculo.

aun asi, el simulador no podia con los calculos despues de cierto tiempo.

Simulation proteus clock - 7 segment display using pic

les debo el codigo
« Last Edit: September 11, 2011, 04:56:12 pm by naruto »
N/A

Offline webo_09

  • The Communiter-
  • *
  • Posts: 1034
  • Heart Breakers And Life Takers
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #41 on: April 10, 2011, 01:07:05 pm »
Uta muy interesante el tema y fumado a la vez  x_x felicidades naruto con temas asi da gusto entrar a la comunidad, ya le voy a decir a mi hermano que me explique la mitad del tema XD

Segui asi viejo


Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #42 on: April 11, 2011, 02:10:19 pm »
gracias webo_09

Resulta que yo de rato en rato tengo que poner a prueba mis conocimientos y me da de hacer proyectos asi, normalmente los hago para mi mismo o simplemente los muestro ya terminados y no digo como los hice.

Para que todos aprendamos un poco estoy compartiendo un poco de mis conocimientos con este pequeño proyecto, tomando en cuenta sugerencias de ustedes y explicando hasta donde se puede lo que aqui se crea.

Comentarios sobre el avance del proyecto:

una limitacion que no me gusta es el uso del integrado 7448 (decodificador de BCD a 7 segmentos)
el uso de este integrado tiene PROs y CONTRAS

PRO:
se usan solo 4 lineas para desplegar caracteres en los displays, distintas a las 7 lineas que se ocuparian si se controlaran los displays directamente en paralelo.

CONTRAS: estamos limitados al set de digitos y caracteres que el 7448 despliega (0-9 y unos caracteres sin sentido)
no podemos escribir letras ni otro caracter.

FUTURA MODIFICACION:
usar un SHIFT REGISTER para enviar los datos de los 7 segmentos de forma serial, en este caso solo se usaran 2 lineas, la de datos y la de reloj,
 - Ventajas: Nos ahorramos MAS LINEAS (2 mas que con el uso del 7448) y tenemos la posibilidad de controlar cada segmento de cada display, asi podriamos desplegar animaciones, letras, numeros, etc, solo nos limitaria nuestra imaginacion y el programa.

Como funciona un SHIFT REGISTER?


Un shift register va desplazando por sus lineas de salida el dato en la linea de entrada en cada pulso de reloj que recibe, asi podriamos enviar 8 datos en serie y al final del 8vo pulso, tendriamos el valor final presente en las salidas.



como ya compre el 7448 esa opcion usare para armar el circuito, luego hare la version 2 con el shift register y desplegando palabras en los displays
« Last Edit: April 11, 2011, 02:11:53 pm by naruto »
N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #43 on: April 14, 2011, 05:08:17 pm »
solo quiero ponerle el sello apropiado al proyecto.

El dia de hoy se dió a conocer el nuevo logo de

OPEN SOURCE HARDWARE

y este proyecto cae en esta categoria


N/A

Offline Jaru

  • The Communiter-
  • *
  • Posts: 13252
  • some text
Re: [PROYECTO COMUNO] DISEÑEMOS UN RELOJ DIGITAL - OPEN SOURCE
« Reply #44 on: April 19, 2011, 02:03:32 pm »
otro mod de este proyecto será usar un LCD grafico en lugar de displays de 7 segmentos.
se hara con la libreria de LCD GRAFICOS del MikroC para PIC
se usará un LCD de un NOKIA 3310 (monocromo)



CAR Meter with ATMEGA8 and NOKIA 3310 LCD

« Last Edit: September 11, 2011, 04:56:30 pm by naruto »
N/A