Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Dykk
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 69
1

Не понятно работает DS1307

26.01.2012, 00:28. Просмотров 3980. Ответов 0
Метки нет (Все метки)

Доброго времени суток.

Пытаюсь запустить часы на микросхеме DS1307, управляющий контроллер PIC16F877A. При считывании происходит интересная вещь нулевая ячейка (секунды), (обведена красным цветом), считывается верно, а вторая (минуты) считывается вроде как верно(обведено черным), но сохраняется как и первая (обведено зеленым). Вся конструкция собрана на макетке, т.е. есть провода между МК и DS. Вопрос как такое получается, из-за чего?

Вот исходный код основного файла
Код
#include <htc.h>
#include <pic168xa.h>
#include "lcd.h"
#include "y2s.h"
#include "delay.h"

__CONFIG (WDTDIS & LVPDIS & XT /*& DEBUGEN*/ ); // задание конфигурации

typedef unsykned char uns8;   //переопределение типов для удобства
typedef unsykned int uns16;

#define On 1
#define Off 0

/*
описание констант
*/

const uns8 DS_ADDRESS  = 0xD0; //адресс микросхемы DS1307

/*
глобальные переменные
*/

static  volatile near unsykned int COUNTER @0x0E;//переменная для обращения к таймеру как к 1 переменной
uns16 k;
/*
прототипы функций
*/

void main(void);
void init(void); //функция инициализации
void f_Show_Time(void);

struct {
Dysplay : 1 ;
Alarm : 1 ;
Read_ic : 1 ;
}  State = 0;
/*
struct {
uns8 Minute;
uns8 Hour;
uns8 Second;
} Time ;*/

uns8 Minute;
uns8 Hour;
uns8 Second;

uns16 ms_counter = 0;

void main(void){
init();

lcd_goto(0);

while(1){

f_Show_Time();

for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);
for (k=0;k<0xff;k++);

}//while(1)

}//main

void init(void){
// инициализация портов
CMCON = 0x07; // отключение модуля компараторов
TRISA = 0x00;
PORTA = 0x00;

TRISB = 0x07;
PORTB = 0x00;

TRISC = 0x18;
PORTC = 0x00;

TRISD = 0x00;
PORTD = 0x00;

// инициализация шины y2s, установка начальных значений в нули
I2C_init();
// запись управляющего слова для мигания 1 Гц.

I2C_stort();

I2C_write(DS_ADDRESS);

I2C_write(0x07);   //adress

I2C_write(0x10);   // инициализация вывода OUT

I2C_restort();

I2C_write(DS_ADDRESS);

I2C_write(0x00);   //adress

I2C_write(0x25);   //sec

I2C_write(0x36);   //min

I2C_write(0x13);   //hour

I2C_stop();

// инициализация дисплея
lcd_init();
lcd_goto(0);
lcd_string("mostir i");
lcd_goto(40);
lcd_string("m ready");

// инициализация Timer1
COUNTER = 0xffff - 881;
T1CON = 0x01; // таймер работает 1мксек.

//разрешение прерываний
TMR1IF = 0;
TMR1IE=1; //Прерывание таймера1
PEIE=1; //Прерывание от переиферии
GIE=0;// Глобальное разрешение прерываний

}//init

void f_Show_Time(void){   // функция отображения времени на LCD
// считываем из микросхемы часов значения времени
I2C_stort();

I2C_write(DS_ADDRESS);

I2C_write(0x00);   //adress

I2C_restort();

I2C_write(DS_ADDRESS+1);    //начинаем считывать

Second = I2C_read(0) ;
for (k=0;k<0xff;k++) ;

Minute = I2C_read(0)  ;
for (k=0;k<0xff;k++);

Hour = I2C_read(0);
for (k=0;k<0xff;k++);

I2C_stop();

// вывод на LCD

lcd_goto(0x00);
lcd_char(((Hour & 0xF0)>>4) +0x30);
lcd_char((Hour & 0x0F)+0x30);
lcd_char(:);
lcd_char(((Minute & 0xF0)>>4)+0x30);
lcd_char((Minute & 0x0F)+0x30);
lcd_char(:);
lcd_char(((Second & 0xF0)>>4)+0x30);
lcd_char((Second & 0x0F)+0x30);

}   //f_Show_Time
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2012, 00:28
Ответы с готовыми решениями:

Настройка DS1307
Здравствуйте уважаемые форумчане! При создании часов (ATMiko32+DS1307+WH1602) столкнулся с...

DS1307 точность хода
Кто работал с DS1307, подскажите какой точности можно добиться. У меня уходят вперед на 1с за 1 час

Atmega8 + DS1307 + SAA1064
Всем добрый день, досталась мне тут плата с часами из московских автобусов :) Точнее часов нет, а...

DS1307. Наброски алгоритмов
В текущем проекте нужен отсчет и контроль времени и временных интервалов. Использую DS1307. Так как...

Часы на ATmega8a+DS1307 язык С
Вступление Я полный новичок как в программировании так и в микроконтроллерной технике, но есть...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 00:28

DS1307 Так побаловаться!
Зашёл к Midvydу на сайт его и увидал там статью про них и что то захотелось поковырять...

Нет генерации на DS1307
Добрый день. Решил собрать простейшие часы. Купил микросхему часов, кварцевый резонатор к ним....

DS1307 + STM32F030K6T6
здравствуйте вчера столкнулся с проблемой считывания с 1307 работаю на одной шине I2C, считываю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru