Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.07.2011, 18:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Помогите пожалуйста разобраться :(
Сообщение от SasaVitebsk
|
Работа компилятора должна соответствовать принятому стандарту. Инициализация - чётко расписана. А именно: если переменная глобальная, то она буде проинициализирована. Ели не указано инициирующее значение при объявлении, то эта переменная будет инициализирована 0. Кроме того будут инициализированы временные переменные объявленные как static.
|
Сообщение от artyomugr
|
Вот я так и представлял работу компилятора, и честно был удивлен тем что компиль может не присвоить ей значения...
|
в CV чётко! прописано - "Use an External Startup Inictialization File (Yes/No)" Если Галка стоит- то,будьте любезны- Сами всё делать, если нет- то Всю начальную инициализацию компилятор делает сам (обнуление переменных, регистров...) (байт 200-300 занимает )
Последний раз редактировалось OlegNZH; 15.07.2011 в 18:45.
|
|
|
|
15.07.2011, 19:04
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
По логике программы :
Вы реагируете только по заднему фронту импульса.
Как вы собираетесь поймать стартовый импульс?
Совет, вам давали правильный, настроить внешнее прерывание на изменение уровня и с приходом фронта импульса запускать таймер на счет, а с приходом спада импульса обрабатывать результат, не забывая сбрасывать переменную "tick".
Последний раз редактировалось CodeNameHawk; 15.07.2011 в 19:07.
|
|
|
|
15.07.2011, 19:12
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Помогите пожалуйста разобраться :(
Сообщение от OlegNZH
|
в CV чётко! прописано ...
|
По поводу CV море коментариев и я не буду повторятся. Поэтому я и написал "Работа компилятора должна соответствовать принятому стандарту." Использовать компилятор несоответсвующий стандарту - в дальнейшем чревато послетствиями. И все эти рюшечки типа 0b01010... Или PORTC.2 обязательно вылезут боком.
И ведь что характерно, преимуществ никаких. Кроме всего исходники "заточенные" под CV написаны, как правило, так чтобы с ними было мучительно больно разбираться и сложно переносить.
Тем не менее, по идее, галочка должна стоять по умолчанию в соответствии со стандартом. Они же тоже не дураки.
С другой стороны, любой компилятор должен иметь возможность отключить начальную инициализацию, если автор хочет в ручную оптимизировать проект. Это делается уже не в рамках стандарта, а в рамках конкретного компилятора. И продвинутый пользователь, прочитавший мануал на данный компилятор, сможет это реализовать.
Например, для IAR существует квалификатор __no_init, который, на мой взгляд демонстрирует более красивый подход. Данные помеченные данным квалификатором размещаются линкером в другом сегменте данных и не инициализируются. Это оптимизирует работу инициализатора + локализует неинициализированные данные + даёт возможность неинициализировать часть данных. Птичкой так не сделаешь.
|
|
|
|
15.07.2011, 19:27
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
artyomugr, обращаю ваше внимание на ещё одну нестыковку. Если вы правильно запрограммировали фузы (то есть на 8МГц, по умолчанию там 1МГц), то обратите внимание что в исходнике таймер программируется следующим образом TCCR0=0x04; Если поднять даташит на atmega8, то мы увидим, что это соответствует Fclk/256 = 31.25кГц. В исходниках, в коментариях, указано значение Clock value: 125,000 kHz. Это соответствует TCCR0=0x03;
Собсбвенно это паралельно если вы верно высчитали значение вашего такта tick. В вашем варианте он равен 8МГц/256/3 = 96 мкс.
|
|
|
Сказали "Спасибо" SasaVitebsk
|
|
|
15.07.2011, 19:28
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Посылка пульта выглядит так
![Нажмите на изображение для увеличения
Название: Sony.JPG
Просмотров: 47
Размер: 21.3 Кб
ID: 23870](https://kazus.ru/forums/attachment.php?attachmentid=23870&thumb=1&d=1310743474)
Вам надо отловить стартовый импульс.
Первое прерывание у вас в точке 1, итог стартовый импульс потерян.
Декодирование будет работать и без стартового импульса, но это как то не "кошерно".
Последний раз редактировалось CodeNameHawk; 15.07.2011 в 19:38.
|
|
|
Сказали "Спасибо" CodeNameHawk
|
|
|
15.07.2011, 21:25
|
|
Частый гость
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Вы пытаетесь отловить стартовый импульс длительностью: 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" и сделать соответствующие изменения.
|
|
|
Сказали "Спасибо" SPKostenko
|
|
|
15.07.2011, 21:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
а может volatile поставить на переменные в прерываниях которые используются?
(фиг знает (в код не вникал))
"The volatile modifier must be used to warn the compiler that it may be subject to outside change during evaluation"
Последний раз редактировалось OlegNZH; 15.07.2011 в 21:40.
|
|
|
Сказали "Спасибо" OlegNZH
|
|
|
15.07.2011, 21:37
|
|
Частый гость
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Прошу прощения, конечно для Протеуса надо еще написать небольшую прогу (у меня для Атмега ![Горд собой](images/smilies/icon_dovl.gif) с протоколом работы Sony только в инверсном виде ( ведь в действительности с ИК-приемника сигнал приходит низким уровнем) и подать на Ваш вход внешнего прерывания.
|
|
|
|
15.07.2011, 22:05
|
|
Частый гость
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
К сведению, вы используете 12-битный вариант протокола в программе, но ведь есть и 15- и 20-битные варианты протокола , может быть есть смысл уточнить по пульту
|
|
|
|
15.07.2011, 22:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Помогите разобраться с таймером в Atmega8
Для работы с ИК рекомендую прогу RсЕxplorer сильно облегчает жизнь при отладке приема/передачи.
__________________
misterdi<@>i.ua
|
|
|
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:46.
|
|