Доброго дня всем. Контроллеры AVR изучаю пару месяцев. Застрял на модуле TWI. Написал программу (WinAVR GCC) для работы с ds1307 и вывод данных на четырех сегментный индикатор. Создал модель в протеусе. Запускаю - все работает отменно (пока нужны только азы - инициализация и чтение времени), кроме кнопки выбора индикации (часы-минуты или минуты-секунды), но проблема в другом - прошиваю мегу и в итоге на индикаторах 2.1.2.1 Экспериментально выяснил, что причина в фунции read_rtc () (проверяю - на ноге SDA - 0) если убрать эту функцию, после init_rtc() на SDA высокий уровень. Интуитивно чувствую что проблема в задержках, но опыта не достаточно, что бы определить где конкретно "собака порылась". Посему надеюсь на Вашу помощь. Заранее благодарен.
Я в асме пока не силен. Мне бы на С... а точнее именно этот код разобрать. Я тут определил, что вся проблема именно в чтении данных. В TWSR после каждой операции проверял по кодам - все в норме (АСК передается нормально), а в место данных - белеберда...Блин даже не знаю что думать
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Резисторы есть. Сегодня достал осц и немного поигрался. Получил кучу вопросов:
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" - снова передача и сразу в единицу.
Кто-что может посоветовать??? Рисунков нету (мерял на работе) если что не понятно, постараюсь обьяснить.
Зарегистрирован: Пн май 05, 2008 14:36:30 Сообщений: 94 Откуда: г. Челябинск
Рейтинг сообщения:0
На одной ноге кварца постоянка порядка 0,8...1 В, на второй синусоида 32768 Гц размах порядка 100мВ с постоянной составляющей 0,8...1 В. Для запуска генератора бит СН регистра SECONDS должен быть равен 0. Хоть и пишут в даташите что значения регистров при включении питания может быть любым, у меня в 90% случаев требовалось запустить генератор.
Так я прописал в функции:
void init_rtc (void)
{
twi_start ();
twi_sla_w (0xa0);
twi_transmite (0x00); //Адресс первой ячейки для записи (0x00)
twi_transmite (0x00); //Установка секунд и запуск часов
............
Так что запуск вроде бы как осуществляю
Карма: 31
Рейтинг сообщений: 149
Зарегистрирован: Пн ноя 02, 2009 18:00:05 Сообщений: 793 Откуда: Украина Николаев
Рейтинг сообщения:0
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, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Ivanchik писал(а):
без батарейки тоже работать не будет
Откуда это, интересно, такая уверенность. Вы хоть попробовали бы перед тем как строчить пост, а то дезинформация получается, не хорошо!
Это вот если питание ниже, чем 1,25*Vbat (по моему), тогда виснуть будет на опросе, т.к. при этом DSка переключается на питание от батарейки, и шина не активна, работает только схема счёта времени.
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
а каков тогда смысл реальных часов , если не подключать батарейку?
Сталкиваюсь с ними постоянно, думаю поболее ваших навыков и не судите по кол-ву сообщений в профиле, чаще просто читаю форум,- как результат меньше флуда..
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Во первых, убедительно прошу Вас не хамить.
По сути:
Я ни в коем разе не сужу о человеке по "кол-ву сообщений в профиле", я сужу по его конкретному посту, да и вообще, я не сужу, не судья я, просто читаю пост, вижу чушь, нет, ПОЛНУЮ НЕ ОБОСНОВАННУЮ ЧУШЬ, и знаете, так хочется рассказать миру правду, прям не могу...
Вам я посоветовал бы почаще не читать форумы, плодя чушь и распространяя мнения ничего не имеющие с реальной жизнью, а раз уж Вы так часто сталкиваетесь с подобными вещами, просто попробовать в "железе", а не просто пересказывать чужие утверждения, этим Вы показываете не самые лучшие свои стороны (хотя, как знать).
Да, и по поводу "навыков". Я думаю, что Вам о них судить не стоит. Мы с Вами за руку не знакомы, да честно говоря и не хотелось бы.
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Прикольно получилось с 25 декабря файл с проектом скачали больше 1000 раз, а ответов по делу не больше ... (лень считать).
Прикол №2: при этом ветку просмотрели не более 500 раз.
По делу: В апреле 2008 я под CVAVR писал TWI библиотеку для DS1308. Так вот в железе она работает, а в протеусе нет.
По поводу библиотеки автора поста:
у меня на компе программа автора запускается но через время комп вылетает (перезагружается), а такое у меня происходит при симуляции программы с ошибкой т.е. могу сказать, что и в протеусе программа работает некорректно. При этом моя программа со стандартной библиотекой из CVAVR работает и протеус не вылетает.
Небольшое замечание автору поста: к проекту в протеусе параллельно выкладывайте схему ту которую вы собираете в железе это упростит задачу желающим Вам помочь и избавит от пустой помощи (типа "без батарейки работать не будет", "подтягивающие резисторы поставь"), а ведь это все в железе имеется.
В протеусе много чего работает, то что в железе не работает и наоборот.
Например у автора кварц стоит на 32768kHz и ничего в протеусе работает.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Если еще актуально могу скинуть исходники для работы с i2c для gcc avr (winavr) (icq/skype в профиле)
с DS1307 наступил на грабли с резервной батарейкой - вход батарейки сравнивается со входом питания и если на батарейке больше скольких-то процентов (в даташите есть, оклоко 75%) интерфейсы отключаются и часы на внешние раздражители реагировать перестают.
Короче, если оставить болтаться или притянуть к питанию - работать не будет, выход или притягивать к земле или вешать батарейку.
_________________ После нас - хоть потоп (с) Лойсо
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Ну я же писал только что, при не подключенном выводе батареи часы РАБОТАЮТ!!!!!!!! ПРОВЕРЬТЕ!!!!!!!!!!
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Так чем дальше в лес...
Сами часики вроде в норме. Проблема с контроллером (точнее с программой). Я отключил контроллер от часиков, далее запускаю и проверяю осцом что у меня на SDA и SCL. В итоге вообще запутался - идет передача данных, а в перерывах шина лежит в нуле. Почему проц может не отпускать шину???? (чтение данных спецом отрубил, а также индикацию и прерывания - контроллер в режиме мастер-передатчик). Может кто-то что-то поможет…А то беда - контроллер весь учу всего пару месяцев, а тут на одной шине i2c зависнул уже на две недели.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения