veso74 писал(а):ISR(ADC_vect) имеет более низкий приоритет чем ISR(TIMER0_OVF_vect). Т.е. если программа находится в первом фрагменте кода, то индикация иногда прерывает расчет.
глупость ты сказал.
работа АЦП и работа таймера не зависят друг от друга.
а обработать результат измерения можно без проблем после окончания прерывания от таймера.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
[uquote="veso74",url="/forum/viewtopic.php?p=4524008#p4524008"]ISR(ADC_vect) имеет более низкий приоритет чем ISR(TIMER0_OVF_vect). Т.е. если программа находится в первом фрагменте кода, то индикация иногда прерывает расчет.[/uquote]
При чем здесь приоритеты? У ТС ведь нет вложенных прерываний.
В прерываниях здесь вообще нет необходимости - только дополнительные хлопоты и возможные ошибки.
Несколько переменных не объявлены волатильными, хотя изменяются в обработчике...
В вообще, код - страх и ужас(. И так оно и работает...
Считайте как ошибка машинного перевода. Имел в виду избегать прерывание в прерывании, с чем ATmega8 не справляется, в отличие от других микроконтроллеров.
Последний раз редактировалось veso74 Сб дек 30, 2023 16:33:57, всего редактировалось 1 раз.
поставил конденсатор на 100 нФ на AREF -показания стали плавать больше. Реально хуже...
Добавлено after 5 minutes 41 second:
[uquote="OKF",url="/forum/viewtopic.php?p=4524059#p4524059"][uquote="veso74",url="/forum/viewtopic.php?p=4524008#p4524008"]ISR(ADC_vect) имеет более низкий приоритет чем ISR(TIMER0_OVF_vect). Т.е. если программа находится в первом фрагменте кода, то индикация иногда прерывает расчет.[/uquote]
При чем здесь приоритеты? У ТС ведь нет вложенных прерываний.
В прерываниях здесь вообще нет необходимости - только дополнительные хлопоты и возможные ошибки.
Несколько переменных не объявлены волатильными, хотя изменяются в обработчике...
В вообще, код - страх и ужас(. И так оно и работает...[/uquote]
Я не претендую на звание синьора. Учусь, написал как смог, потому здесь и спрашиваю, так как понимаю, что сделано не совсем по феншую. Делал по примерам другого кода из инета. Скажу больше, большинство кода, которое просмотрел, когда разбирался с АЦП так и построено.
Последний проект был совсем не давно, надо было считать сопротивление с платинового датчика РТ100, и вывести его на лсд с помощью атмеги8, с точностью 1 градус ( Цельсия естественно). И всё получилось .
Добавлено after 8 minutes 17 seconds:
Это датчик рт100 в кипящем чайнике
Добавлено after 23 minutes 20 seconds:
А это тот же датчик, только в парУ над кипящей водой
Не спрашивай по ком звонит колокол, он звонит по тебе !
[uquote="Alex_641",url="/forum/viewtopic.php?p=4524169#p4524169"]Последний проект был совсем не давно, надо было считать сопротивление с платинового датчика РТ100, и вывести его на лсд с помощью атмеги8, с точностью 1 градус ( Цельсия естественно). И всё получилось .
Добавлено after 8 minutes 17 seconds:
Это датчик рт100 в кипящем чайнике
Добавлено after 23 minutes 20 seconds:
А это тот же датчик, только в парУ над кипящей водой
[/uquote]
Кодом поделитесь?, посмотреть, может чего-то нового понять...
veso74 писал(а): Имел в виду избегать прерывание в прерывании, с чем ATmega8 не справляется
зачем избегать? и АТмега8 справится и без проблем. просто в обработчике прерывания нужно сразу разрешить прерывания, и тогда другое прерывание прервёт этот обработчик.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.