Спасибо, за комплименты и ценные советы по оформлению. Наглядность моего кода повысилась.
Но прерывание не появилось. Может все таки есть идеи в чем дело?
Насчет МК - эта крошка поражает своими возможностями, но я что-то устала, от отсутствия информации кроме даташита, что-то очень сложно найти. Мне только славные рыцари с этого форума помогают.
Lilia, попробуйте отсечь всё лишнее пока для теста. Для начала банально поставить кнопку на PA2, на какой-нибудь другой пин светодиод и попробовать по прерыванию включать-выключать светодиод. Так-то приведенный фрагмент вроде правильный. Судя по ДШ ничего более и не надо для работы прерывания включать вроде бы.
Что нужно поставить, чтобы хотя в симуляторе студии погонять attiny1607? У мну xp и семёрка. Какая студия или какое либо другое программное обеспечение от мелкочипов? Заинтриговали вы меня этой тинькой...
Добавлено after 8 minutes 42 seconds: Lilia, не спешите опускать руки. Я поглядел в даташит, и у меня уже моск вскипел... Прорвёмся, разберёмся...
Небольшой вопросик по AVR СИ. Надо записать в порт А старшую тетраду, при этом не испортив младшую тетраду порта. Придумал такое, не знаю правильно или нет:
сэмулировать чтоб посмотреть не знаю как, сразу вставлять в программу - если это неправильно, то это вряд ли будет единственной ошибкой. В общем, межуюсь.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Во-первых, не правильно, во-вторых, не помешало бы указать о каких AVR идет речь, потому что на новых для подобных целей есть специальные регистры. Если говорить про старые AVR, то там если пины сконфигурированы как входы, то PORTx включает подтяжки, т.е. если какой-то пин сконфирурирован именно так, то чтение PINx будет возвращать 1, но только до той поры пока ты на вход не повесишь какую-нибудь кнопку и не нажмешь ее, тогда прочитаешь 0, соответственно и запишешь тоже 0... Читать нужно не уровень на входе, а данные защелки, т.е. сам PORTx. Ну и не зря на новых AVR появились дополнительные регистры с атомарным доступом, по нормально на время подобных операций нужно отключать прерывания...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Раз уж заговорили про порты, то подкинули мне на днях новую tiny1614 и вчера я набросал несколько простых классов для работы с портами на С++20, может кому-то будет интересно: Спойлер
Код:
template<int portBase, uint8_t mask> class PortT : PortBase { public: static auto _inline_ port() { return (PORT_t*)portBase; } static auto _inline_ vport() { return (VPORT_t*)(portNumber * 4); }
Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
Добавлено: Чт июн 03, 2021 20:38:34
Встал на лапы
Зарегистрирован: Пт мар 19, 2021 08:58:45 Сообщений: 103
Рейтинг сообщения:0
Ребята привет! Пытаюсь обуздать АЦП прерывание по переполнению на Тиньке13, что не правильно делаю, или не понимаю что делаю? в протусе PORTB.1 прыгает, выдает меандр, а не должен(( Остальные ведут себя нормально, пока только симуляция в Протусе, в железе не делал.
Код:
Chip type : ATtiny13 AVR Core Clock frequency: 9,600000 MHz Memory model : Tiny External RAM size : 0 Data Stack size : 16 *******************************************************/
#include <tiny13.h> #include <delay.h>
unsigned int adc0,adc2; bit flag1,flag2;
#define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 2 unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; // Bandgap Voltage Reference: Off #define ADC_VREF_TYPE ((0<<REFS0) | (0<<ADLAR))
// ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the AD conversion result adc_data[input_index]=ADCW; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); }
kote52, замысел опишите, гадать что должна делать ваша программа никто не будет.
Простое управление стеклоподъемниками, нажатие кнопок считывается при помощи АЦП, пассажирская дверь дублируется на водительской стороне. Два канала АЦП один для водительской двери - четыре кнопки (две водительское стекло две пассажирское), второй канал для пассажирской двери две кнопки. Сделал два канала ацп для того чтобы, если управляю водительским стеклом была возможность управлять пассажиру его стеклом в этот момент. Но если водитель управляет пассажирским стеклом, пассажир не может управлять его стеклом.
а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?
Исходил из наличия резисторов и выше описал почему! Так это проблема два канала опросить? Да просто чисто для образования хочу понимать как это делать в первую очередь! Писать код под две нажатые кнопки на разных дверях(водительское стекло вверх пассажирское виз к примеру), чтоб понималось что и куда нажалось и что с этим делать че т сложно и муторно((
Надо настроить тики от внешнего генератора (ecs-5032mv-100-cn-tr). Регистры настройки тиков защищены. Снимаю защиту, изменить делитель получается, а переключить внешний генератор - никак. Причем если в регистре MCLKCTRLA в режиме отладки натыкать нужные биты - то программа пойдет выполняться. Иначе подвиснет ожидая while.
Подскажите, где же тут собака порылась?
Код:
CCP = CCP_IOREG_gc; // снять защиту от записи регистров CLKCTRL.MCLKCTRLB = 0x00; //выключаем делитель
CCP = CCP_IOREG_gc; // снять защиту от записи регистров CLKCTRL.MCLKCTRLA = 0x03; //CLKCTRL_CLKSEL_gm; //включаем внешний осциллятор while((CLKCTRL.MCLKSTATUS & 0x80) == 0); //ждем включения осциллятора
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, это может быть существенно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения