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

Обсуждаем контроллеры компании Atmel.
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

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

Сообщение AlexRu »

Доброго дня всем. Контроллеры AVR изучаю пару месяцев. Застрял на модуле TWI. Написал программу (WinAVR GCC) для работы с ds1307 и вывод данных на четырех сегментный индикатор. Создал модель в протеусе. Запускаю - все работает отменно (пока нужны только азы - инициализация и чтение времени), кроме кнопки выбора индикации (часы-минуты или минуты-секунды), но проблема в другом - прошиваю мегу и в итоге на индикаторах 2.1.2.1 Экспериментально выяснил, что причина в фунции read_rtc () (проверяю - на ноге SDA - 0) если убрать эту функцию, после init_rtc() на SDA высокий уровень. Интуитивно чувствую что проблема в задержках, но опыта не достаточно, что бы определить где конкретно "собака порылась". Посему надеюсь на Вашу помощь.
Заранее благодарен.
Вложения
i2c.rar
Архив проекта. Компилятор - WinAVR
(86.22 КБ) 1700 скачиваний
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

могу выложить кусок программы на асме по работе DS1307 с АВР с использованием модуля TWI
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

Сообщение AlexRu »

Я в асме пока не силен. Мне бы на С... а точнее именно этот код разобрать. Я тут определил, что вся проблема именно в чтении данных. В TWSR после каждой операции проверял по кодам - все в норме (АСК передается нормально), а в место данных - белеберда...Блин даже не знаю что думать
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

все равно, посмотришь как хоть с ней правильно "общаться", там много подводных камней ))
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

Сообщение AlexRu »

Буду благодарен...Заодно наверное подниму уровень знаний по асму
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

Вот на, держи. Вопросы будут - пиши.
Вложения
DS1307.txt
(13.06 КБ) 1221 скачивание
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

Подобное случается при переносе из шпротеуса на железо. В железе обязательны резисторы подтяжки на +5В на сигналы SCL и SDA. Они у вас есть???
Цапу крутить надо!!! Ку или не ку?
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

Сообщение 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" - снова передача и сразу в единицу.


Кто-что может посоветовать??? Рисунков нету (мерял на работе) если что не понятно, постараюсь обьяснить.
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

На одной ноге кварца постоянка порядка 0,8...1 В, на второй синусоида 32768 Гц размах порядка 100мВ с постоянной составляющей 0,8...1 В. Для запуска генератора бит СН регистра SECONDS должен быть равен 0. Хоть и пишут в даташите что значения регистров при включении питания может быть любым, у меня в 90% случаев требовалось запустить генератор.
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

Сообщение AlexRu »

Так я прописал в функции:
void init_rtc (void)
{
twi_start ();
twi_sla_w (0xa0);
twi_transmite (0x00); //Адресс первой ячейки для записи (0x00)
twi_transmite (0x00); //Установка секунд и запуск часов
............
Так что запуск вроде бы как осуществляю
Аватара пользователя
grott
Опытный кот
Сообщения: 793
Зарегистрирован: Пн ноя 02, 2009 18:00:05
Откуда: Украина Николаев

Сообщение 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)); // обнулить старший бит(СН) и запустить внутренний генератор
Аватара пользователя
Ivanchik
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт окт 23, 2008 19:35:08

Сообщение Ivanchik »

без батарейки тоже работать не будет
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Ivanchik писал(а):без батарейки тоже работать не будет


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

Это вот если питание ниже, чем 1,25*Vbat (по моему), тогда виснуть будет на опросе, т.к. при этом DSка переключается на питание от батарейки, и шина не активна, работает только схема счёта времени.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Ivanchik
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт окт 23, 2008 19:35:08

Сообщение Ivanchik »

а каков тогда смысл реальных часов , если не подключать батарейку?
Сталкиваюсь с ними постоянно, думаю поболее ваших навыков и не судите по кол-ву сообщений в профиле, чаще просто читаю форум,- как результат меньше флуда..
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Во первых, убедительно прошу Вас не хамить.

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

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

Да, и по поводу "навыков". Я думаю, что Вам о них судить не стоит. Мы с Вами за руку не знакомы, да честно говоря и не хотелось бы.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Сообщение Danko »

Прикольно получилось с 25 декабря файл с проектом скачали больше 1000 раз, а ответов по делу не больше ... (лень считать).

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

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

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

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

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

Например у автора кварц стоит на 32768kHz и ничего в протеусе работает.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

Сообщение bevice »

Если еще актуально могу скинуть исходники для работы с i2c для gcc avr (winavr) (icq/skype в профиле)
с DS1307 наступил на грабли с резервной батарейкой - вход батарейки сравнивается со входом питания и если на батарейке больше скольких-то процентов (в даташите есть, оклоко 75%) интерфейсы отключаются и часы на внешние раздражители реагировать перестают.
Короче, если оставить болтаться или притянуть к питанию - работать не будет, выход или притягивать к земле или вешать батарейку.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Ну я же писал только что, при не подключенном выводе батареи часы РАБОТАЮТ!!!!!!!! ПРОВЕРЬТЕ!!!!!!!!!!
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

Сообщение bevice »

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

DS1307 не далее как вчера собирал на них игрушку - не работают, уходят в глухую спячку. На помеху не похоже, там наводкам есть куда стечь
После нас - хоть потоп (с) Лойсо
AlexRu
Родился
Сообщения: 17
Зарегистрирован: Пт дек 25, 2009 04:44:14
Откуда: Украина, Киев

Сообщение AlexRu »

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

Вернуться в «AVR»