Ir ao conteúdo

Configuracao DS1307


linikersoares

Posts recomendados

Postado

Boa noite a todos,

estou desenvolvendo projeto de tcc baseado em um relogio holografico, feito com vetor de leds, pensei em usar o RTC ds1307 para atualizar as horas para mim, porém nao estou conseguindo configura-lo adequadamente ao meu projeto preciso da ajuda de voce

ps:uso compilador pic C linguagem ccs.

obg

Postado

MatheusLPS, eu tomei por base neste topico, porém creio para meu programa sera um pouco diferente, eu cheguei a fazer o mesmo procedimento definir os pinos para a comunicao I²c, inicializei a biblioteca, mandei ler as horas e depois capturei a mesma, so que quando ponho pra rodar fica tudo em 00:00:00 e sempre que os segundos vão a 59 ele 0 e nao incrementa nos minutos fazendo assim minha programacao ficar "maluca" o que sera que deve estar acontecendo?

segue a programacao:



#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
//#FUSES RESERVED //Used to set the reserved FUSE bits

#use delay(clock=4000000)
#use fast_io(B)
#include <DS1307.c>
#define RTC_SDA PIN_A0
#define RTC_SCL PIN_A1
#define BOTAO1 PIN_a2 //Boto de escolha de ajuste das funcoss.
#define BOTAO_INCREMENTO PIN_a3 //Boto incremento de variveis.
#define sensor PIN_b0
#byte porta = 0x05
#byte portb = 0x06
unsigned int hr,min,sec;
//int apagado = 0; //apagado
int a;
int n;
//int hr=23;
//int min=20;
//int sec=90;
int dezena, unidade, digito;
int16 q=0,j=0;
int contador=0;
int dia=21; //Variável dos dias do mês. 0 a 31.
int mes=10;
int ano=12;
int16 tempo;

//Arquivo graphics.c (adaptado do próprio ccs)
/////////////////////////////////////////////////////////////////////////
//// Defines a 5x7 font
/////////////////////////////////////////////////////////////////////////
const unsigned char table[11][5] = {
//__________________________________________________________
0b00111100,0b01100010,0b01010010,0b01001010,0b00111100,//0 1
0b01001000,0b01000100,0b01111110,0b01000000,0b01000000,//1 2
0b01000100,0b01100010,0b01010010,0b01001010,0b01000100,//2 3
0b00100010,0b01000010,0b01001010,0b01011010,0b00100110,//3 4
0b00011000,0b00010100,0b00010010,0b01111110,0b00010000,//4 5
0b00101110,0b01001010,0b01001010,0b01001010,0b00110010,//5 6
0b00111100,0b01010010,0b01010010,0b01010010,0b00100100,//6 7
0b00000010,0b01100010,0b00010010,0b00001010,0b00000110,//7 8
0b00110100,0b01001010,0b01001010,0b01001010,0b00110100,//8 9
0b01001100,0b01010010,0b01010010,0b01010010,0b00111100,//9 10
0x00, 0x00, 0x28, 0x00, 0x00};//11
const int8 FONT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x04, 0x02, 0x7F, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R

const int8 FONT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~
/////////////////////////////////////////////////////////////////////////
#int_TIMER1
void temp1s(void){
tempo++;
q++;

if (tempo==2);//passou 1 segundo
{
j++; //incrementa variavel de controle
if (j==100){
j=0;
}
tempo=0;
}

set_timer1 (3036+(get_timer1())); //recarrega Timer1
}





void caracter(digito) {
output_high(pin_a4);
output_high(pin_b7); //chr contem 2 digitos (hh,mm o ss)
dezena = (digito/10); // dezenas
unidade = (digito-(dezena*10)); //e as unidades

for (n=0;n<5;n++) { //preparar a tabela para primeiro digito
output_b(table[dezena][n]);
output_high(pin_a4);
output_high(pin_b7);

delay_us(700) ;//160useg cada pixel horizontal
}

delay_us(1500); //pausa entre digitost
output_b(0x81);
delay_us(1500); //pausa entre digitos*/

for (n=0;n<5;n++) {
//output_high(pin_b0);
output_high(pin_b7);
output_b(table[unidade][n]);
//output_high(pin_b0);
output_high(pin_b7);
delay_us(700);
}
delay_us(700); //pausa entre digitos
output_b(0x81);
delay_us(700); //pausa entre digitos
}

void doispontos()
{
//output_high(pin_b0);
output_high(pin_b7);
for (n=0;n<5;n++) { //preparar tabela para primeiro digito
output_b(FONT[26][n]);
//output_high(pin_b0);
output_high(pin_b7);
delay_us(950); //160useg cada pixel horizontal
}
delay_us(950); //pausa entre digitost
output_b(0x81);
delay_us(950); //pausa entre digitos*/



}

void barra()
{
output_high(pin_a4);
output_high(pin_b7);
for (n=0;n<5;n++) { //preparar tabela para primeiro digito
output_b(FONT[9][n]);
output_high(pin_a4);
output_high(pin_b7);
delay_us(400); //160useg cada pixel horizontal
}
delay_us(700); //pausa entre digitost
output_b(0x81);
delay_us(700); //pausa entre digitos




}




void hora()
{
output_high(pin_a4);
output_high(pin_b7);
caracter(hr);
doispontos();
caracter(min);
doispontos();
caracter(sec);
}

