Толи лыжи не едут,толи одно из двух

Пытаюсь запустить сей девайс.Чтение проходит без прблем,
а при попытке записи модуль TWI зависает -то SCL в 0,а то и еще и SDA.
Судя по даташиту,работа с ним не отличается от алгоритма обращения с обычной EEPROM,что и делаю.
Кто работал с девайсом,плиз,подскажите,может я чего-то в DS проглядел или не понял?
zorromen
Nov 19 2006, 12:03
что за мегу используешь?
M128.А какая разница,модуль TWI у всех же одинаковый?
zorromen
Nov 19 2006, 14:30
Мож написать последовательность действий которые ты делаешь.
при чтении и при записи.
defunct
Nov 19 2006, 14:58
Подвиснуть при записи может если на линии SDA будет 0, в то время как Master выставляет 1.
Попробуйте понизить скорость обмена.
Цитата
Кто работал с девайсом,плиз,подскажите,может я чего-то в DS проглядел или не понял?
Далеко ходить не надо, проэмулировать ситуацию можно запустив другую мегу в режиме slave. Подвисать будет тока так. ;>
Скорость минимально возможная(TWBR =0XFF)и что модуль виснет в случае конфликта на шине я знаю,вопрос,в какую сторону копать.
Кто реально работал с данным RTC,где грабли лежат?
vesago
Nov 19 2006, 17:49
А вы уверены в своем драйвере i2c? У меня помнится намертво подвисало из-за кривой реализации машины состояний. В частности из-за нетерпимости TWI к любому изменению TWCR без выставления битов TWEN, TWIE, TWINT. Но это если используется прерывание.
драйвер иаровский(avr апноут 315),применял уже несколько раз,вопросов небыло.Работает по прерываниям,это правда,но разве это недостаток?
bodja74
Nov 19 2006, 23:06
1 Насколько помню у pcf8583 разрешение записи на 7 ноге это "1" ,а не "0" как у 24ХХ.
2 У меня как то подвисало из за слишком короткого промежутка между командами "стоп" и "старт".
Цитата(bodja74 @ Nov 20 2006, 02:06)

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

2.В том-то и загвоздка,что виснет не при чтении,где я вначале адресую её на запись и устанавливаю начальный адрес чтения,потом stop,повторная адресация и чтение,а при записи,где алгоритм более
простой-адресация на запись,адресация начальной ячейки и запись с автоинкрементом адреса.
Может быть можно вставить цикл задержки или repeated start, между выдачей адреса и данными.
При работе через прерывания задержку довольно сложно вставить, но Вы можете поэксперементировать без прерываний вначале..
Alex11
Nov 20 2006, 19:19
У меня 8583 стоит в серийной продукции, работает без сбоев. Сейчас уже помню с трудом, но была там какая-то засада, связанная с тем, что контроллер был не штатный и не имел открытого коллектора на шине данных. В результате был очень короткий конфликт на шине при попытке подать повторный старт без стопа, после чего деталь впадала в ступор.
Ковыряю PCF8583 в железе. В мэйне вызываем инициализацию i2c, потом инициализацию PCF8583, устанавливаем значение времени (пока для теста), в while показываем секунды и минуты, по прерыванию считываем время с PCF8583. Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!
sensor_ua
May 3 2007, 15:59
А генератор включил 32768? Выведи его наружу и убедись, что управление проходит
рабочий код на асме mega128+pcf8583
to m16 за код конечно спасибо, но я пишу на Си
"А генератор включил 32768?" - схема мастеркитовская ns182 h__p://www.masterkit.ru/images/magazines/1_ST_08_02.gif
"Выведи его наружу и убедись, что управление проходит" - так там кварц часовой (цилиндрик 32768) стоит и от одной ноги через кондюк 20пф на +Пит.
Цитата(sensor_ua @ May 3 2007, 16:59)

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

Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!
Control/status register bit7: 1- stop counting, reset divider , 0- count pulses
так вот ноликом часики запускаются
sensor_ua
May 3 2007, 16:59
Цитата
А его можно там включить на выход?
Вывод 7 у него для этого и целый регистр 0x0D. А прерывания выдаёт он на 3-й пин
ПРАВКА. Попутал с 8563;) У 8583 действительно нет
Цитата
схема мастеркитовская
Да чихать от кого схема - в регистре 0x00 биты TEST и STOP правильные?
ПРАВКА. Попутал с 8563;) У 8583 в регистре 0х00 должны быть правильно прописаны биты [5:4] и бит STOP -7
algidim
May 4 2007, 02:04
Цитата(Alex11 @ Nov 20 2006, 20:19)

