Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 15.07.2011, 18:29  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Помогите пожалуйста разобраться :(

Сообщение от SasaVitebsk Посмотреть сообщение
Работа компилятора должна соответствовать принятому стандарту. Инициализация - чётко расписана. А именно: если переменная глобальная, то она буде проинициализирована. Ели не указано инициирующее значение при объявлении, то эта переменная будет инициализирована 0. Кроме того будут инициализированы временные переменные объявленные как static.
Сообщение от artyomugr Посмотреть сообщение
Вот я так и представлял работу компилятора, и честно был удивлен тем что компиль может не присвоить ей значения...
в CV чётко! прописано - "Use an External Startup Inictialization File (Yes/No)" Если Галка стоит- то,будьте любезны- Сами всё делать, если нет- то Всю начальную инициализацию компилятор делает сам (обнуление переменных, регистров...) (байт 200-300 занимает )
Вложения:
Тип файла: rar STARTUP(asm).rar (676 байт, 42 просмотров)
Реклама:

Последний раз редактировалось OlegNZH; 15.07.2011 в 18:45.
OlegNZH вне форума  
Непрочитано 15.07.2011, 19:04  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

По логике программы :

Вы реагируете только по заднему фронту импульса.
Как вы собираетесь поймать стартовый импульс?

Совет, вам давали правильный, настроить внешнее прерывание на изменение уровня и с приходом фронта импульса запускать таймер на счет, а с приходом спада импульса обрабатывать результат, не забывая сбрасывать переменную "tick".

Последний раз редактировалось CodeNameHawk; 15.07.2011 в 19:07.
CodeNameHawk вне форума  
Непрочитано 15.07.2011, 19:12  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Помогите пожалуйста разобраться :(

Сообщение от OlegNZH Посмотреть сообщение
в CV чётко! прописано ...
По поводу CV море коментариев и я не буду повторятся. Поэтому я и написал "Работа компилятора должна соответствовать принятому стандарту." Использовать компилятор несоответсвующий стандарту - в дальнейшем чревато послетствиями. И все эти рюшечки типа 0b01010... Или PORTC.2 обязательно вылезут боком.
И ведь что характерно, преимуществ никаких. Кроме всего исходники "заточенные" под CV написаны, как правило, так чтобы с ними было мучительно больно разбираться и сложно переносить.
Тем не менее, по идее, галочка должна стоять по умолчанию в соответствии со стандартом. Они же тоже не дураки.
С другой стороны, любой компилятор должен иметь возможность отключить начальную инициализацию, если автор хочет в ручную оптимизировать проект. Это делается уже не в рамках стандарта, а в рамках конкретного компилятора. И продвинутый пользователь, прочитавший мануал на данный компилятор, сможет это реализовать.
Например, для IAR существует квалификатор __no_init, который, на мой взгляд демонстрирует более красивый подход. Данные помеченные данным квалификатором размещаются линкером в другом сегменте данных и не инициализируются. Это оптимизирует работу инициализатора + локализует неинициализированные данные + даёт возможность неинициализировать часть данных. Птичкой так не сделаешь.
SasaVitebsk вне форума  
Непрочитано 15.07.2011, 19:27  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" SasaVitebsk
artyomugr (16.07.2011)
Непрочитано 15.07.2011, 19:28  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Посылка пульта выглядит так
Нажмите на изображение для увеличения
Название: Sony.JPG
Просмотров: 47
Размер:	21.3 Кб
ID:	23870
Вам надо отловить стартовый импульс.
Первое прерывание у вас в точке 1, итог стартовый импульс потерян.
Декодирование будет работать и без стартового импульса, но это как то не "кошерно".

Последний раз редактировалось CodeNameHawk; 15.07.2011 в 19:38.
CodeNameHawk вне форума  
Сказали "Спасибо" CodeNameHawk
artyomugr (16.07.2011)
Непрочитано 15.07.2011, 21:25  
SPKostenko
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
SPKostenko на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" SPKostenko
artyomugr (16.07.2011)
Непрочитано 15.07.2011, 21:37  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" OlegNZH
artyomugr (16.07.2011)
Непрочитано 15.07.2011, 21:37  
SPKostenko
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
SPKostenko на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Прошу прощения, конечно для Протеуса надо еще написать небольшую прогу (у меня для Атмега с протоколом работы Sony только в инверсном виде ( ведь в действительности с ИК-приемника сигнал приходит низким уровнем) и подать на Ваш вход внешнего прерывания.
SPKostenko вне форума  
Непрочитано 15.07.2011, 22:05  
SPKostenko
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
SPKostenko на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

К сведению, вы используете 12-битный вариант протокола в программе, но ведь есть и 15- и 20-битные варианты протокола , может быть есть смысл уточнить по пульту
SPKostenko вне форума  
Непрочитано 15.07.2011, 22:31  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Для работы с ИК рекомендую прогу RсЕxplorer сильно облегчает жизнь при отладке приема/передачи.
Вложения:
Тип файла: zip RcExplorer.zip (1,006.8 Кб, 61 просмотров)
__________________
misterdi<@>i.ua
MisterDi вне форума  
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
artyomugr (16.07.2011), Mikronez (18.07.2011)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться ,АЦП Тину 13, что то не так... Botan Микроконтроллеры, АЦП, память и т.д 2 14.09.2010 18:31
Помогите разобраться с таймером begun Proteus 1 11.04.2010 19:07
Помогите разобраться с импульсными стабилизаторами Vas2 Источники питания и свет 8 07.12.2007 17:27
pic16f870 - Помогите разобраться с таймерами bopohok Микроконтроллеры, АЦП, память и т.д 9 02.05.2007 16:50
кто пользуеться VMLABом. помогите разобраться... zuuuuk Proteus, KiCAD и другие ECAD 1 04.10.2006 12:12


Часовой пояс GMT +4, время: 06:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot