PIC16f873a и DS1307
|
|
rdx75 |
Дата: Ср, 07.10.2009, 21:44 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 29.08.2009
Статус:
Offline
|
Помогите разобраться с работой часов реального времени ds1307. Схему собрал с батареей. Подтягивающий резистор установлен только на линии SDA. Вот код програмы что я записываю в мк. Алгоритм работы такой: при нажатии на кнопку1 в ds1307 записываются установки даты, времени. при нажатии на кнопку2 читаются данные из ds1307 и выдаются на терминал. когда ниодна кнопка не нажата мерцают два светодиода Когда по схеме было установлено два подтягивающих резистор, терминал принимал все значения $00. Когда установил подтягивающий резистор только на SDA, терминал начал принимать все значения $04. Больше ничего с ним сделать я не смог. Quote Include "modedefs.bas" ' Описание режимов последовательного порта define I2C_slow 1 control con %11010000 ' Задать управляющий код НА ЗАПИСЬ control2 con %11010001 ' Задать управляющий код НА ЧТЕНИЕ DPIN var PORTC.2 ' Вывод данных шины I2C (SDA) CPIN var PORTC.3 ' Вывод тактового сигнала шины I2C (SCL) Value var byte ' X var byte i var byte adcon1 = 7 ' Сделать все выводы порта PORTA цифровыми выводами trisb = %00000011 portb = %00000000 trisc = %10000000 portb.2 = 0 'светодиод1 portb.3 = 0 'светодиод2 start: toggle portb.2 toggle portb.3 pause 400 if portb.0 = 1 then ' pause 300 ' if portb.0 = 0 then n 'проверяется нажата ли кнопка1 portb.3 = 0 portb.2 = 0 toggle portb.3 pause 400 toggle portb.3 pause 400 toggle portb.3 pause 400 toggle portb.3 pause 400 I2Cwrite dpin, cpin, control, $00, [%00000000] I2Cwrite dpin, cpin, control, $01, [%00001010] I2Cwrite dpin, cpin, control, $02, [%00011001] I2Cwrite dpin, cpin, control, $03, [%00000011] I2Cwrite dpin, cpin, control, $04, [%00000111] I2Cwrite dpin, cpin, control, $05, [%00010000] I2Cwrite dpin, cpin, control, $06, [%00001001] endif n: if portb.1 = 1 then ' pause 400 ' if portb.1 = 0 then start 'проверяется нажата ли кнопка2 portb.3 = 0 portb.2 = 0 toggle portb.2 pause 400 toggle portb.2 pause 400 toggle portb.2 pause 400 toggle portb.2 pause 400 for i = $00 to $07 I2Cread dpin, cpin, control2, i, [value] Serout portc.6, T2400, [value] 'вывод на терминал считаного значения next endif goto start end Прикрепил вырезку из даташита
Сообщение отредактировал
rdx75 - Ср, 07.10.2009, 22:22
|
|
|
|
demanik |
Дата: Ср, 07.10.2009, 23:54 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Попробуйте работать с часами одним пакетом, вот пример: чтение I2CRead SDA, SCL, rtc_read, 0, [sec,mins,hr,day,date,mon,yr] запись I2CWrite SDA, SCL, rtc_write, 0, [sec, mins, hr, day, date, mon, yr] P.S. Резисторы вцепите на обе шины.
Попробуй всё и вся... может быть пол...
Сообщение отредактировал
demanik - Ср, 07.10.2009, 23:57
|
|
|
|
rdx75 |
Дата: Чт, 08.10.2009, 00:57 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 29.08.2009
Статус:
Offline
|
Quote (demanik) Попробуйте работать с часами одним пакетом, вот пример: чтение I2CRead SDA, SCL, rtc_read, 0, [sec,mins,hr,day,date,mon,yr] запись I2CWrite SDA, SCL, rtc_write, 0, [sec, mins, hr, day, date, mon, yr] P.S. Резисторы вцепите на обе шины. Поцепив на обе линии резисторы это решило половину проблемы (насчет приминения только одного резюка вычитал на одном форуме, видимо дезинформацией занимаются люди ). А вторую половину решил когда замерял питание на микросхеме, оно оказалось на мое удивление не 5В, а чуть меньше 4, в даташите указано что при питании меньше, чем 1.25 x VBAT микруха не принимает и не отсылает данные, переходит в ждущий режим. Причина неполадки была в токоограничивающем резисторе в цепи питания, удалил его и все заработало)) Кстати, одним пакетом действительно удобнее работать. Не знал о такой особенности))) Добавлено (08.10.2009, 00.57.02) --------------------------------------------- Еще столкнулся с такой проблемой: при работе с внешней памятью через I2C интерфейс и также с микросхемой часов реального времени DS1307 через тот же интерфейс при первом (после подачи питающего напряжения) чтении данных из памяти либо первая ячейка памяти читается неправильно либо целый массив, напоминает случайные числа, никаких закономерностей. Последующие считывания происходят без сбоев. Может кто подскажет в чем проблема?
|
|
|
|
Dmitry |
Дата: Чт, 08.10.2009, 22:57 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Quote (rdx75) (насчет приминения только одного резюка вычитал на одном форуме, видимо дезинформацией занимаются люди Нет, то внимательно надо читать приводимый код. Для PBP надо добавлять строчку: DEFINE I2C_SCLOUT 1 и тогда резюк на SCL можно не ставить. Проверено.
|
|
|
|
Legioner |
Дата: Чт, 19.10.2017, 14:54 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
39
Замечания:
±
На сайте с 22.08.2015
Статус:
Offline
|
Ребята, будьте любезны растолкуйте мне по подробней как с ds1307 получить время часы и минуты и как настраивать время. Прошу сильно не ругать. Недавно начал знакомство с контроллерами
Legioner
|
|
|
|
xvovanx |
Дата: Чт, 19.10.2017, 20:01 | Сообщение # 6 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Legioner ( ) растолкуйте мне по подробней как с ds1307 получить время часы и минуты и как настраивать время Вот вам для начала отрывки из моей проги, имеющие отношение к часам. Прога на Протоне, но там все схоже.
P.S. сам использую DS3231 - она точнее, чем DS1307, но управление одинаковое по шине I2C
Сообщение отредактировал
xvovanx - Пт, 20.10.2017, 15:50
|
|
|
|
Legioner |
Дата: Пт, 20.10.2017, 15:13 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
39
Замечания:
±
На сайте с 22.08.2015
Статус:
Offline
|
Цитата xvovanx ( ) Вот вам для отрывки из моей проги, имеющие отношение к часам. Прога на Протоне, но там все схоже. Спасибо вам большое буду разбиратся!!Добавлено (20.10.2017, 15:13) --------------------------------------------- xvovanx, СПАСИБО ВАМ ОГРОМНОЕ разобрался как считать и как записать значение времени!! По крайней мере Proteus не ругается.
Legioner
|
|
|
|