T/C2

Здесь все вопросы по языку программирования С
AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 27 сен 2016, 16:31

На сколько я понимаю, есть false и true. false==0; true>0; т.е. любое число отличное от "0" это истина. По этому я решил что "А" работает как истина. ИСПРАВИМ!

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 27 сен 2016, 17:16

USART для меня пока недостижимая вершина. Пока даже в флагах таймера не смог разобраться, так что отложу пока это в не очень дальний ящик.
Заменил я в "switch" на case2:, по логике вроде все правильно, но машина не едет! Попытался сделать ветвление оператором "if", тоже не видит! Такое ощущение (за неимением знания), что в INT0 эти операции запрещены. Вывел значение в while(1), но и там результат нулевой. Что за беда! Понятно одно, надо размышлять не своей логикой, а логикой камня, но это с опытом и если такие люди как вы что подскажут, иначе нам удачи не видать! Куда копать подскажите?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: T/C2

Сообщение gurvinok » 28 сен 2016, 01:22

Лучше один раз увидеть чес 100 раз прочитать. А точнее мне лень столько писать. Вот интересное кино я заснял на тему внешнего прерывания.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 28 сен 2016, 13:00

Спасибо большое за "кино"! А когда можно ждать следующие серии? А можно вас попросить снять "кино" по интересующим темам, или у вас свои виды по поводу следующих серий?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: T/C2

Сообщение gurvinok » 28 сен 2016, 13:57

Я такие кино не первый раз снимаю. Если темы будут однотипными, то запущу серию по ним. Какие еще темы интересуют?
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 28 сен 2016, 21:46

Здравствуйте! Конечно же меня на данный момент интересуют темы, которые в настоящее время создают мне проблемы при создании кода. На пример, вы конечно помните что была у меня проблема подключения таймера и прерывания INT0. Хотелось бы посмотреть как бы вы решили подобную задачу. Давайте уточню задачу: от входящего сигнала на ножку int0 происходит прерывание по переднему фронту. ПИНС0 которым нужно управлять устанавливается в лог."0". Таймер начинает отсчет и при достижении обусловленного OCR2 значения, происходит прерывание по совпадению. ПИНС0 устанавливается в лог."1". Таймер начинает новый отсчет и при достижении обусловленного OCR2 значения, происходит прерывание по совпадению. ПИНС0 обнуляется.
Предложите пожалуйста вашу версию кода по описанному алгоритму.

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: T/C2

Сообщение gurvinok » 28 сен 2016, 21:58

ПИНС0 которым нужно управлять устанавливается в лог."0".
Зачем? Если он и так в нуле.
Алгоритм простой. В обработчике INT0 обнуляем регистр счета TCNT2 = 0x00; и взводим флаг flag = 1;
Далее сидим и ждем пока не досчитает до нужного значения таймер. Как досчитал вваливаемся в обработчик прерывания по совпадению и смотрим, если флаг 1, то выставляем на ПИНС0 единицу и сбрасываем флаг в ноль и обнуляем счетчик, если флаг был сброшен, то просто тупо сбрасываем ПОРТС0 в ноль. Я бы еще потом запретил прерывание от таймера, а в обработчике IBT0 включал его, дабы пока кнопка не нажимается МК не бегал в прерывание от таймера.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 28 сен 2016, 22:38

flag-это что? флаг по таймеру или по int0?
ДА, на словах и я как видите рассказать горазд, а живой рабочий код прописать!!!
Назовите название флага и я по вашей схеме нарисую код.

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: T/C2

Сообщение gurvinok » 28 сен 2016, 22:41

Да флаг это просто переменная. Взводить, сбрасывать по таймеру.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: T/C2

Сообщение AVRIK » 28 сен 2016, 23:03

А на каких радостях таймер будет работать при живом прерывании int0. Вы же сами писали "вектор INT0 стоит вторым после RESET по приоритету, а это значит что пока МК сидит в теле прерывания INT0, прерывания от таймера никогда не произойдет. Для решения задачи нужно просто в теле INT0 выставлять флаг" так как же все таки заработает таймер. Вы говорите ISR(INT0_vect)
{
TCNT2=0x00;
unsigner char flag=0;
}
а дальше говорите: сидим и ждем пока не досчитается до нужного значения таймер. А с чего тут таймер заведется, с того что TCNT2=0x00; может эта запись запускает таймер и я не знаю про это? А может вы еще что то подразумеваете как само собой разумеющееся?

Ответить