Здравствуйте, ребята. Изучаю шину I2C и по ходу вопросы. Устройство работает (несмотря на ошибки в печатке, но это потом) и я бы успокоился, но иногда происходит неверное считывание с DS1307. И вот что я заметил: если в программе отсутствует строчка Xtal = 4, то задержка при записи в Xtal = 4 (DelayMS 1000) выполняется за 30 мс! И это и в Протеусе и в железе. Получается, что микроконтроллер тактируется с частотой в 30 раз больше заданной? Что я не понимаю? И все задержки меньше без Xtal = 4. Но по-умолчанию ведь тактовая частота 4? И, получается, импульсы считывания с DS1307 следуют с очень большой частотой и потому бывают ошибки? Проэкт прилагаю.
Я к тому что принудительная установка прескалера может каким-то образом влияет на подсчет задержки. Это же не ассемблер, тем более не машинные коды. Повесили задержки (сняли) , а установить забыли. Х.З. Вообще к конфигурированию отнесись построже. PHM - в помощь
Да я ж не просто так спрашиваю! Я уже по-всякому перепробывал. Вот и спрашиваю: почему без Xtal = 4 частота НЕ 4 МГц? И сколько тогда? Умножить на 30 ??? Судя по работе задержки на 1000...
Сообщение отредактировал
mikhail09p - Вс, 13.05.2012, 13:47
Извини работа. По умолчанию конфигурацию ловит в c:\Program Files\ProtonIDE\PDS\Includes\ В протеусе также устанавливается конфиг по умолчанию и править надо ручками. Щелчок на контроллере и видим частоту контроллера (вернее модели). Я ее иногда занижаю. когда мощности проца не хватает.
mikhail09p, обленился как кот. Вот кусок - Proton Compiler Manual - в переводе стр 181-182 примененного в твоей проге объявления
Quote
Declare Slow_Bus OFF
Бусин - Busout заявляет. Объявить SDA_Pin порта. Прикрепите Заявляет, порта и вывод для линии передачи данных (SDA). Это может быть любой допустимый порт на PICmicro ™. Если это заявляю не выдается в основной программе, то по умолчанию порта и Pin является PortA.0 Объявить SCL_Pin порта. Прикрепите Заявляет, порта и вывод для часов линия (SCL). Это может быть любой допустимый порт на PICmicro ™. Если это заявляю не выдается в основной программе, то по умолчанию порта и Pin является PortA.1 Объявить Slow_Bus On - Off, 1 - 0 Замедляет скорость шины при использовании генератора выше 4 МГц. Стандартная скорость для шины I2C является 100KHz. Некоторые устройства используют более высокую скорость автобуса 400 кГц. Если вы используете 8 МГц или выше генератор, частота шины может превышать спецификации устройств, что приведет к прерывистой пишет или читает, или в некоторых случаях вообще ни одной. Таким образом, использование этого объявить, если вы не уверены в спецификации устройства. Данные для используемого устройства будет информировать вас о своей скорости передачи данных. Объявить Bus_SCL On - Off, 1 - 0, или Правда - False устраняет необходимость подтягивающий резистор на линии SCL. I2C протокол требует, чтобы нагрузочного резистора требуется как на SCL и SDA линии, однако, это не всегда возможно из-за ограничений схемы и т.д., так как только Bus_SCL На Объявить выдается в верхней части программы, резистор на линии SCL может быть исключен из схемы. По умолчанию для компилятора, если Bus_SCL Объявление не выдается, в том, что подтягивающий резистор не требуется. Hbusin - Hbusout Declare. Объявить Hbus_Bitrate Постоянное 100, 400, 1000 и т.д. Стандартная скорость для шины I2C является 100KHz. Некоторые устройства используют более высокую скорость автобуса 400 кГц. Объявить выше позволяет I2C шиной быть увеличена или уменьшена. Используйте этот Объявить с осторожностью, поскольку слишком высокая скорость передачи данных может превышать спецификации устройства, что приведет к прерывистой сделок, а в некоторых случаях, не на всех операциях. Данные для используемого устройства будет информировать вас о своей скорости передачи данных. Скорость по умолчанию бит 100 кГц стандарт. Hserin, Hserout, Hrsin и Hrsout заявляет. Объявить Hserial_Baud Постоянное значение Установить скорость передачи данных, которая будет использоваться для получения значения последовательно. Скорость рассчитывается по Xtal частоты, объявленные в программе. По умолчанию скорость, если объявить, не включенных в листинг программы составляет 2400 бод. Объявить Hserial_RCSTA Постоянное значение (от 0 до 255) Hserial_RCSTA, устанавливает соответствующие PICmicro ™ аппаратных регистров RCSTA, до значения в Declare. См. лист Microchip данных для устройств, используемых для получения дополнительной информации относительно этого регистра. Объявить Hserial TXSTA Постоянное значение (от 0 до 255) тм Hserial TXSTA, устанавливает соответствующие PICmicro аппаратных регистров, TXSTA, до значения в Declare. См. лист Microchip данных для устройств, используемых для получения дополнительной информации относительно этого регистра. TXSTA регистр BRGH (бит 2) контролирует режим высокой скорости передачи сигнала генератора скорости. Некоторые скорость передачи данных при определенных скоростях генератор требует этот бит будет установлен в нормально работать. Для этого установите Hserial_TXSTA на сумму $ 24 вместо стандартных $ 20. Обратитесь к листу Microchip данных для аппаратных последовательных порта скорость передачи столов и дополнительная информация
Спасибо, anatol! Не обленился я, замучался. Это я видел. Значит, у меня частота 4 МГц и, соответственно скорость (частота) шины будет 100 КГц. Меньше нету возможности установить?
Не знаю. Не задумывался. ______________________________________ А вообще зачем нестандартное. Свое что-то решаешь по этому протоколу. Да и сам протокол не мешает обновить в памяти. А так в ассемблере подправить или на худой случай объявить кварц высокий а применить низкий. Свои тайминги уменшить пропорционально и тогда пониже будет.
Сообщение отредактировал
anatol - Вс, 13.05.2012, 19:55
Ок. Спасибо. Изучаю. А как увеличить частоту генератора в DS1307? Подключение конденсатора до минуса и одной ноги кварца ведь понижает частоту? А увеличить?
Есть уход часов! Медленней идут, чем нужно. 3 кварца пробывал. С кварцами из материнок вовсе плохо - ещё медленней. Неужели нету метода ускорить ход часов на DS1307? Неужель разработчики ничего не придумали? Или просто не подумали?
Попытайся с кондером 4-15Пф последовательно. Может не возбудится.
Quote
Точность Тут очень многое зависит от применяемого кварца и разводки платы. Даташит сообщает что емкость кварца должна быть 12.5 пф. Говорят, что лучше всего применять кварцы от материнских плат. Для коррекции хода можно подпаять к резонатору подстроечный конденсатором и при помощи него в небольших пределах менять частоту. Лично у меня эти часы работают вторые сутки и отстали на 3 секунды. Что-то мне подсказывает, что дело в ёмкости кварца, попробую другой отпишусь.
Quote
Делал подобное, отстают. В даташите кроме емкости кварца также написано что расположен он должен быть как можно ближе к выводам. Забил на отверстия, подпаял к выводам напрямую – отставание уменьшилось и заметно только при питании от батарейки часов (примерно 2-3 минуты за месяц). Кварц брал как раз от мамки.