Страница 1 из 5

Не могу запустить RTC DS1307 на Atmega8

Добавлено: Пт дек 25, 2009 05:05:28
AlexRu
Доброго дня всем. Контроллеры AVR изучаю пару месяцев. Застрял на модуле TWI. Написал программу (WinAVR GCC) для работы с ds1307 и вывод данных на четырех сегментный индикатор. Создал модель в протеусе. Запускаю - все работает отменно (пока нужны только азы - инициализация и чтение времени), кроме кнопки выбора индикации (часы-минуты или минуты-секунды), но проблема в другом - прошиваю мегу и в итоге на индикаторах 2.1.2.1 Экспериментально выяснил, что причина в фунции read_rtc () (проверяю - на ноге SDA - 0) если убрать эту функцию, после init_rtc() на SDA высокий уровень. Интуитивно чувствую что проблема в задержках, но опыта не достаточно, что бы определить где конкретно "собака порылась". Посему надеюсь на Вашу помощь.
Заранее благодарен.

Добавлено: Пт дек 25, 2009 11:00:41
NiceMAN
могу выложить кусок программы на асме по работе DS1307 с АВР с использованием модуля TWI

Добавлено: Пт дек 25, 2009 12:08:19
AlexRu
Я в асме пока не силен. Мне бы на С... а точнее именно этот код разобрать. Я тут определил, что вся проблема именно в чтении данных. В TWSR после каждой операции проверял по кодам - все в норме (АСК передается нормально), а в место данных - белеберда...Блин даже не знаю что думать

Добавлено: Сб дек 26, 2009 10:17:29
NiceMAN
все равно, посмотришь как хоть с ней правильно "общаться", там много подводных камней ))

Добавлено: Пн дек 28, 2009 13:04:40
AlexRu
Буду благодарен...Заодно наверное подниму уровень знаний по асму

Добавлено: Вт дек 29, 2009 14:35:26
NiceMAN
Вот на, держи. Вопросы будут - пиши.

Добавлено: Вт дек 29, 2009 21:39:42
Igor_67
Подобное случается при переносе из шпротеуса на железо. В железе обязательны резисторы подтяжки на +5В на сигналы SCL и SDA. Они у вас есть???

Добавлено: Ср дек 30, 2009 00:05:53
AlexRu
Резисторы есть. Сегодня достал осц и немного поигрался. Получил кучу вопросов:
1. Кто может, померяйте осцилограмму на ногах кварца (на rtc). У меня в упор там постоянка порядка вольта, может меньше (на второй ноге). Должны ли присутствовать импульсы на первом, втором выводах rtc?
2. Отключил rtc вообще от контроллера и тут у меня начались чудеса...Инициализация проходит нормально, а вот когда программа заходит в основной цикл (я для простоты добавил задержку в 500 мс между функциями read_rtc и shou_clock:
read_rtc ();
_delay_ms (500);
shou_clock ();
)
При этом на осцилограмме наблюдаеться следующая картина:
Если развертку сузить около секунды - то на SDA и SCL просто меандр с периодом около секунды!!! Если растянуть до значения порядка сотни мкс - тогда видно что при спаде имульса идет передача байта, потом линия лежит все время приблизительно те же 500 мс, потом снова передача и линия прыгает в единицу...снова заержка (где-то около 500 мс и в это время sda и scl = "1") и все повторяеться занова.

3. Когда я убрал из фунции read_rtc все после первого стопа (передача sla_r и чтение данных), то осцилограмма преодбрела нормальных вид - передача байта - лини в "1" - снова передача и сразу в единицу.


Кто-что может посоветовать??? Рисунков нету (мерял на работе) если что не понятно, постараюсь обьяснить.

Добавлено: Ср дек 30, 2009 06:35:24
NiceMAN
На одной ноге кварца постоянка порядка 0,8...1 В, на второй синусоида 32768 Гц размах порядка 100мВ с постоянной составляющей 0,8...1 В. Для запуска генератора бит СН регистра SECONDS должен быть равен 0. Хоть и пишут в даташите что значения регистров при включении питания может быть любым, у меня в 90% случаев требовалось запустить генератор.

Добавлено: Ср дек 30, 2009 11:51:32
AlexRu
Так я прописал в функции:
void init_rtc (void)
{
twi_start ();
twi_sla_w (0xa0);
twi_transmite (0x00); //Адресс первой ячейки для записи (0x00)
twi_transmite (0x00); //Установка секунд и запуск часов
............
Так что запуск вроде бы как осуществляю

Добавлено: Вс янв 03, 2010 19:00:25
grott
NiceMAN писал(а): Для запуска генератора бит СН регистра SECONDS должен быть равен 0. Хоть и пишут в даташите что значения регистров при включении питания может быть любым, у меня в 90% случаев требовалось запустить генератор.

Это точно. Долго я перечитывал DataSheet и на русском и на английском. Вся фишка в том, что надо сначала прочесть нулевой байт, а потом обнулить старший бит. Вот мой кусочек кода в CAVR:

// Ds1307 Real Time Clock initialization
// Squre wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
a=rtc_read(0); // прочесть нулевой байт
rtc_write(0,(a&=0b01111111)); // обнулить старший бит(СН) и запустить внутренний генератор

Добавлено: Чт янв 07, 2010 14:48:22
Ivanchik
без батарейки тоже работать не будет

Добавлено: Чт янв 07, 2010 17:59:32
Pooher
Ivanchik писал(а):без батарейки тоже работать не будет


Откуда это, интересно, такая уверенность. Вы хоть попробовали бы перед тем как строчить пост, а то дезинформация получается, не хорошо!

Это вот если питание ниже, чем 1,25*Vbat (по моему), тогда виснуть будет на опросе, т.к. при этом DSка переключается на питание от батарейки, и шина не активна, работает только схема счёта времени.

Добавлено: Чт янв 07, 2010 19:52:24
Ivanchik
а каков тогда смысл реальных часов , если не подключать батарейку?
Сталкиваюсь с ними постоянно, думаю поболее ваших навыков и не судите по кол-ву сообщений в профиле, чаще просто читаю форум,- как результат меньше флуда..

Добавлено: Чт янв 07, 2010 23:09:24
Pooher
Во первых, убедительно прошу Вас не хамить.

По сути:
Я ни в коем разе не сужу о человеке по "кол-ву сообщений в профиле", я сужу по его конкретному посту, да и вообще, я не сужу, не судья я, просто читаю пост, вижу чушь, нет, ПОЛНУЮ НЕ ОБОСНОВАННУЮ ЧУШЬ, и знаете, так хочется рассказать миру правду, прям не могу...

Вам я посоветовал бы почаще не читать форумы, плодя чушь и распространяя мнения ничего не имеющие с реальной жизнью, а раз уж Вы так часто сталкиваетесь с подобными вещами, просто попробовать в "железе", а не просто пересказывать чужие утверждения, этим Вы показываете не самые лучшие свои стороны (хотя, как знать).

Да, и по поводу "навыков". Я думаю, что Вам о них судить не стоит. Мы с Вами за руку не знакомы, да честно говоря и не хотелось бы.

Добавлено: Чт янв 07, 2010 23:50:26
Danko
Прикольно получилось с 25 декабря файл с проектом скачали больше 1000 раз, а ответов по делу не больше ... (лень считать).

Прикол №2: при этом ветку просмотрели не более 500 раз. :))

По делу:
В апреле 2008 я под CVAVR писал TWI библиотеку для DS1308. Так вот в железе она работает, а в протеусе нет.

По поводу библиотеки автора поста:
у меня на компе программа автора запускается но через время комп вылетает (перезагружается), а такое у меня происходит при симуляции программы с ошибкой т.е. могу сказать, что и в протеусе программа работает некорректно. При этом моя программа со стандартной библиотекой из CVAVR работает и протеус не вылетает.

Небольшое замечание автору поста: к проекту в протеусе параллельно выкладывайте схему ту которую вы собираете в железе это упростит задачу желающим Вам помочь и избавит от пустой помощи (типа "без батарейки работать не будет", "подтягивающие резисторы поставь"), а ведь это все в железе имеется.

В протеусе много чего работает, то что в железе не работает и наоборот.

Например у автора кварц стоит на 32768kHz и ничего в протеусе работает.

Добавлено: Сб янв 09, 2010 22:31:14
bevice
Если еще актуально могу скинуть исходники для работы с i2c для gcc avr (winavr) (icq/skype в профиле)
с DS1307 наступил на грабли с резервной батарейкой - вход батарейки сравнивается со входом питания и если на батарейке больше скольких-то процентов (в даташите есть, оклоко 75%) интерфейсы отключаются и часы на внешние раздражители реагировать перестают.
Короче, если оставить болтаться или притянуть к питанию - работать не будет, выход или притягивать к земле или вешать батарейку.

Добавлено: Вс янв 10, 2010 21:30:18
Pooher
Ну я же писал только что, при не подключенном выводе батареи часы РАБОТАЮТ!!!!!!!! ПРОВЕРЬТЕ!!!!!!!!!!

Добавлено: Пн янв 11, 2010 18:14:58
bevice
Pooher писал(а):Ну я же писал только что, при не подключенном выводе батареи часы РАБОТАЮТ!!!!!!!! ПРОВЕРЬТЕ!!!!!!!!!!

DS1307 не далее как вчера собирал на них игрушку - не работают, уходят в глухую спячку. На помеху не похоже, там наводкам есть куда стечь

Добавлено: Вт янв 12, 2010 01:20:05
AlexRu
Так чем дальше в лес...
Сами часики вроде в норме. Проблема с контроллером (точнее с программой). Я отключил контроллер от часиков, далее запускаю и проверяю осцом что у меня на SDA и SCL. В итоге вообще запутался - идет передача данных, а в перерывах шина лежит в нуле. Почему проц может не отпускать шину???? (чтение данных спецом отрубил, а также индикацию и прерывания - контроллер в режиме мастер-передатчик). Может кто-то что-то поможет…А то беда - контроллер весь учу всего пару месяцев, а тут на одной шине i2c зависнул уже на две недели.