Piezas: Calendario de reloj en tiempo real I2C (PCF8563)
El PCF8563 es un reloj / calendario / chip de alarma en tiempo real con interfaz I2C. Esto sería útil en proyectos donde el microcontrolador principal no tiene recursos suficientes para un reloj interrumpido.
Mostramos el PCF8563 usando Bus Pirate después del descanso. Por tiempo limitado, puede obtener su propio Bus Pirate, completamente ensamblado y enviado a todo el mundo, por solo $ 30.
Calendario de reloj en tiempo real PCF8563 (búsqueda de Octopart, $ 1.33). Ficha técnica (PDF).
El diagrama de arriba muestra un circuito desnudo para el PCF8563. Requiere un circuito oscilador externo simple con un cristal de reloj de 32.768khz (Q1). El pin de entrada oscilante necesita un condensador externo (C1, 12pF), pero el pin de salida oscilante ya tiene un condensador interno. C2 es un condensador de desconexión de 0,1 uf para el pin de la fuente de alimentación. La fuente de alimentación puede ser de 1,5 a 5,5 voltios.
La hoja de datos también recomienda un diodo para la entrada de voltaje. No usamos esto en nuestra prueba.
Bus pirata | PCF8563 (número de patilla) |
GND | TIERRA (4) |
MOSI | SDA (5) |
CLK | SCL (6) |
3,3 voltios o 5 voltios | V + (8) |
Vpullup | V + (8) |
Usamos nuestra interfaz serial universal Bus Pirates para demostrar este chip, pero la secuencia de transacciones será la misma para cualquier implementación de microcontrolador. Conectamos el Bus Pirate al PCF8563 como se muestra en la tabla anterior. Configuramos el Bus Pirate para el modo I2C (M, 4) y habilitamos la fuente de alimentación incorporada ("W" mayúscula).
No olvide que necesita resistencias ajustadas en algún lugar del bus I2C. Si está utilizando un Bus Pirate, conecte la entrada Vpullup a la fuente de alimentación del circuito, luego presione p para configurar las resistencias de voltaje (o conecte los puentes de voltaje para el hardware v1a).
Interfaz
I2C> (1)<–Buscar una macro de dirección I2C
Buscando espacio de direcciones I2C de 7 bits.
Dispositivos encontrados en:
0xA2 0xA3
I2C>
La dirección de escritura PCF8563 I2C es 0xa2 y la dirección de lectura es 0xa3. Puede encontrar esto en la hoja de datos o usar la macro de búsqueda Bus Pirate (1) para verificar todas las direcciones posibles.
Direccion | | Nombre de registro | | Bits |
0x00 | control_state_1 | |
0x01 | control_state_2 | |
0x02 | VL_seconds | (0: 6) |
0x03 | minutos | (0: 6) |
0x04 | horas | (0: 5) |
0x05 | dias | (0: 5) |
0x06 | días laborables | (0: 2) |
0x07 | meses | (0: 4) |
0x08 | años | (0: 7) |
(ver datos en la página 6) |
Este RTC tiene 16 registros de un byte que configuran el reloj y configuran / recuperan la hora. Los bytes 0-8, que se muestran en la tabla anterior, contienen información sobre el estado y la hora. Los 7 bytes superiores configuran alarmas, temporizadores y otras funciones avanzadas. Solo apuntaremos a las funciones del reloj.
Los registros son accesibles así como I2C-EEPROM. Escriba valores enviando la dirección de escritura I2C (0xa2), la dirección para comenzar a escribir (0-15) y los bytes de datos para escribir.
Lea los valores de las fichas en dos pasos. Primero use el comando de escritura para posicionar el puntero de lectura, pero no envíe bytes de datos. En segundo lugar, utilice la dirección de lectura (0xa3) para leer bytes desde la posición establecida durante el comando de escritura.
I2C> {0xa2 2 0 30 12 31 1 5 9}
ESTADO I2C
ESCRIBIR: 162 GOT ACK: SÍ <–I2C dirección de escritura (0xa2 = 162)
ESCRIBIR: 2 ENTRAR: SÍ <–Regístrese para empezar a escribir
ESCRIBIR: 0 ENTRAR: SI <–Segundos (0)
ESCRIBIR: 30 GOT ACK: SÍ <–Minutos (30)
ESCRIBIR: 12 GOT ACK: SÍ <–Horas (12 / mediodía)
ESCRIBIR: 31 ENFOQUE: SÍ<–Día del mes (31)
ESCRIBIR: 1 ENTRAR: SÍ <–Día de la semana (1 / domingo)
ESCRIBIR: 5 ENFOQUE: SÍ <–Mes (5 de mayo)
ESCRIBIR: 9 ENFOQUE: SÍ <–Año (09/2009)
CONDICIÓN DE PARADA I2C
I2C>
Establezca la hora escribiendo en los registros 0x02 a 0x08. Los valores se ingresan en formato decimal codificado en binario, con todas las representaciones numéricas de fechas bastante estándar (consulte las páginas de datos 6-9). Establecimos la hora a las 12:30:00 del 31 de mayo de 2009.
Primero envíe una condición de arranque I2C para decirle al chip que escuche su dirección (comando bus pirate {). Luego envíe la dirección de escritura de PFC8563 (0xa2) y establezca el puntero de escritura en el segundo registro (2). Finalmente, escriba 7 bytes de datos en los registros de tiempo en las direcciones 2-8. Finalice la transacción con una condición de parada I2C (comando pirata de bus}).
I2C> {0xa2 2 {0xa3 r: 7}
ESTADO I2C
ESCRIBIR: 162 GOT ACK: SÍ <–Enviar dirección de escritura (0xa2 = 162)
ESCRIBIR: 2 ENTRAR: SÍ <–Establezca el puntero para grabar 2, segundos
ESTADO I2C <–Condición inicial repetida
ESCRIBIR: 163 GOT ACK: SÍ <–Enviar dirección de lectura (0xa3 = 163)
LECTURA GRANDE 7 BITS: <–Leer 7 bytes
17 31 12 31 1 5 9 <–Tiempo: 12:31:17 Domingo 31 de mayo de 2009
CONDICIÓN DE PARADA I2C
I2C>
Configuramos el modo de salida del Bus Pirate en decimal (menú 'o') antes de leer la hora. Esto muestra los valores en el formato decimal más conocido.
Recuperar el tiempo requiere dos pasos. Primero, una transacción escrita parcial establece la ubicación de la memoria para la lectura. Luego, en lugar de enviar algunos datos, envíe una segunda condición inicial ({) y la dirección de lectura PCF8563 I2C (0xa3) para poner el chip en modo lectura. Finalmente lee 7 bytes (r: 7) de los registros 2 a 8. La salida muestra que ha pasado un minuto desde que configuramos la hora.
I2C> {0xa2 2 {0xa3 r: 7}
ESTADO I2C
ESCRIBIR: 162 GOT ACK: SÍ <–Enviar dirección de escritura (0xa2 = 162)
ESCRIBIR: 2 ENTRAR: SÍ <–Configurar el puntero para grabar 2, segundos
ESTADO I2C <–Condición inicial repetida
ESCRIBIR: 163 GOT ACK: SÍ <–Enviar dirección de lectura (0xa3 = 163)
LECTURA GRANDE 7 BITS: <–Leer 7 bytes
34 32 12 31 33 37 9 <–La semana del día (33) y el mes (37) parecen incorrectos
CONDICIÓN DE PARADA I2C
I2C>
A veces, el chip parece devolver resultados inútiles. La salida anterior es en realidad una lectura de tiempo válida, aunque obviamente no es la semana 33 o el mes 37 del año.
Cada registro tiene varias piezas "no importa" (consulte la página de datos en la página 6). En la mayoría de los dispositivos, los bits "sin preocupaciones" siempre se establecen en 0, pero el PCF8563 parece usarlos durante algún tiempo mientras mantiene la capacidad.
Un día de la semana se lee 33, o 0b00100001 en binario. Si ignoramos los 5 bits superiores, obtenemos 0b001, o 1 / Domingo, el día apropiado de la semana. Del mismo modo, ignore las piezas de los tres meses principales (37 = 0b00100101), dando 0b00101 o 5 / May.
¿Te gusta esta publicación? Eche un vistazo a las partes que puede haber pasado por alto. ¿Quieres solicitar una publicación parcial? Deje sus sugerencias en los comentarios.
Joshw dice:
Espero que el suyo sea un ejemplo del uso del bus hacker y la interfaz SPI.
Esta parece ser una mejor manera de leer y escribir para probar si un circuito funciona que incluso un arduino ...
El ads1256 tiene algunas hojas de datos espía duras ... caduca y se queda dormido. Me pregunto cómo sería esto si el chip tuviera varios problemas.Para las cosas básicas, parece útil, pero sin un ejemplo del protocolo necesario en la documentación, como alguien podría adivinar.
Ian Lesnet dice:
@joshw
La página principal de Bus Pirate tiene muchos ejemplos de todos los protocolos:
http://www.buspirate.comConsulte también las últimas enseñanzas:
https://la-tecnologia.com/2009/06/25/how-to-the-bus-pirate-v2-with-usb/hermano dice:
grml - ¡No me gusta la política de ejemplo de nxp!
En TI o Maxim, usted elige su chip y obtiene una muestra en 2 semanas, pero nxp no ofrece muestras a personas que no tienen un acuerdo de venta directa, y todos los distribuidores alemanes no envían muestras o, más bien, es muy difícil. compre estas piezas en pequeñas cantidades en Alemania, sin pagar gastos de envío ridículos.
grrrrrr ...
nebuleca dice:
@hermano
Como máximo puede encontrar DS1307, y otros de la misma serie, con funciones similares. El DS1307 en realidad no tiene una alarma, pero eso se puede llevar a cabo fácilmente por código (con un mayor consumo de energía, supongo). Tiene una buena característica que puede usar fácilmente una celda de botón para almacenar la fecha / hora configurada si la energía principal cae.Me las arreglé para conectar eso con Arduino casi sin idea de lo que estaba haciendo.
tedioso dice:
Soy otro fanático del 1307. Tiene la batería de respaldo (que es realmente asombrosa) y, si no me equivoco, tiene 2 alarmas integradas que puedes configurar. Tengo uno en mi despertador, y es realmente (realmente) agradable poder insertar un reloj y no tener que configurar la hora / fecha ...
hermano dice:
@nebulous: ¡muchas gracias por la sugerencia! - cuando termine mi reloj, serás el primero en ver 🙂
@matt: Gracias también.Gracias
hermanoAgent420 dice:
Futurlec tiene una placa DS1307 ensamblada con respaldo de batería por alrededor de $ 7, ideal para proyectos de entrada.
Agent420 dice:
Oh, olvidé el enlace:
http://www.futurlec.com/Mini_DS1307.shtml