И все таки попробуйте увеличить стек и поработать по аппаратному флагу прерывания (см. выше)...mr_smit писал(а): 2 таймера нормально работают, но вот отмерить время (10-15 сек) не могу (3-им таймером)
Одновременная работа трех таймеров в ATMega8. Идет сбой.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Реклама
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Что такое стек и как его увеличить?
P.S. Прошивка сейчас занимает 61,5 % Flash (ATMega8)
P.S. Прошивка сейчас занимает 61,5 % Flash (ATMega8)
Нельзя всё знать, достаточно понимать.
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
"без паники...сичас она появится "...прошивку получил..ответ думаю 
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
НУ что я могу сказать 
1) это просто капец....сделали бы примитивнейший флаговый автомат и все обработки в цикле основном - но то херня....прога получается подвисает напроч при любых плавностях
2) нигде не увидел когда сбрасывается комманда cmd пришедшая с пульта....вы нажали кнопку на пульте - пошли прерывания, прерывания дергают обработчик который высичлит побитово комманду и записал в cmd дальше вы отпустили кнопу а в cmd код команды....вы его в цикле основном нашли чота сделали и чо дальше? cmd как было с тем кодом так и осталось...надо после исполнения cmd чистить....дальше...чо за изврат с ctc режимом работы таймера и компаре мач прерыванием? оно вообще может работать нормально?? нужно делать наоборот - режим работы таймера - нормальный, при старте таймера(по вашему - баклит он - вы таймеру говорите с какого числа начинать считать и запускаете на 12 килогерцах его....через FF-63=9C=156 тиков по 0,064 миллисекунды он переполнится и вызовется прерывание по переполнению...где вы его счет снова переустановите на 63 и инкрементируете переменную и если насчитаем 500 раз по 0,064 миллисекунды то что мы получим? в лучшем случае 30 миллисекунд задержку
вам надо по-другому делать но то ладно...учить не буду....сичас прикреплю файл исправленный - попробуете
1) это просто капец....сделали бы примитивнейший флаговый автомат и все обработки в цикле основном - но то херня....прога получается подвисает напроч при любых плавностях
2) нигде не увидел когда сбрасывается комманда cmd пришедшая с пульта....вы нажали кнопку на пульте - пошли прерывания, прерывания дергают обработчик который высичлит побитово комманду и записал в cmd дальше вы отпустили кнопу а в cmd код команды....вы его в цикле основном нашли чота сделали и чо дальше? cmd как было с тем кодом так и осталось...надо после исполнения cmd чистить....дальше...чо за изврат с ctc режимом работы таймера и компаре мач прерыванием? оно вообще может работать нормально?? нужно делать наоборот - режим работы таймера - нормальный, при старте таймера(по вашему - баклит он - вы таймеру говорите с какого числа начинать считать и запускаете на 12 килогерцах его....через FF-63=9C=156 тиков по 0,064 миллисекунды он переполнится и вызовется прерывание по переполнению...где вы его счет снова переустановите на 63 и инкрементируете переменную и если насчитаем 500 раз по 0,064 миллисекунды то что мы получим? в лучшем случае 30 миллисекунд задержку
вам надо по-другому делать но то ладно...учить не буду....сичас прикреплю файл исправленный - попробуете
- Вложения
-
- Dim2.rar
- вот подкоректированные исходники - пробуйте....если нарисуете примерную схему в протеусе и ещё чтото не будет работать - ждёмс
- (126.85 КБ) 152 скачивания
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Тоже погонял немного в симуляторе. Пока могу сказать, что переменная light_delay рушится, хотя и глобальная (14901 становиться - поэтому и выключает). С чем это связано, со стеком, множеством вложенных вызовом и т.д. трудно сказаать (все прелести кода описывать не буду, но глаза до сих пор на лбу) - в итоге CVAVR просто зашился - так вести себя он не должен. Итог - сломали компилятор, тоже результат, довольно редкий по нынешним временам...
Самое интересное - порча переменной так просто не устраняется (пробовал без входа в прерывание, и по указателю, и с локальной статической..), но далеко в код не лез, ибо там страшно и бесперспективно..
Последний раз редактировалось Goodefine Ср апр 06, 2011 12:44:03, всего редактировалось 1 раз.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18670
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
я более трусливый - еще с прошлого раза пуганый, в этот архив и не смотрелGoodefine писал(а):там страшно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
стэк там не при чём....ровно как и зашился или рушится...просто слишком часто прерывания вызываются...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
В вашем варианте точно так же (за исключением того что регистр TIMSK вы не поправили и переполнение не работает. Работает сравнение по прежнему. Но это сути не меняет..). Переменная Light_delay после строчки Light_delay=0; обнуляется, но когда входит в обработчик, там она уже имеет значение 14901, поэтому неравенство выполняется в тот же заход со всеми вытекающими. Спрашивается, каким образом? То же самое абсолютно, происходит если прерывания от Т2 НЕ использовать вообще - работать по флагу без входа в обработчик (соответственно не тратя на это время и не сохраняя контекст). Идеи есть, кроме глюка компилятора? Я с этим уже сталкивался (выше писал) - тогда с данными тоже фигня всякая происходила. Хотя это и следствие непродуманного кода, но все же так быть не должно...clawham писал(а):стэк там не при чём....ровно как и зашился или рушится...просто слишком часто прерывания вызываются...
Последний раз редактировалось Goodefine Ср апр 06, 2011 12:48:15, всего редактировалось 1 раз.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
дайте симку? 
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Опять же повторюсь, реакция на пульт "идеальная", регулировка яркости "идеальна". По крайней мере без сбоев/глюков. Гемор начинается при включении 3-го таймера.
Я любитель, и Си мне в университете не преподавали. И достигнутый на данный момент результат многого для меня стоит.
Понимаю что замахнулся на крутой проект, но отступать некуда. Плата распаяна, дисплей вклеен, провода для подключения из стены торчат. Зато надеюсь хоть кто то оценит идею. Ничего подобного в интернете нет. А некоторые светодиодные лампы сейчас идут с пометкой: "работает с любым типом диммеров" (это для тех кто говорит что лампа накаливания устарела).
Я любитель, и Си мне в университете не преподавали. И достигнутый на данный момент результат многого для меня стоит.
Понимаю что замахнулся на крутой проект, но отступать некуда. Плата распаяна, дисплей вклеен, провода для подключения из стены торчат. Зато надеюсь хоть кто то оценит идею. Ничего подобного в интернете нет. А некоторые светодиодные лампы сейчас идут с пометкой: "работает с любым типом диммеров" (это для тех кто говорит что лампа накаливания устарела).
Имеете ввиду проект в симуляторе? Его нет. Схему рисовал в протеусе, но она не симулируемая. S65, TSOP от руки нарисованы.clawham писал(а):дайте симку?
Последний раз редактировалось mr_smit Ср апр 06, 2011 12:50:43, всего редактировалось 1 раз.
Нельзя всё знать, достаточно понимать.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
? Добавьте в протеус мегу8 да кнопку прицепите на PD7 (ну и подтяжку в коде). Покажите coff протеусу (ну и частоту и прочее) . Далее в проге if(PIND.7) backlight_on();clawham писал(а):дайте симку?
И наблюдайте. Чего там моделировать...
Последний раз редактировалось Goodefine Ср апр 06, 2011 12:52:46, всего редактировалось 1 раз.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
ну протеусный файлик если ктото уже нарисовал...ато не очень понял чем генерить коды кнопок
- Вложения
-
- Dim2.rar
- вот попробуйте новую версию...нашел косяк и в прерываниях таймеров
- (144.17 КБ) 145 скачиваний
Последний раз редактировалось clawham Ср апр 06, 2011 12:58:21, всего редактировалось 1 раз.
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Нет у меня проекта в симуляторе!!!! Я схему рисовал для себя для сборки. И всё.
Нельзя всё знать, достаточно понимать.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Переименуйте в .DSN (распаковывать не надо) и выше пост подправил - почитайте. - файл в папку с исходниками ,без английских путей..
- Вложения
-
- dimmer.rar
- (68 КБ) 354 скачивания
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
тааа...я думал у когото появился рц5 генератор в моделях 
сичас вот поиграюсь
сичас вот поиграюсь
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
раз:clawham писал(а):нигде не увидел когда сбрасывается комманда cmd пришедшая с пульта....
Код: Выделить всё
if (b_cnt == 32) //если приняли уже 4 байта
{
if ((cmd_1 + cmd_0) == 0xFF) { //проверили правильность приема команды
cmd = cmd_1;
b_cnt = 0; //обнулили счетчик битов
start_cond = 0; //сбросили стартовое условие
}
else {
cmd = 0;
.....
Два:
Код: Выделить всё
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xFA; //переинициировали таймер - отсчитывает 96 мкс
tick++; //увеличили число тиков
if (tick > 500) { //если прошло более 48 мс
TCCR0=0x00; //сбросили все к исходному состоянию
TCNT0=0x00;
tick = 0;
start_cond = 0;
cmd = 0;
}
}В ду не надо лезть, там вроде все как надо работает.
Нельзя всё знать, достаточно понимать.
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Тоже повторюсь, что "правильность" написания это не есть сиюминутный результат - типа "работает идеально". Это, помимо грамотного использования ресурсов, еще и возможность легкого добавления или модернизации кода (что подразумевает продуманность логической конструкции) без негативных последствий, его читабельность и т.д. и т.п.mr_smit писал(а):Опять же повторюсь, реакция на пульт "идеальная", регулировка яркости "идеальна". По крайней мере без сбоев/глюков. Гемор начинается при включении 3-го таймера.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Да понимаю я всё это. И что любой из вас, профессионалов, напишет код лучше и грамотней. Понимаю я это. Только не легче мне от этого.
Что страшно? Draw_Bg_from_Eeprom() ? Если кто то знает как заполнить дисплей S65 (в 16-ти битном режиме) из двух 24LC256 скажите мне. (предварительно записав туда картинку). У меня получилось, никого не спрашивал. А вот с этим таймером никак. Поэтому и прошу помощи
Остальной код как умею, что поделать 
Код: Выделить всё
но далеко в код не лез, ибо там страшно и бесперспективно..
Последний раз редактировалось mr_smit Ср апр 06, 2011 13:20:15, всего редактировалось 2 раза.
Нельзя всё знать, достаточно понимать.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18670
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
вы не поверите: в тини13 запросто влезает фазорегулирующий диммер с ДУ (с обучением кнопкам любого пульта) на Си. а в тини13 всего один 8-битный таймер! я уже об этом говорил. даже отлично работающий код для приема кодов ДУ без применения таймеров вообще приводил... хотя бы в общий принцип разработки подобных многофункциональных программ рекомендовал вникнуть на основе моих кодов...
боюсь, больше мне помочь нечем, хотя поначалу было большое желание.
боюсь, больше мне помочь нечем, хотя поначалу было большое желание.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.
Можно подумать вы хоть чем то помогли.ARV писал(а):боюсь, больше мне помочь нечем
Уважаемый, ARV, давайте не будем пререкаться и флудить. У вас есть своё мнение, я его уважаю.
Последний раз редактировалось mr_smit Ср апр 06, 2011 13:24:25, всего редактировалось 1 раз.
Нельзя всё знать, достаточно понимать.