void data()
{
caracter(dia);
barra();
caracter(mes);
barra();
caracter(ano);
}


int letra[5];

void texto57(char* textptr, int posicao){
int h;
h = 0;

textptr += posicao;

if(*textptr < 'S')
memcpy(letra, FONT[*textptr - ' '], 5);
else if(*textptr <= '~')
memcpy(letra, FONT2[*textptr - 'S'], 5);
else
memcpy(letra, FONT[0], 5);

}
void conta()
{
sec=q/2; //A variável Q incrementa a 2Hz, então os segundos
//devem ser a metade.
if (sec==60) //Se for igual a 60, reset em Q e S. M incrementa.
{
q=0;
sec=0;
min++;

}


if (min>59)
{
min=0;
hr++;
}

if (hr>23) //Se H(horas) for maior q 23, reset. DIA DA SEMANA
{ //e DIA DO MÊS incrementam.


hr=0;
dia++;
}
if (dia==31)
{
dia=0;
mes++;

}
if (mes==12)
{ mes=0;
ano++;


}
}

//****************** Rotina principal ******************//
void main(){



output_high(pin_b4);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configurao do Timer1 para clock interno = 1E6 dividido por 8
set_timer1 (3036);

enable_interrupts(INT_TIMER1); //Habilita interrupo timer1
enable_interrupts(global);
ds1307_init();
delay_ms(100);





//habilita interrupco global
set_tris_b(0b00000001);
int16 n, m, inicio, fim, atual, tamanho, comeco,cmcon;
char texto[] = " nunca desista dos seus sonhos.Vencer e nunca desistir.senai 2012 ";

cmcon = 0x07;
atual = 0;
m=0;
tamanho = sizeof(texto)-2;

output_b(255);
//output_bit(pin_a6, 1);
//output_bit(pin_a7, 1);

delay_ms(3000); //Acende todos os leds por 3 segundos, para teste
ds1307_set_date_time(23,11,9,1,15,55,0);
while (1) {



if (!input(BOTAO1)) //Teste do boton.
{
delay_ms (300); //Para evitar retorno.
if (contador>2) //Se maior q 11, zera o contador.
{
contador=0;
}

contador++; //Incremento da varivel contador.
}

switch (contador) //Depois de incrementada, a varivel CONTADOR
{

//assume um dos casos a seguir:

case 1: //Menu de ajuste da HORA.
{
output_high(pin_b7);
output_low(pin_b0);
if (!input (BOTAO_INCREMENTO)) //Incrementa a varivel H(hora).
{
delay_ms (500);
hr++;

if (hr>23) //Se a hora for maior que 23, reset.
{
hr=0;
}
}

/* if (!input (BOTAO_DECREMENTO)) //Decrementa a varivel H(hora).
{
delay_ms (300);
h--;

if (h==255) //H uma varivel inteira de 8 bits.
{ //Quando decrementada para um valor
h=23; //menor que zero, se torna 255. Ou seja,
} //deve voltar para 23.
}*/

q=0; //Quando se est em algum menu, Q resetada. //Mantenha na tela.
tempo=0;
break;
}

case 2: //Menu de ajuste do MINUTO. Idem ao anterior.
{
output_high(pin_a4);
output_low(pin_b7);


if (!input (BOTAO_INCREMENTO))
{
delay_ms (500);
min++;

if (min>59) //Diferente aqui.
{
min=0;
}
}

/* if (!input (BOTAO_DECREMENTO))
{
delay_ms (300);
m--;

if (m==255) //Igual aqui.
{
m=59;
}
}*/

q=0;
tempo=0;
//output_low(pin_b0);
//output_low(pin_b7);
break;
}


default: //Menu principal. Mostra todas as informações.
{
conta();

ds1307_get_time(hr,min,sec);
while(input(sensor)) { //so dispara os leds se pinoa3 =1

if((j >= 0 )&&( j <=40)){



output_high(pin_a4);
output_high(pin_b7);

hora();
}
if ((j>=41) &&( j<=50)) {


data();


}
if ((j>=51) &&( j<=100)) {



output_high(pin_a4);
//output_high(pin_b7);


//while(1){
//if(input(PIN_b0)){
///delay_ms(5);

for(inicio = 0; inicio < 15; inicio++){

if(fim+inicio < tamanho){
texto57(texto, fim+inicio);
}else{
fim = 0;
}

for(n = 0; n < 5; n++){



output_b(letra[n]);
delay_us(200);

//output_low(pin_a6);
//output_low(pin_a7);

output_b(0);
delay_us(600);
}
delay_us(600);
}
m++;
if(m == 2){
atual++;
fim++;
m = 0;
}
}
}
}
}
}

}
#include <16F648A.h>

Postado

Pega o código do PIC e debuga ele com o proteus (carrega o arquivo .cof e aperta pause), ai você vai ver o que está sendo feito passo a passo.

Seu código é muito grande.

Um exemplo de como você debuga o código no proteus:

Falou

Postado

Bem que eu queria mas como o projeto e baseado na ilusao de optica, nao tem como simular os leds se mostrarao as horas corretamente, e o RTC sempre pega o relogio do pc ai fica difícil :/

se voce ou mais alguem souber e me dar mais dicas ficarei mt satisfeito,

desesperado :S

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...