Puede que si, pero hay razones logicas para usar un cristal para el reloj.
Una de ellas es que los relojes de cuarzo usan un cristal sintonizado a 32768 Hz que equivale a 215 Hz, el cual es al dividirlo en un contador de 215 se obtiene exactamente un segundo, ademas que a esas frecuencias el consumo de energia de el circuito es mas bajo.
Asi que la mejor idea para este circuito seria: Usar el cristal para obtener el tiempo de referencia, y usar el oscilador interno r-c para las operaciones internas de el microcontrolador. Unos cktos que andan en el internet usan el esquema que estoy describiendo. Ademas de la tolerancia de el cristal le agrega mas precision.
solo para aclarar algunas cosas.
cuando usas un microcontrolador, podes usar la misma fuente de oscilacion para todo.
Como dice Vlad, pueda que la presicion del circuito RC interno sea "no tan exacta" como la de un cristal, de todos modos, a la hora de hacer el software, van a ver que para conseguir los cálculos de un segundo tambien se introduce un pequeño error (segun mi ultimo cálculo de al rededor de 0.16%, mas adelante les pongo el programa y la lógica)
en realidad para que no hayan dudas voy a usar un cristal de 4Mhz que es mas que suficiente para un reloj simple.
en mi opinion me hubiese interesado mas por un proyecto de robotica, algo asi como un brazo mecanico programable
eso del reloj es muy simplista pero es solo mi opinion
[youtube]4E052SKE28Q[/youtube]
si me dice que me lo patrocina usted, podremos entrar en pláticas