У меня 8583 стоит в серийной продукции, работает без сбоев. Сейчас уже помню с трудом, но была там какая-то засада, связанная с тем, что контроллер был не штатный и не имел открытого коллектора на шине данных. В результате был очень короткий конфликт на шине при попытке подать повторный старт без стопа, после чего деталь впадала в ступор.
У меня вот тоже.

Подскажите пожалуйста какой конденсатор между первой ногой и vcc у Вас стоит. А то у меня 10pf и они отстают. А вообще непонятно какие там могут быть проблемы, самая обычная i2c RTC, по моему там вообще нет никаких подврдных камней. Я тоже писал на Си, но она у меня не к AVR подключена. Она у меня вообще с первого раза пошла и даже без отладки. А вот генератор в ней вообще отключить по моему невозможно. Я её и выбрал из её цены и потому что на выходе int можно получить секундные импульсы - очнгь удобно.
Цитата(day177 @ May 3 2007, 16:04)

Ковыряю PCF8583 в железе. В мэйне вызываем инициализацию i2c, потом инициализацию PCF8583, устанавливаем значение времени (пока для теста), в while показываем секунды и минуты, по прерыванию считываем время с PCF8583. Так вот затык в том что время как установилось так и не движется, т.е. часы не ходят - стоят на устанавленном значении. В чем может быть проблема? HELP PLEASE!!!!
А Вы осциллографам на кварце смотрели ? Резисторы на SDA и SCL стоят ? И уверены что вообще время устанавливаете, просто если после подачи питания стчитывать время оно должно идти.
А вы последовательно с кварцем постоянный конденсатор ставите?

ну не знаю,может у вас
кварцы особо точные.Я ставлю триммер 5/25 pf,на ногу INT с секундными импульсами частотомер в ре-
жиме измерения периода и кручу,кручу...Кварцы гуляют очень прилично.
to WHALE вот про это можно немного по-подробнее "на пине INT секундные импульсы,заведенные на прерывания проца.
читаю время из него один раз по включению,а далее по прерываниям программный счет-гораздо быстрее получается,чем постоянное считывание счетных регистров PCF."
А гадина эта таки завелась - перешил той же прошивкой и часики затикали. В чем была проблема хз.
а что тут непонятного?раз в секунду считывать с RTC его счетные регистры-это несколько пересылок
туда-сюда по достаточно тормознутой квадратной шине.Плюс лежат они там в BCD-формате-для инди-
кации ничего,но для работы мне неудобно-надо еще и распаковывать.Все это жрет процессорное время.Это только имхо-мне проще проще 1 раз считать с RTC время при старте системы,а дальше счи-
тать его прграммно в контроллере по секундным импульсам.
Кстати в книге "шина i2c в радиолюбительских конструкциях" - почти полный перевод даташита на PCF-ку. Щас сижу разбираюсь доконца, а то в англицком не силен. Всем спасибо за помощь
to WHALE я так и не понял после сброса чипа - PCF по умолчанию генерит прерывания каждую секунду или где-то надо что-то изменить?
если да, то в каком регистре и какой бит?
если вы под сбросом понимаете полное снятие питания-то да,по дефолту после сброса она работает в режиме персчета частоты кварца,а на выходе INT импульсы с частотй Fкварца/32768.Программно можно выход INT переключить на срабатывание аларма.Т.е при включении питания,если вы используете PCF только в режиме RTC,то регистры управления можно не трогать,они стоят как надо.
day177
May 10 2007, 06:26
Вот кусок даташита: «В режиме подсчета реального времени, если режим alarm не задействован, вывод INT может генерировать постоянные прерывания с частотой 1Гц и скважностью 50%.»
Вопрос: какие регистры и какие биты отвечают за это? Никак не пойму. Симулирую в Proteus, но прерывания не происходят – толи модель PCF-ки кривая, то ли я что-то неправильно делаю

HELP!!!
Согласно даташиту после подачи питания все должно стоять в режиме RTC c коэффициэнтом счета 32768.Ну можете для очистки совести в регистр статуса 0 записать.
З.Ы.-плюньте на протеус,что а реале творится?
day177
May 10 2007, 10:48
как же плюнуть на протеус - как же устройство отлаживать

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

как же плюнуть на протеус - как же устройство отлаживать

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

ЗЫ Кстати, надеюсь выход от чипа часов, тот который должен вызывать прерывание меги у тебя подтянут резистором на +U..
на схеме резюка не было, за сим не ставил. Потом полистал даташит - оказывается нада ставить (мастеркит мать его перемать

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

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