within писал(а):Прерывание, как следствие переполнения таймера/счётчика, происходит раз в сек. Исходя из этого, имеем 1000мс от начала одного до начала другого на всё, что душа пожелает при условии, что: 1. это время внутри обработчика; 2. помимо обработчика ничего более не надо.
Хм, исходя из (2) - убери всё из цикла в main() и будет тебе "щастье".
within писал(а):В этом устройстве, помимо обработчика, нужно три кнопки читать. На это нужно время.
Тебе требуется ТАК много времени на опрос кнопок?
within писал(а):Код: Выделить всё
Точно издеваешься. Сильно сдвинув время входа в обработчик прерываний ты даешь ему возможность потерять следующее прерывание.
Это не я издеваюсь, это ты...) Я это прекрасно понимаю и без твоих смешков) Но я не сдвигаю время входа! Я пытаюсь узнать, что в цикле while может это сделать? Почему именно в нём?
Именно в нём потому, что ничего другого нет. А причина элементарная - потеря прерывания. Думаешь иначе? Давай, выдвини свою теорию.
within писал(а):Ты думаешь, что даже при самом плохом раскладе вычислений и чтения температуры(9 бит), этот расклад может сожрать 73% времени сверх?
Ага. Давай посмотрим на гениальный код:
Код: Выделить всё
devices=w1_init(); //ищем датчик
ds18b20_init(0,-50,50,1); //ставим границы "аварии", и разрешение 9бит
if(devices>0)
{
Tnew=ds18b20_temperature(0); //читаем температуру
}
Сколько времени занимает поиск датчика? И зачем его искать каждую секунду? Сколько времени выполняется инициализация?
Кстати, а писать "0" вместо NULL это специально? Да, компилятору это одинаково, но не так читабельно.
Ну а писать вместо константы число... А ты УВЕРЕН что настроил термометр на 9 бит, а?
within писал(а):Ну и проверь функцию delay_ms() - не запрещает ли она прерывания при работе.
А ты разве не знаешь? Если бы знал, то не писал бы такое.
Я не знаю что CVAVR творит в данной функции, но я бы уже давно посмотрел на asm исходник.
within писал(а):Как вариант, ты никогда не использовал одновременно прерывания и задержки времени. Хотя странно это...

Давно ты с контроллерами знаком? Как изучал? Что делал? На каком языке писал?
Ваууу, ну ты попа-а-а-ал... Щазз разогну пальцы веером
Записывай.
<тут пальцы разгибаются>
* с 1990 ZX-Spectrum. бейсик и ассемблер. (MMD, ZX-News, ... Надеюсь тебе это ничего не говорит

)
* с 1996 PC. asm x86, С, С++. Основное направление - связь.
* с 2000 AVR. ассемблер, С.
* с 2005 Z380. С
* c 2008 Blackfin. С, С++
* с 2011 чуть-чуть MSP430. С.
Тебя интересуют мои более-менее крупные поделки на контроллерах?
(Кстати, а Z80, Z380 и BF-537 будем считать контроллерами?)
* простенький реобас для ПЦ (3 датчика, 2 кулера)
* часы. 2 будильника, 4 больших 7-ми сегментника, 4 кнопки. Резервная батарейка, контроль батарейки, вывод напряжения и мигание индикатора "меняй батарейки"
Тикают уже лет 10.
* часы-метео. 6 индикаторов о 17 сегментах (мечта децццтва), RGB-светодироды.
5 кнопок, 4 будильника, резервная батарейка с контролем. DS18B20 внутри часов (этот датчик лишний на самом деле).
Два отдельных модуля на tiny: каждый меряет температуру, давление, влажность. Один в комнате, второй на балконе.
Связь по RS-485, контроль подключения и отключения модулей "на лету".
В часах организовано 16 "каналов данных", каждый модуль пишет в свои каналы. А при "нахождении" модуля часами, модуль сообщает в какие каналы он будет писать, как именно часам выводить данные из канала (число цифр, наличие запятой, положение на индикаторах, название измерения).
* Бортовой комп для машинки, он же музыка.
Модуль подключается к штатной магнитоле WV, выступая в роли CD-ченджера. (ага, разбираемся с протоколом между магнитолой и ченджером).
С другой стороны модуль подключается к плееру iRiver, управляя им. В итоге кнопки на "голове" управляют всей системой, а плеер через "голову" играет.
Прошивку для плеера тоже правил, в итоге управляю как хочу, а из плеера выходит название трека, время и ты-пы.
Помимо отображения на "голове" отдельный модуль с LCD (самый простой WH1602C).
Помимо музЫки БК читает данные с датчиков машины: уровень топлива, импульсы с форсунки, с датчика скорости. И на этих данных в реальном времени вычисляется мгновенный расход, средний расход, максимальная и минимальные скорости, сколько бензина потратили, на сколько км ещё осталось.
* бортовой комплекс для более новой машинки.
1. модуль стеклоподъемника. Доводчик и вверх и вниз, закрытие окон по сигналке. Кнопки же будут и управлять всем комплексом.
2. Радио-метео модуль. AVR + CC1101 + BMP085 + SHT10. Опрашивает датчики, читает команды от сигналки (ага, опять разборки с протоколом).
Всё это "щастье" передается в эфир. На руке eZ430-Chronos с переделанной прошивкой, которые принимают данные и выводят их. Ну и писчат, когда сигналка срабатывает.
3. Модуль индикации. AVR + LCD Nokia 6100 + DS18B20. Игрался и с LCD 3310 - не понравилось.
Всё это хозяйство связано по своей сеточке, плюс простенький протокол. В процессе сейчас (3), поэтому для отладки (2) лежит рядышком с ним на столе.
Но, это всё домашние игрушки. Тебе хочется серьёзных вещей? Их есть у меня.
* промышленная система: энергоучет, телеметрия, телеуправление
Как просто доработки существующей, так и разработка новой с нуля. (не я один, это понятно уж).
Моё: ядро (система реального времени), SD-карта, многоканальное АЦП, TCP/IP стек,
HTTP-сервер, журналирование, контроль работоспособности процессов, ...
<тут пальцы cгибаются обратно>
Теперь скажи въюноша бледный, со взором горящим - достаточно ли я опытен, чтобы давать тебе советы?
И можно теперь поинтересоваться твоими опытом и наработками?
