Обсуждаем контроллеры компании Atmel.
Ответить

Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Чт май 31, 2018 21:53:30

Друзья, помогите понять проблему. Написал код для обработки нажатия кнопки энкодера (обвязка по даташиту с кондером и pull-down презистором).
В среде ардуино после загрузки все работает как надо, а вот если скопилировать аналогичный код в AmtelStudio7, программа глючит. Прерывание по нажатию срабатывает с 10 раза, иногда светодиод может включится, а по отжатию кнопки не погаснуть. В среде ардуино аналогичный код работает ОТЛИЧНО.

Сама atmega328p-au снята с платы ардуино и запущена от встроенного генератора.

Спойлер#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>


ISR(PCINT0_vect) { //обработка нажатия кнопки
PCICR=(0<<PCIE0); //выкл прерывание

if (PINB&0b00000001) {
PORTB |= (1<<(PORTB2));
}
else
{
PORTB &= ~(1<<(PORTB2));
}

PCICR=(1<<PCIE0); //вкл прерывание

}


int main(void) {

//Установка 12 нога PB0/PCINT0/arduino pin:8
PCICR |= (1<<PCIE0);//set Разрешаить прерывания блока
PCMSK0 |= (1<<PCINT0);//set Какая нога вызовет прерывание
DDRB |= (1<<DDB0);//set to input

//PB2 нога со светодиодом
DDRB |= (1<<DDB2);//set to output
sei();

while (1) {

}
return 0;
}

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Пт июн 01, 2018 14:08:53

Поставил CVAVR, загрузил - все работает. В чем проблема не понял. Придется видимо в нем работать.

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Пт июн 01, 2018 18:26:02

Внутри обработчика прерывания бессмысленно отключать другие прерывания - все прерывания запрещены аппаратно. Вместо int main лучше писать void main и ничего не возвращать - так сэкономится пару байт памяти.
Логичнее в обработчике менять фронт прерывания, а не заниматься лишними проверками.

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Сб июн 02, 2018 08:14:42

В0 настроен как выход, а значит сидит в 0. А вы на него 5 вольт ещё суёте. И как только работает...

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Сб июн 02, 2018 16:49:28

Это очепятка. Прогнал через дебаггер amtel studio, все работает. В чем же причинааааа?

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Сб июн 02, 2018 17:40:10

Опечатка через копипаст, оригинально.)))

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Сб июн 02, 2018 21:09:39

Ну вот, лучше что нибудь дельное подсказали ) может фьюзы или ещё что? Пробовал в cvavr code wizard, там все ставится в дефолт, там все работает, копирую в amtel studio, глючит.

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Вс июн 03, 2018 06:36:39

А вы бы делали что то, а то только помогите.
Текст выкладывайте, и оформите нормально.

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Вс июн 03, 2018 16:56:35

Как же не делал, написал же что делал ) И что там оформлять, там кода на четверть страницы. Какая то видимо ерундовая проблема. Тот бит что вы нашли уже в качестве экспериментов проскочил, поэтому и написал что очепятка...

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Вс июн 03, 2018 17:23:24

Это вам надо или мне? Тогда выкладывайте с чем работаете на данный момент.
И уважать надо других, а то помогите и при этом ковыряйтесь в моём говне. Или - или.

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Вс июн 03, 2018 18:46:38

Мне кажется вы несколько преувеличиваете, никакого неуважения нет в помине, одна сплошная уважуха ) И никакого моего "говна" в трех с половиной строчки простейшего кода я думаю нет, т.е. задача тривиальная - обработка нажатия кнопки и зажигания светодиода. Чтобы оно (мое говно) появилось хочу хотя бы решить эту проблему и настроить программное обеспечение. ) Поэтому еще раз: Программа работает в дебаггере, но не работает на плате - не срабатывает прерывание (срабатывает с 5-10 нажатия). Если тот же код загрузить через CVAVR все отлично работает. Если что, отсутствие "дребезга" кнопки проверено осциллографом. Сигнал с кнопки попадает на входную ножку МК (отсутствие дефектов монтажа). Кнопка подключена с кондером 0.1 и pull-down резистором 10К. ATMEGA 328P-AU запущена от внутреннего генератора. В настройках АМТЕЛ-а выбрана ATMEGA 328P. На всякий случай еще фьюзы МК прикладываю. Спасибо за внимание! ;-)


Спойлер#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>


ISR(PCINT0_vect) { //обработка нажатия кнопки
PCICR=(0<<PCIE0); //выкл прерывание

if (PINB&0b00000001) {
PORTB |= (1<<(PORTB2));
}
else
{
PORTB &= ~(1<<(PORTB2));
}

PCICR=(1<<PCIE0); //вкл прерывание

}


int main(void) {

//Установка 12 нога PB0/PCINT0/arduino pin:8
PCICR |= (1<<PCIE0);//set Разрешаить прерывания блока
PCMSK0 |= (1<<PCINT0);//set Какая нога вызовет прерывание
DDRB |= (0<<DDB0);//1-выход, 0-вход
//PB2 нога со светодиодом
DDRB |= (1<<DDB2);//1-выход, 0-вход
sei();

while (1) {

}
return 0;
}
Вложения
avrdude.jpg
(112.7 KiB) Скачиваний: 548

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Пн июн 04, 2018 12:00:03

Говно - это когда вы начинаете предложение с маленькой буквы, пишете без знаков препинания, отступов и т.п. Когда мне нужно напрягаться что бы понять о чё вы. Аналогично и в тексте программы. Я должен смотреть на это и разбираться с вашим говнокодом, пусть даже с 3-мя строчками. Проблем нет, но заради чего? Вы пальцем не можете пошевелить, что бы привести это в удобочитаемый вид, при том что это ВАМ надо, а хотите получить решение вашей проблемы. Вот это и называется неуважением. Это ж как 2х2, что тут можно разжевывать.
Удачи!

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Пн июн 04, 2018 16:52:09

Ппц. Удобочитаемый это как, я просто не понимаю о чем речь? Там все с комментами, если об этом, ну кроме записи в порт, но тут даже мне не требуется комментарий. :shock:

Re: Arduino->AmtelStudio7 - PCINT0_vect проблема с кнопкой

Вт июн 05, 2018 22:27:12

В результате выяснилось что МК работает не стабильно от внутреннего генератора на частоте 8Мгц! Включил по дефолту из даташита CKDIV8, т.е. частота /8 и все заработало… Правда тут 1Мгц будет. Не понятно не работает в принципе на 8-ми или что, мне и 1-го хватит ))). Так что кто все-таки столкнётся с подобной проблемой теперь знает шо делать. А то тут столько народу ходит, то ли лень писать то ли программистов нет, просто удивительно!!! Один товарищ тут развел оффтоп - бредоромашку про уважение/не уважение... ШОК! По фату такие горе советчики, лучше вообще ничего не пишите. Если руки чешутся а заний НУЛЬ, посмотрите хорошее кино на ххх.ком…
Ответить