реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
ice126
сообщение Mar 7 2017, 18:50
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 7-02-17
Пользователь №: 95 339



Бросьте в меня примером на С по работе с часами реального времени по I2C.

Реально перелопатил много - не нашел.
Наверное туплю в плане адреса устройства. В даташите написано 0xA3, но у меня Протеус тупо зависает в ожидании завершения передачи.
Часы у меня PCF8563. МК в Протеусе MSP430F2132
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 8 2017, 11:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



А вы читали даташит?
Цитата
Two slave addresses are reserved for the PCF8563:
Read: A3h (10100011)
Write: A2h (10100010)

И если ваша библиотека i2c умеет сама контролировать бит записи/чтения в адресе (7bit) устройства то надо опрашивать устройство с адресом 51h.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 8 2017, 12:03
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Не тратьте время на протеус.
Go to the top of the page
 
+Quote Post
ice126
сообщение Mar 8 2017, 13:27
Сообщение #4





Группа: Участник
Сообщений: 9
Регистрация: 7-02-17
Пользователь №: 95 339



Цитата(ar__systems @ Mar 8 2017, 15:03) *
Не тратьте время на протеус.

Согласен, есть в нем грешки. Уже неоднократно 100% рабочий код просто валил Протеус в фатал еррор или в зависание, но в любом случае в Протеусе проще играться, чем 1000 раз перепрошивать МК.

Цитата(Lagman @ Mar 8 2017, 14:57) *
А вы читали даташит?
И если ваша библиотека i2c умеет сама контролировать бит записи/чтения в адресе (7bit) устройства то надо опрашивать устройство с адресом 51h.

Так в даташите ж и написан адрес. Вот только я не могу понять, почему Вы рекомендуете 51h ?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 8 2017, 15:24
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ice126 @ Mar 8 2017, 15:27) *
Так в даташите ж и написан адрес. Вот только я не могу понять, почему Вы рекомендуете 51h ?

Может потому, что в 7-битном режиме I2C адрес 0xA3 невозможен? Не задумывались об этом?
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 8 2017, 16:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(ice126 @ Mar 8 2017, 16:27) *
Так в даташите ж и написан адрес. Вот только я не могу понять, почему Вы рекомендуете 51h ?

В i2c младший бит адреса (0 бит) показывает на вид операции - чтение (1) или запись (0).
51h = A3h >> 1

Но надо знать как работает ваш код с адресом устройства и от этого отталкиваться.
Go to the top of the page
 
+Quote Post
ice126
сообщение Mar 8 2017, 17:37
Сообщение #7





Группа: Участник
Сообщений: 9
Регистрация: 7-02-17
Пользователь №: 95 339



Цитата(jcxz @ Mar 8 2017, 18:24) *
Может потому, что в 7-битном режиме I2C адрес 0xA3 невозможен? Не задумывались об этом?

не так, чтоб задумывался... сложно после 10 лет прикладного снова на МК возвращаться.
Короче, победил частично. Часы работают, время устанавливается, а вот с будильником засада.
По-любому что-то намутил я. Скорее всего с BCD.
В 0х01 пишу 0х06 - бит будильника + бит прерывания
Ну а дальше в 0х09 пишу 0х01 - пусть на первой минуте будет прерывание.
Реакции никакой. Закипаю уже...
Даташит http://www.nxp.com/documents/data_sheet/PCF8563.pdf
Цитата(Lagman @ Mar 8 2017, 19:33) *
В i2c младший бит адреса (0 бит) показывает на вид операции - чтение (1) или запись (0).
51h = A3h >> 1
Но надо знать как работает ваш код с адресом устройства и от этого отталкиваться.

Спасибо, уже разобрался. осталось как-то будильник побороть. Обленился. Оно же проще каждый день одно и то же, а тут новое нужно осваивать.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 8 2017, 20:13
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(ice126 @ Mar 8 2017, 20:37) *
В 0х01 пишу 0х06 - бит будильника + бит прерывания

не знаю не работал с этими часами, но тут смешались таймеры и будильники (alarm), решите что используете и посмотрите в каком состоянии ножка INT. Там очищать битики надо если ножка в 0.
Go to the top of the page
 
+Quote Post
ice126
сообщение Mar 9 2017, 13:31
Сообщение #9





Группа: Участник
Сообщений: 9
Регистрация: 7-02-17
Пользователь №: 95 339



Цитата(Lagman @ Mar 8 2017, 23:13) *
не знаю не работал с этими часами, но тут смешались таймеры и будильники (alarm), решите что используете и посмотрите в каком состоянии ножка INT. Там очищать битики надо если ножка в 0.

Спасибо, разобрался. Вдумчиво почитал даташит и дало результат.
Прерывание по будильнику проверил - работает. Вот только не знаю, будет ли ежедневно, если я не указал явно дни, тоесть стоят дни месяца и дни недели - дизейбл.
Ладно, на харде проверю - не маслать же Протеусу сутки sm.gif
Остался единственный вопрос, который на даный момент для меня не понятен. Какого черта после прерывания INT часов падает на землю? Или я как-то не так это все понимаю...
Вот так до прерывания от будильника

А это после прерывания. Я бы подумал, что где-то в коде управления на МК натупил, то по кнопке прерывание отрабатывает и возвращается в первоначальное положение.


Сообщение отредактировал Herz - Jun 21 2017, 09:13
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016