ey viejo esta super interesante esto pero tengo una gran duda con que pensas hacer la coneccion del programa al hardware porke yo antes use un logo o usaba una onda que no me acuerdo como se llama o sera que no entendi bien esta onda
talvez algunos no entienden el concepto de un microcontrolador aun.
un microcontrolador es una minicomputadora (olvidense de su case, monitor teclado y mouse)
es un CPU, que ya tiene memoria, puertos de comunicacion y modulos internos de procesamiento especial, todo eso en un pequeño chip, el cual; a traves de una interfaz especial (programador o quemador de microcontrolador) se conecta a una computadora donde se genera, compila y graba el programa hacia el chip microcontrolador.
la conexion del programador a la PC puede ser por puerto serial, paralelo, USB, etc.
el programador que yo tengo en especial es por puerto serial, para cuando lo hice (hace como 5 años, era lo mas fácil de fabricar y barato)
Belcboo anda mas en la jugada porque asi como el lo describe, se necesita un programador como anteriormente se describió para hacer que estos chips funcionen como queramos.
ahorita vamos a comenzar con algo "simple" como un reloj digital, donde la mayor parte de procesamiento y calculos de tiempo se hacen en SOFTWARE.
NOTA: ESTE RELOJ ES UN CIRCUITO INDEPENDIENTE, NO ESTA HECHO PARA ESTAR CONCETADO CON LA PC SIEMPRE, SOLO CUANDO SE PROGRAMA.
imaginense un DVD regrablable, ustedes solo lo "conectan" a la PC ciuando le van a meter informacion, y luego ya grabado (digamos una pelicula) lo sacan y lo usan aparte con su reproductor de dvd.
el microcontrolador, una vez grabado, se conecta al circuito para que cumpla su funcion de control y cálculos.
smrenderos parace el mas experimentado con esto de los PICs
-justo con proteus iba a simular el circuito completo.
-en lugar de ensamblador o C, estoy usando un compilador BASIC (usando el programa PIC SIMULATOR IDE), esta sera la primera parte, luego usando MikroC se puede reescribir el programa para pasarlo a lenguaje C
-la configuracion de pines que has puesto es justo como la habia planeado.
puerto B: selector de display y decoder
puerto A: control de hora
.......
voy a adelantar algo del programa:
El pic consta de registros internos que sirven para controlar, configurar y obtener informacion del mismo.
escribiendo en estos registros, podemos configurar la operacion del PIC, o podemos obtener informacion de su estado actual al momento de revisión.
tiene un registro de 8 bits llamado TIMER0, el cual esta constantemente contando durante el programa este en ejecución, no importa que este haciendo tu programa, el TIMER0 siempre esta contando, cuando llega al limite (255) se reinicia y asi sigue.
hay otro concepto en programacion que se llama INTERRUPCIONES, que son eventos relativamente ajenos a tu programa que desvian el curso del mismo en cualquier momento que éstas se den, hacia otra parte de ejecución de código.
el PIC tiene manejo de INTERRUPCIONES, y una de ellas es el desborde de cuenta de TIMER0, es decir, cuando TIMER0 llegue al limite y pase de nuevo a CERO, se activa la interrupcion de este registro, se salta a una zona de manejo de interrupciones, se revisa si fué el TIMER0 el cual generó la interrupcion, EN ESTE PUNTO SE EJECUTA EL CÓDIGO NECESARIO (por ejemplo incrementar un contador) limpiar la bandera de la interrupción y se regresa automaticmente desde donde el programa saltó cuando se generó la interrupcion.
USANDO UN CRYSTAL para generar la frecuencia de operación del microcontrolador, el TIMER0 incrementa en uno cada ciclo de programa.
y cada ciclo de programa es 1/4 la frecuencia del oscilador
Si usamos una frecuencia de 4MHz
F = 4Mhz/4 = 1Mhz
es decir incrementa en 1 cada 1us (1/1Mhz)
Si se genera una interrupción en cada desborde del TIMER0, significa que entre una interrupcion y otra pasaran 256 x 1us = 256us
pero nosotros queremos que nuestros eventos sucedan cada segundo (como incrementar el conteo del reloj)
Hay otro registro del PIC donde se puede PRE-ESCALAR el TIMER0, es decir, hacerlo mas lento.
las escalas van de 1:1, 2:1, 4:1, 8:1 ... 256:1 (en potencias de 2)
es decir, EL MAXIMO TIEMPO que podemos obtener entre una interrupcion y otra (para 4Mhz de Cristal) es
256us x 256 = 65.536ms
ese es un valor no muy practico para nuestra base de tiempo.
que tal si hacemos que cuente en intervalos de 50ms, asi podemos acumular un contador y a las 20 interrupciones de 50ms estaremos obteniendo 1 segundo (50ms x 20 = 1segundo)
pero con el simple pre-escaler no podemos hacer que desborde cada 50ms.
lo que se puede hacer es ESCRIBIR UN VALOR en el TIMER0 para que cuando empieze a contar, ya tenga cargada una cantidad y asi FORZARLO a que cuente menos veces, logrando obtener el tiempo que queremos.
pero que valor le cargamos?
asi:
65.536ms - 50ms = 15.536ms
cuantos conteos de TIMER0 hay en 15.536ms ?
si un conteo ( con pre-escaler de 256 y Cristal de 4MHz) es de: 256us entonces
en 15.536ms hay 15.536ms/256us) = 60.6875 conteos, como los conteos son enteros APROXIMAMOS al valor mas cercano y obtenemos 61
es decir, antes de habilitar las interrupciones le cargamos 61 al TIMER0, con un pre-escaler de 256 y aproximadamente en 49.9ms obtendremos una interrupcion, en la interrupcion aumentamos en 1 nuestro contador del programa (el que contara hasta 20) y de nuevo le sumamos 61 al TIMER0 antes de salir de la rutina de INTERRUPCION, asi para la próxima interrupción le tomara al TIMER0 otros 49.9ms generar una interrupcion nueva y aumentar nuestro contador, para que cuando nuestro contador llegue a 20 habremos calculado 1 segundo (aproximadamente)
calculemos el porcentaje de error con este procedimiento:
256-61 = 195 conteos hara para desbordarse
195 x 256us = 49.920ms tomara entre desborde y desborde
49.920 x 20 (que es lo que contaremos) = 0.9984 segundos (en realidad no estaremos calculando 1 segundo si no 0.9984 segundos.
entonces el porcentaje de error queda:
((1-0.9984)/1) x100 = 0.16% de error que en ingenieria es un error aceptable

y TODO LO ANTERIOR solo para calcular 1 segundo en el programa

jueee ya no me acordaba como usar el timer0 y el preescaler, casi que me tomo 1 hora ir a leer y ver ejemplos para acordarme como manipularlo y hacerlo contar lo que uno quiera
que chivos estos volados