Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Hardware TWI модуль Mega и RTC pcf8583
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
WHALE
Толи лыжи не едут,толи одно из двух sad.gif Пытаюсь запустить сей девайс.Чтение проходит без прблем,
а при попытке записи модуль TWI зависает -то SCL в 0,а то и еще и SDA.
Судя по даташиту,работа с ним не отличается от алгоритма обращения с обычной EEPROM,что и делаю.
Кто работал с девайсом,плиз,подскажите,может я чего-то в DS проглядел или не понял? help.gif
zorromen
что за мегу используешь?
WHALE
M128.А какая разница,модуль TWI у всех же одинаковый?
zorromen
Мож написать последовательность действий которые ты делаешь.
при чтении и при записи.
defunct
Подвиснуть при записи может если на линии SDA будет 0, в то время как Master выставляет 1.
Попробуйте понизить скорость обмена.

Цитата
Кто работал с девайсом,плиз,подскажите,может я чего-то в DS проглядел или не понял?

Далеко ходить не надо, проэмулировать ситуацию можно запустив другую мегу в режиме slave. Подвисать будет тока так. ;>
WHALE
Скорость минимально возможная(TWBR =0XFF)и что модуль виснет в случае конфликта на шине я знаю,вопрос,в какую сторону копать.
Кто реально работал с данным RTC,где грабли лежат?
vesago
А вы уверены в своем драйвере i2c? У меня помнится намертво подвисало из-за кривой реализации машины состояний. В частности из-за нетерпимости TWI к любому изменению TWCR без выставления битов TWEN, TWIE, TWINT. Но это если используется прерывание.
WHALE
драйвер иаровский(avr апноут 315),применял уже несколько раз,вопросов небыло.Работает по прерываниям,это правда,но разве это недостаток?
bodja74
1 Насколько помню у pcf8583 разрешение записи на 7 ноге это "1" ,а не "0" как у 24ХХ.
2 У меня как то подвисало из за слишком короткого промежутка между командами "стоп" и "старт".
WHALE
Цитата(bodja74 @ Nov 20 2006, 02:06) *
1 Насколько помню у pcf8583 разрешение записи на 7 ноге это "1" ,а не "0" как у 24ХХ.
2 У меня как то подвисало из за слишком короткого промежутка между командами "стоп" и "старт".

1.pcf8583 это не eeprom,а rtc,и разрешения записи там нет.
2.В том-то и загвоздка,что виснет не при чтении,где я вначале адресую её на запись и устанавливаю начальный адрес чтения,потом stop,повторная адресация и чтение,а при записи,где алгоритм более
простой-адресация на запись,адресация начальной ячейки и запись с автоинкрементом адреса.
defunct
Цитата(WHALE @ Nov 20 2006, 07:59) *
2.В том-то и загвоздка,что виснет не при чтении,где я вначале адресую её на запись и устанавливаю начальный адрес чтения,потом stop,повторная адресация и чтение,а при записи,где алгоритм более
простой-адресация на запись,адресация начальной ячейки и запись с автоинкрементом адреса.

Может быть можно вставить цикл задержки или repeated start, между выдачей адреса и данными.
При работе через прерывания задержку довольно сложно вставить, но Вы можете поэксперементировать без прерываний вначале..
Alex11
У меня 8583 стоит в серийной продукции, работает без сбоев. Сейчас уже помню с трудом, но была там какая-то засада, связанная с тем, что контроллер был не штатный и не имел открытого коллектора на шине данных. В результате был очень короткий конфликт на шине при попытке подать повторный старт без стопа, после чего деталь впадала в ступор.
day177
Ковыряю PCF8583 в железе. В мэйне вызываем инициализацию i2c, потом инициализацию PCF8583, устанавливаем значение времени (пока для теста), в while показываем секунды и минуты, по прерыванию считываем время с PCF8583. Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!
sensor_ua
А генератор включил 32768? Выведи его наружу и убедись, что управление проходит
m16
рабочий код на асме mega128+pcf8583
day177
to m16 за код конечно спасибо, но я пишу на Си

"А генератор включил 32768?" - схема мастеркитовская ns182 h__p://www.masterkit.ru/images/magazines/1_ST_08_02.gif

"Выведи его наружу и убедись, что управление проходит" - так там кварц часовой (цилиндрик 32768) стоит и от одной ноги через кондюк 20пф на +Пит.
WHALE
Цитата(sensor_ua @ May 3 2007, 16:59) *
А генератор включил 32768? Выведи его наружу и убедись, что управление проходит

А его можно там включить на выход?Вроде нет там такой возможности.

У меня PCF пашет без вопросов,толька я его использую в таком режиме-на пине INT секундные импульсы,заведенные на прерывания проца.
читаю время из него один раз по включению,а далее по прерываниям программный счет-гораздо быстрее получается,чем постоянное считывание счетных регистров PCF.
m16
Цитата(day177 @ May 3 2007, 16:04) *
Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!

Control/status register bit7: 1- stop counting, reset divider , 0- count pulses
так вот ноликом часики запускаются
sensor_ua
Цитата
А его можно там включить на выход?

Вывод 7 у него для этого и целый регистр 0x0D. А прерывания выдаёт он на 3-й пин
ПРАВКА. Попутал с 8563;) У 8583 действительно нет
Цитата
схема мастеркитовская

Да чихать от кого схема - в регистре 0x00 биты TEST и STOP правильные?
ПРАВКА. Попутал с 8563;) У 8583 в регистре 0х00 должны быть правильно прописаны биты [5:4] и бит STOP -7
algidim
Цитата(Alex11 @ Nov 20 2006, 20:19) *
У меня 8583 стоит в серийной продукции, работает без сбоев. Сейчас уже помню с трудом, но была там какая-то засада, связанная с тем, что контроллер был не штатный и не имел открытого коллектора на шине данных. В результате был очень короткий конфликт на шине при попытке подать повторный старт без стопа, после чего деталь впадала в ступор.

У меня вот тоже. biggrin.gif Подскажите пожалуйста какой конденсатор между первой ногой и vcc у Вас стоит. А то у меня 10pf и они отстают. А вообще непонятно какие там могут быть проблемы, самая обычная i2c RTC, по моему там вообще нет никаких подврдных камней. Я тоже писал на Си, но она у меня не к AVR подключена. Она у меня вообще с первого раза пошла и даже без отладки. А вот генератор в ней вообще отключить по моему невозможно. Я её и выбрал из её цены и потому что на выходе int можно получить секундные импульсы - очнгь удобно.

Цитата(day177 @ May 3 2007, 16:04) *
Ковыряю PCF8583 в железе. В мэйне вызываем инициализацию i2c, потом инициализацию PCF8583, устанавливаем значение времени (пока для теста), в while показываем секунды и минуты, по прерыванию считываем время с PCF8583. Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!

А Вы осциллографам на кварце смотрели ? Резисторы на SDA и SCL стоят ? И уверены что вообще время устанавливаете, просто если после подачи питания стчитывать время оно должно идти.
WHALE
А вы последовательно с кварцем постоянный конденсатор ставите? cranky.gif ну не знаю,может у вас
кварцы особо точные.Я ставлю триммер 5/25 pf,на ногу INT с секундными импульсами частотомер в ре-
жиме измерения периода и кручу,кручу...Кварцы гуляют очень прилично.
day177
to WHALE вот про это можно немного по-подробнее "на пине INT секундные импульсы,заведенные на прерывания проца.
читаю время из него один раз по включению,а далее по прерываниям программный счет-гораздо быстрее получается,чем постоянное считывание счетных регистров PCF."

А гадина эта таки завелась - перешил той же прошивкой и часики затикали. В чем была проблема хз.
WHALE
а что тут непонятного?раз в секунду считывать с RTC его счетные регистры-это несколько пересылок
туда-сюда по достаточно тормознутой квадратной шине.Плюс лежат они там в BCD-формате-для инди-
кации ничего,но для работы мне неудобно-надо еще и распаковывать.Все это жрет процессорное время.Это только имхо-мне проще проще 1 раз считать с RTC время при старте системы,а дальше счи-
тать его прграммно в контроллере по секундным импульсам.
day177
Кстати в книге "шина i2c в радиолюбительских конструкциях" - почти полный перевод даташита на PCF-ку. Щас сижу разбираюсь доконца, а то в англицком не силен. Всем спасибо за помощь smile.gif
day177
to WHALE я так и не понял после сброса чипа - PCF по умолчанию генерит прерывания каждую секунду или где-то надо что-то изменить?

если да, то в каком регистре и какой бит?
WHALE
если вы под сбросом понимаете полное снятие питания-то да,по дефолту после сброса она работает в режиме персчета частоты кварца,а на выходе INT импульсы с частотй Fкварца/32768.Программно можно выход INT переключить на срабатывание аларма.Т.е при включении питания,если вы используете PCF только в режиме RTC,то регистры управления можно не трогать,они стоят как надо.
day177
Вот кусок даташита: «В режиме подсчета реального времени, если режим alarm не задействован, вывод INT может генерировать постоянные прерывания с частотой 1Гц и скважностью 50%.»
Вопрос: какие регистры и какие биты отвечают за это? Никак не пойму. Симулирую в Proteus, но прерывания не происходят – толи модель PCF-ки кривая, то ли я что-то неправильно делаю sad.gif HELP!!!
WHALE
Согласно даташиту после подачи питания все должно стоять в режиме RTC c коэффициэнтом счета 32768.Ну можете для очистки совести в регистр статуса 0 записать.
З.Ы.-плюньте на протеус,что а реале творится?
day177
как же плюнуть на протеус - как же устройство отлаживать sad.gif

в реале ваще черти что - динамическая индикация, считывание часов в пррывании по НЛУ - так вот вместо нормальной индикации поочередно показываются все цифры. плюс еще очень быстро проблескиваю все цифры. Может просто один раз вызывается прерывание, необходимый флаг не возвращается в исходное состояние и так остается в НЛУ и прерывания идут лавинно
WHALE
дык импульсы 1-герцовые у вас есть или их нет?их можно даже вольтметром увидеть,если нет осцилографа.
Jury093
"бери интеграл по частям"
заведи четыре переменные, положи туда при старте 1, 2, 3 и 4 и отлаживай сначала динамическую индикацию. отладил.. копайся в обработке прерывания от часов, например при попадание туда увеличивай на единицу одну из переменных для вывода на индикатор и тыды..
ЗЫ Кстати, надеюсь выход от чипа часов, тот который должен вызывать прерывание меги у тебя подтянут резистором на +U..

Цитата(day177 @ May 10 2007, 14:48) *
как же плюнуть на протеус - как же устройство отлаживать sad.gif

в реале ваще черти что - динамическая индикация, считывание часов в пррывании по НЛУ - так вот вместо нормальной индикации поочередно показываются все цифры. плюс еще очень быстро проблескиваю все цифры. Может просто один раз вызывается прерывание, необходимый флаг не возвращается в исходное состояние и так остается в НЛУ и прерывания идут лавинно
day177
Цитата(Jury093 @ May 10 2007, 18:25) *
ЗЫ Кстати, надеюсь выход от чипа часов, тот который должен вызывать прерывание меги у тебя подтянут резистором на +U..


на схеме резюка не было, за сим не ставил. Потом полистал даташит - оказывается нада ставить (мастеркит мать его перемать twak.gif )

в реале импульсы есть 1Гц. Модель протеуса кривая. Все переписал/переделал smile.gif

В связи с изменением алгоритма программы обратный вопрос - как включить прерывания только по alarm?
WHALE
1.Разрешаете alarm-2 бит в регистре статуса в 1.
2.в регистре alarm control устанавливаете нужный вам режим аларма+в нем-же разрешаете прерывание
от аlarm-7 бит в 1.
3.Устанавливаете регистры сравнения alarm.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.