Relógio DS1307 i2c ATtiny85 PCF8574+LCD16x02 (HD44780)

Olá,
Neste artigo vamos demonstrar o funcionamento de um relógio com comunicação USI I2C utilizando o pequeno ATtiny85.
O projecto montado numa placa PCB fica compacto, pois com o uso do ATtiny85 com apenas 8 pinos é interessante, no entanto no video que aprestamos abaixo esta em prototipo.
Para este trabalho vamos precisar de:

O esquema de ligações será igual ao apresentado nesta imagem:

RTC DS1307_I2C

A comunicação é baseada em USI I2C, usei as bibliotecas de um projecto interessante
O Tinusaur.org que recomendo que acompanhem, pois usa-se o pequeno ATtiny85 para vários projectos.
No entanto o projecto Tinusaur não aborda o uso de LCD, por essa razão tive de desenvolver a adaptação para com o uso do PCF8574 conseguir apresentar o relógio no LCD, como podem verificar neste video:

Vejam também a simulação em Proteus:

No entanto entanto já sabem que sou fiel ao AVR Studio7, então, como programar o Attiny85?
Se quase todas as publicações explicam como programar com arduino, e como será programar sem arduino?
Este artigo fica no ar dependente d eum outro artigo que se ligará a este do qual falarei como configurar um ATtiny85 no AVR Studio sem recurso ao Arduino, para isso desenvolvi uma placa muito simples, conforme imagem da qual explicarei no próximo artigo:

USB ASP ATtiny

Fica para breve o artigo a explicar como tudo acontece 🙂

Um pouco de codigo do main:

/*
*I2C RTC DS1307 AT24C32
*Author: Norlinux | adapted from the Tinusaur Project
*http://www.microelectronic.pt
*https://www.facebook.com/MundoDosMicrocontroladores/
*http://maquina.96.lt
*Released under GPLv3.
*Please refer to LICENSE file for licensing information.
*which can be found at http://www.gnu.org/licenses/gpl.txt
*/
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ATtiny
// 25/45/85
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <avr/io.h>
#include
#include "delay_config.h"
#include <util/delay.h>
#include "USI-I2C/usi_i2c_lcd.h"
#include "USI-I2C_ATtiny/usitwim.h"
#include "USI-DS1307/ds1307tiny.h"
#include
uint8_t ds1307_adjust(void)
{
return ds1307_setdatetime(2018, 05, 18, 5, 20, 34, 00); // Set date/time
}
int main(void)
{
char Horas[16],Data[16];
//uint8_t relogio=0;
//init lcd
USI_LCD_Init();
ds1307_init();
ds1307_adjust();
_delay_ms(10);
while (1)
{
uint8_t year = ds1307_read_reg8(DS1307_REG_YEAR);
uint8_t month = ds1307_read_reg8(DS1307_REG_MONTH);
uint8_t date = ds1307_read_reg8(DS1307_REG_DATE);
uint8_t hours = ds1307_read_reg8(DS1307_REG_HOURS);
uint8_t minutes = ds1307_read_reg8(DS1307_REG_MINUTES);
uint8_t seconds = ds1307_read_reg8(DS1307_REG_SECONDS);
sprintf(Horas,"%02d:%02d:%02d",bcd2bin(hours), bcd2bin(minutes), bcd2bin(seconds));
USI_LCD_gotoxy(0,0);
USI_LCD_Text(Horas);
sprintf(Data,"%04d-%02d-%02d",bcd2bin(year) + 2000, bcd2bin(month), bcd2bin(date));
USI_LCD_gotoxy(0,1);
USI_LCD_Text(Data);
USI_LCD_LED_ONOFF(LED_ON);
_delay_ms(999);
USI_LCD_LED_ONOFF(LED_OFF);
}
}

As bibliotecas do projecto estão disponíveis neste link

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s