Спасибо, за комплименты и ценные советы по оформлению. Наглядность моего кода повысилась.
Но прерывание не появилось. Может все таки есть идеи в чем дело?
Насчет МК - эта крошка поражает своими возможностями, но я что-то устала, от отсутствия информации кроме даташита, что-то очень сложно найти.
Мне только славные рыцари с этого форума помогают.
Lilia, попробуйте отсечь всё лишнее пока для теста. Для начала банально поставить кнопку на PA2, на какой-нибудь другой пин светодиод и попробовать по прерыванию включать-выключать светодиод. Так-то приведенный фрагмент вроде правильный. Судя по ДШ ничего более и не надо для работы прерывания включать вроде бы.
Что нужно поставить, чтобы хотя в симуляторе студии погонять attiny1607? У мну xp и семёрка. Какая студия или какое либо другое программное обеспечение от мелкочипов?
Заинтриговали вы меня этой тинькой...
Добавлено after 8 minutes 42 seconds:
Lilia, не спешите опускать руки. Я поглядел в даташит, и у меня уже моск вскипел... Прорвёмся, разберёмся...
Небольшой вопросик по AVR СИ.
Надо записать в порт А старшую тетраду, при этом не испортив младшую тетраду порта.
Придумал такое, не знаю правильно или нет:
сэмулировать чтоб посмотреть не знаю как, сразу вставлять в программу - если это неправильно, то это вряд ли будет единственной ошибкой. В общем, межуюсь.
[uquote="Shuspano",url="/forum/viewtopic.php?p=4009888#p4009888"]не знаю правильно или нет[/uquote]
Во-первых, не правильно, во-вторых, не помешало бы указать о каких AVR идет речь, потому что на новых для подобных целей есть специальные регистры. Если говорить про старые AVR, то там если пины сконфигурированы как входы, то PORTx включает подтяжки, т.е. если какой-то пин сконфирурирован именно так, то чтение PINx будет возвращать 1, но только до той поры пока ты на вход не повесишь какую-нибудь кнопку и не нажмешь ее, тогда прочитаешь 0, соответственно и запишешь тоже 0... Читать нужно не уровень на входе, а данные защелки, т.е. сам PORTx. Ну и не зря на новых AVR появились дополнительные регистры с атомарным доступом, по нормально на время подобных операций нужно отключать прерывания...
Раз уж заговорили про порты, то подкинули мне на днях новую tiny1614 и вчера я набросал несколько простых классов для работы с портами на С++20, может кому-то будет интересно:
Спойлер
Ребята привет! Пытаюсь обуздать АЦП прерывание по переполнению на Тиньке13, что не правильно делаю, или не понимаю что делаю? в протусе PORTB.1 прыгает, выдает меандр, а не должен(( Остальные ведут себя нормально, пока только симуляция в Протусе, в железе не делал.
[uquote="NStorm",url="/forum/viewtopic.php?p=4042092#p4042092"]kote52, замысел опишите, гадать что должна делать ваша программа никто не будет.[/uquote]
Простое управление стеклоподъемниками, нажатие кнопок считывается при помощи АЦП, пассажирская дверь дублируется на водительской стороне. Два канала АЦП один для водительской двери - четыре кнопки (две водительское стекло две пассажирское), второй канал для пассажирской двери две кнопки. Сделал два канала ацп для того чтобы, если управляю водительским стеклом была возможность управлять пассажиру его стеклом в этот момент. Но если водитель управляет пассажирским стеклом, пассажир не может управлять его стеклом.
а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
[uquote="ARV",url="/forum/viewtopic.php?p=4042317#p4042317"]а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?[/uquote]
Исходил из наличия резисторов и выше описал почему! Так это проблема два канала опросить? Да просто чисто для образования хочу понимать как это делать в первую очередь! Писать код под две нажатые кнопки на разных дверях(водительское стекло вверх пассажирское виз к примеру), чтоб понималось что и куда нажалось и что с этим делать че т сложно и муторно((
Надо настроить тики от внешнего генератора (ecs-5032mv-100-cn-tr).
Регистры настройки тиков защищены. Снимаю защиту, изменить делитель получается, а переключить внешний генератор - никак.
Причем если в регистре MCLKCTRLA в режиме отладки натыкать нужные биты - то программа пойдет выполняться. Иначе подвиснет ожидая while.
6.5.0
text data bss dec hex filename
31970 60 1703 33733 83c5 build/ampcontrol_atmega32_st7920.elf
7.5.0
text data bss dec hex filename
31636 60 1703 33399 8277 build/ampcontrol_atmega32_st7920.elf
8.5.0
text data bss dec hex filename
31622 60 1703 33385 8269 build/ampcontrol_atmega32_st7920.elf
9.3.0
text data bss dec hex filename
31774 60 1703 33537 8301 build/ampcontrol_atmega32_st7920.elf
9.4.0
text data bss dec hex filename
31774 60 1703 33537 8301 build/ampcontrol_atmega32_st7920.elf
10.3.0
text data bss dec hex filename
31926 60 1703 33689 8399 build/ampcontrol_atmega32_st7920.elf
11.2.0
text data bss dec hex filename
32074 98 1703 33875 8453 build/ampcontrol_atmega32_st7920.elf
Вывод такой - вплоть до 8 версии качество оптимизации улучшалось, а потом начало становиться хуже. Ну, или есть какие-то новые тайные опции у компилятора, которые могли бы вернуть размер кода на прежний уровень.
Да, разница между лучшим и худшим вариантом не более 3%, но иногда, когда прошивка уже впритирку подбирается к размеру flash, это может быть существенно.