Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.07.2011, 20:40
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от SasaVitebsk
|
Обычно я не просматриваю длинные проги - как правило это пустая трата времени. А автор должен локализовать проблему и сжато её представить публике. Но сейчас я в отпуске. )) Глянул - проникся. ))) Автор суров!!!!
Этож каким надо быть монстром, чтобы так кодить. )))
п/п __sign, как писал незабвенный Гашек - это "один и не самый яркий пример того, какие ослы ещё рождаются под луной".
Обычно реализуется так ...
unsigned char const Digit[16] = {0x77, 0x05,... };
вместо __sign(a), к примеру, пишется
PORTB = Digit[a];
п/п __print - это надо полагать пример динамической индикации, в понимании автора. Я не кровожадный человек, но в некоторых странах мира, за такое бы казнили всю семью.
Если вы, artyomugr, планируете и дальше этими исходниками пользоваться, то в принципе могу помочь. Но всётаки общие рекомендации я бы дал совершенно другого плана.
===
Но для начала вопрос по аппаратной части. Там фотоприёмник должен быть с тем же фильтром, что и пульт. Это соблюдено?
|
Здравствуйте! =)
Вот и я в шоке с этого исходника... Но мне он понравился своей понятностью... Но вот он не рабочий это сто процентов, я еще в протеусе в этом убедился! Вот примерчик бы понятный как данные фиксировать определенной длительности...
|
|
|
|
16.07.2011, 20:49
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от SasaVitebsk
|
В вашем варианте он равен 8МГц/256/3 = 96 мкс.
|
Так так стоп... а почему еще нужно делить на 3 ?????!!!
TCCR0=0x04;
TCNT0=0xFD; // 253
что то я запутался..... нужно ведь делить на два?
А таймер я как раз и настраивал на частоту 31.250кГц
Попробую перелопатить значения переменной tick кто мне понятным языком расскажет алгоритм декодера sony sirc ?
С ув. Артем
|
|
|
|
16.07.2011, 20:52
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от SPKostenko
|
Вы пытаетесь отловить стартовый импульс длительностью: 96 мкс х 55= 5,280 мс, тогда как длительность стартовой последовательности всего 3 мс (2,4 мс + 0,6 мс), рекомендую :" if (tick ›= 29 && tick ‹ 35) " , дальше все приблизительно попадает, но у меня так " if (tick ›= 10 && tick ‹ 16 && start_cond)" и " if (tick ›= 22 && tick ‹ 28 && start_cond)". В Протеусе при таких значения все работает , а если что-то не так, то достаточно легко прочитать значение "tick" и сделать соответствующие изменения.
|
Вот спасибо Вам огромнейшее!!! Сегодня дома попробую!
|
|
|
|
16.07.2011, 20:56
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от MisterDi
|
Для работы с ИК рекомендую прогу RсЕxplorer сильно облегчает жизнь при отладке приема/передачи.
|
Спасибо Вам большое! Скачаю, попробую. У меня на компе есть winlirc Помогает сильно! Есть какие то приемущества в Вашей программе по сравнению с этой?
|
|
|
|
16.07.2011, 20:59
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от SPKostenko
|
К сведению, вы используете 12-битный вариант протокола в программе, но ведь есть и 15- и 20-битные варианты протокола , может быть есть смысл уточнить по пульту
|
Нет именно 12бит! Пульт самодельный, я и кода посылки знаю, собран он на пике (пик10ф200) Не помню на каком сайте нашел прошивку и схему, я его повторил. Но вот недавно захотел повторить уже имеющийся пульт только захотелось написать код самому, под атмегу и отправлять те самые кода посылок. У меня это получилось. У меня есть декодер для управления двумя реле (тоже с того сайта), вот я и хочу сделать декодер, хотя бы для того чтоб разобраться с таймером и дополнительно набраться опыта в программировании.
Последний раз редактировалось artyomugr; 16.07.2011 в 21:03.
|
|
|
|
16.07.2011, 21:06
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от CodeNameHawk
|
Посылка пульта выглядит так
Вам надо отловить стартовый импульс.
Первое прерывание у вас в точке 1, итог стартовый импульс потерян.
Декодирование будет работать и без стартового импульса, но это как то не "кошерно".
|
Что то я и с прерываниями запутался...
Разве прерывание не сработает когда придет стартовый импульс (лог 0) 2400мкс? я же настраиваю на спад, значит должно сработать по низкому уровню, переходом с высокого на низкий... у нас был лог. 1 а станет лог. 0 разве tick не начнет тикать?? =)
|
|
|
|
16.07.2011, 21:33
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от artyomugr
|
Так так стоп... а почему еще нужно делить на 3 ?????!!!
TCCR0=0x04;
TCNT0=0xFD; // 253
что то я запутался..... нужно ведь делить на два?
|
Именно на 3 так как 256-253 =3. Переполнение таймера.
Именно по этому я и рекомендовал запись типа (unsigned char) - 3. Было бы нагляднее.
===
Вот зачем вы мучаетесь одновременно ковыряясь в разных участках программы? Поясните?
Отладка осуществляется последовательно. Например в своей программе в прерываниях инвертируйте какую нибудь ногу и посмотрите осцилографом что получилось. Если вы не уверены в правильности формирования задержек. Отладили этот момент - и больше к нему не возвращаетесь, так как уверены в нём.
|
|
|
|
16.07.2011, 21:50
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Сообщение от SasaVitebsk
|
Именно на 3 так как 256-253 =3. Переполнение таймера.
Именно по этому я и рекомендовал запись типа (unsigned char) - 3. Было бы нагляднее.
===
Вот зачем вы мучаетесь одновременно ковыряясь в разных участках программы? Поясните?
Отладка осуществляется последовательно. Например в своей программе в прерываниях инвертируйте какую нибудь ногу и посмотрите осцилографом что получилось. Если вы не уверены в правильности формирования задержек. Отладили этот момент - и больше к нему не возвращаетесь, так как уверены в нём.
|
Вот если бы был овцелограф... я-бы наверное уже решил проблему...
А так приходится мучить в слепую...
Теперь я понял почему на три делится , спасибо Вам!
|
|
|
|
17.07.2011, 02:03
|
|
Вид на жительство
Регистрация: 22.06.2006
Адрес: Украина
Сообщений: 308
Сказал спасибо: 19
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Мысль прозвучала выше "не стоит останавливать таймер, пусть считает тики, а в нужное время их (тики) сбрасывать".
В таком случае можно отловить и разрыв пакета (если интервал между импульсами больше стандартного) и автоповтор (при зажатой кнопке пакеты посылаются в SIRC с определенным интервалом)
Но тут есть важное замечание! Нельзя допускать переполнение счетчика тиков. Нужно останавливать счет (просто не увеличивать значение) спустя время "пульт потух и все кнопки давно отпущены".
По поводу кода. Тоже присоединяюсь к мысли настроить перывание на изменение уровня и уже в прерывании смотреть фронт это или спад.
Дабы разобраться с таймером и его настройками, предлагаю настроить таймер по примеру моего кода (начало темы) - я помню, что те задержки я расчитывал в Экселе, дабы поддерживать максимально уход от стандартных таймингов и при этом не путать ноль с единицей и корректно определять стартовый.
Если нет осцилла -- COM Вам в руки
В данном случае это замечательный вариант отладки - можно увидеть, что и в какой последовательности делает Ваш код.
Последний раз редактировалось AndryG; 17.07.2011 в 02:06.
|
|
|
|
17.07.2011, 15:06
|
|
Частый гость
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Я бы задачу разделил на 2 части : 1-я - отладить и запустить программу виртуально , исходник (оригинал), который Вы указали прекрасно работает в Протеусе с моими исправлениями
if (tick ›= 29 && tick ‹ 35) ...
if (tick ›= 10 && tick ‹ 16 && start_cond) ...
if (tick ›= 22 && tick ‹ 28 && start_cond) ...
сам код в том же проекте Протеуса сделал на другой Мега 8, кроме того для удобства чтения в Протеусе при отладке, я исправил
volatile int tick , volatile char addr , volatile char cmd , что позволяет при отладке легко прочитать tick , addr , cmd, затем во 2-й части разобраться с железом - какое питание?, как установлены фьюзы?, кроме того смущает , что Ваш пульт - самоделка, убедиться выдает ли он то, что надо. В 1-й части проблем не вижу - все работает.
|
|
|
Сказали "Спасибо" SPKostenko
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:34.
|
|