Jump to content

Welcome to vip-cxema.org

logo3.png

The forum has a section for guests, where you can ask your questions without registration: Вопросы и ответы

By registering, you will be able to send private messages, receive notification of replies to topics. You can always send a message, many restrictions are removed.


Evgeniy

Часы реального времени ds1307

Recommended Posts

Пример работы с часами реального времени

time.JPG

 

'*******************************************************************************
@ device pic16f628a, HS_OSC, CPD_OFF, PROTECT_OFF, MCLR_OFF, PWRT_ON, WDT_Off
'*******************************************************************************


'*******************************************************************************
define LCD_DREG PORTA 'Порт данных ЖКИ '*
define LCD_DBIT 0 'Вывод порта Бит данных ЖКИ '*
define LCD_RSREG PORTB 'Управление линией RS '*
define LCD_RSBIT 0 'Вывод порта линией RS '*
define LCD_EREG PORTB 'Управление линией E '*
define LCD_EBIT 1 'Вывод порта линией E '*
define LCD_BITS 4 'Разрядность шины данных '*
define LCD_LINES 2 'Количество строк ЖКИ '*
define LCD_COMMANDUS 2000 'Задержка перед посылкой данных '*
define LCD_DATAUS 50 'Задержка перед посылкой данных '*
SCL var PORTB.2 '*
SDA var PORTB.3 '*
'*******************************************************************************
trisA = %00000000 '*
trisB = %11101000 '*
OPTION_REG = %10000000 '*
'*******************************************************************************
Sec var BYTE '*
Sec1 var BYTE '*
Mins var BYTE '*
Mins1 var BYTE '*
Hr var BYTE '*
Hr1 var BYTE '*
Day var BYTE '*
Date var BYTE '*
Date1 var BYTE '*
Mon var BYTE '*
Mon1 var BYTE '*
Yr var BYTE '*
Yr1 var BYTE '*
'*******************************************************************************
Tmp var BYTE '*
Tmp1 var BYTE '*
'*******************************************************************************
Hour var portb.7 '*
Minut var portb.6 '*
'*******************************************************************************




'****************************** Приветствие ************************************
Privet: '*
LCDOUT $FE,1," Welcome!" '*
pause 2000 '*
'*******************************************************************************


'******* Основной цикл (опрос кнопок, запрос времени, вывод на дисплей) ********
Main: '*
gosub read_time 'Запрос времени '*
LCDOUT $FE,1," ", DEC2 Hr1,":",DEC2 Mins1,":",DEC2 Sec1 '*
if hour = 0 then UpHour 'Нажата кнопка "Часы" '*
if minut = 0 then UpMinut 'Нажата кнопка "Минуты" '*
pause 1000 '*
goto main '*
'*******************************************************************************


'*******************************************************************************
UpHour: '*
Hr1 = Hr1 + 1 '*
if Hr1 > 24 then Hr1 = 0 '*
gosub Write_time 'Записываем новое время '*
pause 500 '*
goto main '*
'*******************************************************************************


'*******************************************************************************
UpMinut: '*
Mins1 = Mins1 + 1 '*
if Mins1 > 60 then Mins1 = 0 '*
gosub Write_time 'Записываем новое время '*
pause 500 '*
goto main '*
'*******************************************************************************


'*******************************************************************************
Read_time: '*
i2cread sda, scl, $D0, 0, [sec,Mins,Hr,Day,Date,Mon,Yr] '*
Tmp = Sec '*
GOSUB Fix_bcd_in '*
Sec1 = Tmp '*
Tmp = Mins '*
GOSUB Fix_bcd_in '*
Mins1 = Tmp '*
Tmp = Hr '*
GOSUB Fix_bcd_in '*
Hr1 = Tmp '*
Tmp = Date '*
GOSUB Fix_bcd_in '*
Date1 = Tmp '*
Tmp = Mon '*
GOSUB Fix_bcd_in '*
Mon1 = Tmp '*
Tmp = Yr '*
GOSUB Fix_bcd_in '*
Yr1 = Tmp '*
RETURN '*
'*******************************************************************************


'*******************************************************************************
Write_time: '*
Tmp = Mins1 '*
GOSUB Fix_bcd_out '*
Mins = Tmp '*
Tmp = Hr1 '*
GOSUB Fix_bcd_out '*
Hr = Tmp '*
Tmp = Date1 '*
GOSUB Fix_bcd_out '*
Date = Tmp '*
Tmp = Mon1 '*
GOSUB Fix_bcd_out '*
Mon = Tmp '*
Tmp = Yr1 '*
GOSUB Fix_bcd_out '*
Yr = Tmp '*
Sec = 0 '*
i2cwrite sda, scl, $D1, 0, [sec,Mins,Hr,Day,Date,Mon,Yr] '*
RETURN '*
'*******************************************************************************


'*******************************************************************************
Fix_bcd_in: '*
Tmp1 = Tmp & 15 '*
Tmp = Tmp >> 4 '*
Tmp = Tmp1 + 10 * Tmp '*
RETURN '*
'*******************************************************************************


'*******************************************************************************
Fix_bcd_out: '*
Tmp1 = Tmp / $A '*
Tmp = Tmp - (Tmp1 * $A) '*
Tmp = Tmp + (Tmp1 << 4) '*
RETURN '*
'*******************************************************************************

 

 

ds1307.rar

Share this post


Link to post
Share on other sites
 

Привет Жень. Случайно не завалялась формула вычисления температуры с датчика DS3231? Все что находил в тырнете не работает.

 

Проект скинул на почту.

Share this post


Link to post
Share on other sites
 
 

Посмотрел, там температуру вообще декодировать не надо! 

Считываем 2 байта с 11 адреса. В первом байте целое значение температуры, во втором одно из четырёх значений (0, 1, 2, 3). Это дело умножаем на 25, получим десятые и сотые доли градусов. Цена деления датчика 0,25 градусов.

 

'*******************************************************************************
ReadTemp: '*
i2cread sda, scl, $D0, $11, [tempcel,tempdes] '*
znak = tempcel.7 'Знак температуры берём из 7 бита целого значения '*
if znak = 1 then tempcel = ~ tempcel 'Если отрицательная, инвертируем биты '*
if znak = 0 then znak = "+" 'Знак + '*
if znak = 1 then znak = "-" 'Знак - '*
tempdes = (tempdes >> 6) * 25 'Сдвигаем старшие биты в младшие и умножаем на '*
return '25, так как цена деления 25 соток. '*
'*******************************************************************************

 

В общем, код очень простой

 

 

ds3232.zip

Share this post


Link to post
Share on other sites
 
 

Евгений приветствую!

 

Возникла потребность использовать часы реального времени.

Нашел Вашу статью, все сделал как описано, но в результате на дисплее получаю - 02:02:02

Не могу понять в чем проблема?

Подскажите пожалуйста.

 

Использую PIC16F876  и китайскую сборочку с DS1307

 

Я написал часть проги только для считывания (без установки времени), я так понимаю, что при подаче питания часы должны запуститься и начать отчет времени с 0:0:0, или им обязательно нужно сделать установку времени?

 

Я с I2C работаю впервые, пожалуйста помогите разобраться.

Share this post


Link to post
Share on other sites
 

И еще забыл сказать, что при смене портов для SCL и SDA  показания меняются - либо 02:02:02 либо 04:04:04

Пробовал вешать на все порты, везде одно и то же.

Share this post


Link to post
Share on other sites
 

Добрый день!

Порты ввода вывода правильно настроены? Тактовая частота, внутренние регистры микроконтроллера...? Можно попробовать в протэусе посмотреть работу прошивки.

А сам код где?

Share this post


Link to post
Share on other sites
 

Если я правильно понимаю, то SCL - порт должен быть на передачу, а SDA на прием.

Тактовая 4 MHz - внешний кварц

А код работы I2C взят Ваш один в один.

 Один вопрос, в даташите указано, что для чтения данных из DS1307 бит RW должен быть установлен в 1. Вот тут мне не понятно, для чтения должна быть команда:

i2cread sda, scl, $D0, 0, [sec,Mins,Hr,Day,Date,Mon,Yr]  или

...........................$D1............

 

У Вас $D1 используется для записи данных в часы.

Share this post


Link to post
Share on other sites
 

Часы то хоть идут или постоянно отображается одна и та же информация?

 

Мой код рабочий на 100%, я его как есть использовал в другом проекте, проверено в железе.

Скинь хотя бы схему устройства (pic, индикатор, rtc), попробую написать код.

Share this post


Link to post
Share on other sites
 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...



×
  • Create New...