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:

RTC DS1307 I2C with LCD16x2
/*
 *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
//              +----------+  
//      (RST)---+ PB5  Vcc +---(+)-------
//			 ---+ PB3  PB2 +---[TWI/SCL]-
//           ---+ PB4  PB1 +---
//		  (-)---+ GND  PB0 +---[TWI/SDA]-
//              +----------+
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <avr/io.h>
#include <stdio.h>
#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 <stdlib.h>

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

 

 

 

 

 

3 comentários

    • Ravil on 8 Janeiro, 2019 at 18:57
    • Responder

    Project DS1307 RTC with I2C LCD16x2 not compiled in Atmel Studio 7, have error no file
    #include “delay_config.h”, please help

  1. I’m so sorry about delay, you only need the library “delay config.h”, please check your email I has sent you.
    Best Regards

      • Martais on 17 Julho, 2019 at 5:58
      • Responder

      please send “library delay_config.h” in email putuajah11@gmail.com

      Best Regards

Deixe uma resposta

Your email address will not be published.

www.000webhost.com