fresh.rus Опубликовано 27 января, 2013 Поделиться Опубликовано 27 января, 2013 Ковыряю в Proteus свой виртуальный ATtiny2123 в попытках написать мигание светодиодом без delay. Копал в сети информацию на эту тему, но толком ничего не понял, хотя судя по всему это надо иметь дело с прерываниями, если правильно понял. Задача очень простая, мигать диодами не используя _delay_ms(). Перешел на изучение AVR с Arduino, так там считалось такое по таймеру. Функция millis(), которая считала миллисекунды с начала выполнения Arduino, но в AVR ничего готового такого не нашел. Кто может доступно объяснить про эту тему и все что с ней связано? Заранее благодарен. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tcoder Опубликовано 27 января, 2013 Поделиться Опубликовано 27 января, 2013 Если имеется ввиду, что Вам нужно избежать подвешивания основной программы во время "отсчитываний" интервалов между миганиями - то это настройка таймера + обработка прерывания от этого таймера. В датащите обычно это довольно детально описывается. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
fresh.rus Опубликовано 27 января, 2013 Автор Поделиться Опубликовано 27 января, 2013 Да, именно, мне совсем не нужно занимать МК одним лишь светодиодом. Завтра буду уже смотреть даташит, а там отпишусь. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
tcoder Опубликовано 27 января, 2013 Поделиться Опубликовано 27 января, 2013 Что то я не могу на этот контроллер датащит обнаружить.... странновато. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pylypiuk Опубликовано 27 января, 2013 Поделиться Опубликовано 27 января, 2013 Быть может Attiny2313 ? Про вопрос можно почитать тут похожая проблема. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
hd44780 Опубликовано 28 января, 2013 Поделиться Опубликовано 28 января, 2013 (изменено) Нет на белом свете такого проца - ATTiny2123 ... Посмотрите древнейшую либу AVRLIb - http://www.procyonen...ded/avr/avrlib/ Там все задержки на таймерах. Если не справитесь, набросаю примерчик для ATTiny2313. Изменено 28 января, 2013 пользователем hd44780 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 28 января, 2013 Автор Поделиться Опубликовано 28 января, 2013 Быть может Attiny2313 ? Про вопрос можно почитать тут похожая проблема. Да, верно, в этом многообразии цифр напутал) По примерам там пробую. Ругается компилятор на эти строки: TMR1ON=1; // Включить TMR1 TMR1IF=0; // Сбросить флаг от TMR1 TMR1IE=1; // Разрешить прерывания от TMR1 TMR1=-5000; // Установить TMR1 на 5000 тактов/ PEIE=1; // Разрешаем прерывания от перефирии GIE=1; // и глобально . С матюками: expected '=', ',', ';', 'asm' or '__attribute__' before '_isr''TMR1ON' undeclared (first use in this function) 'TMR1IF' undeclared (first use in this function) 'TMR1IE' undeclared (first use in this function) 'TMR1' undeclared (first use in this function) 'PEIE' undeclared (first use in this function) 'GIE' undeclared (first use in this function) Что значат эти переменные (или что это вообще...) и как их объявить, чтобы не было ошибок? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 28 января, 2013 Поделиться Опубликовано 28 января, 2013 TMR1ON=1; // Включить TMR1 TMR1IF=0; // Сбросить флаг от TMR1 TMR1IE=1; // Разрешить прерывания от TMR1 TMR1=-5000; // Установить TMR1 на 5000 тактов/ PEIE=1; // Разрешаем прерывания от перефирии GIE=1; // и глобально . а ничего ,что это биты регистров ПИКов....или нет? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 28 января, 2013 Автор Поделиться Опубликовано 28 января, 2013 TMR1ON=1; // Включить TMR1 TMR1IF=0; // Сбросить флаг от TMR1 TMR1IE=1; // Разрешить прерывания от TMR1 TMR1=-5000; // Установить TMR1 на 5000 тактов/ PEIE=1; // Разрешаем прерывания от перефирии GIE=1; // и глобально . а ничего ,что это биты регистров ПИКов....или нет? Думаете, мне как новичку в программировании МК это известно? В той статье, не нашел упоминаний о PICе, или не просто не заметил (в этом случае, извиняюсь). 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
codenamehawk Опубликовано 28 января, 2013 Поделиться Опубликовано 28 января, 2013 Советую установить CodeVisionAVR, там есть неплохой генератор кода вот с него и начните. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 28 января, 2013 Автор Поделиться Опубликовано 28 января, 2013 (изменено) Мне бы сами процессы этих таймеров понять и регистры (или как оно называется) для начала... Изменено 28 января, 2013 пользователем fresh.rus 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 28 января, 2013 Поделиться Опубликовано 28 января, 2013 Как же вы без даташита собираетесь использовать контроллер? Рекомендую книги Евстифеева, там не только описания контроллеров на русском но и примеры кода. 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Кирилл84 Опубликовано 28 января, 2013 Поделиться Опубликовано 28 января, 2013 Можно инкрементировать некую переменную, и "if" проверять. Будет вам мигание светодиода без delay_ms 0 Для любого процесса найдётся такой, без завершения которого невозможен данный Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 28 января, 2013 Автор Поделиться Опубликовано 28 января, 2013 Разобрался немного, мигалку таки сделал без delay, но появился вопрос. А если мне нужно будет для нескольких светодиодов сделать сделать поочередную мигалку ("бегущий огонек"), то мне одного таймера хватит? Через if и bool можно будет организовать все мигания в одном обработчике прерывания? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
hd44780 Опубликовано 29 января, 2013 Поделиться Опубликовано 29 января, 2013 Конечно хватит ... Именно через if и bool это и делают. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 29 января, 2013 Автор Поделиться Опубликовано 29 января, 2013 Имею такой код в обработчике прерывания: ISR( TIMER1_OVF_vect ) { TCNT1 = 64670; //выставляем начальное значение TCNT1 if (led1 = true && !led2 && !led3) { if( LPORTD & ( 1 << LR1 )) { LPORTD &= ~( 1 << LR1 ); //выкл led1 = false; led2 = true; } else { LPORTD |= ( 1 << LR1); //вкл led1 = true; } } if (led2 = true && !led1 && !led3) { if( LPORTD & ( 1 << LY1 ) ) { LPORTD &= ~( 1 << LY1 ); //выкл led2 = false; led3 = true; } else { LPORTD |= ( 1 << LY1 ); //вкл led2 = true; } } if (led3 = true && !led1 && !led2) { if( LPORTD & ( 1 << LG1 ) ) { LPORTD &= ~( 1 << LG1 ); //выкл led3 = false; led1 = true; } else { LPORTD |= ( 1 << LG1 ); //вкл led3 = true; } } } Все работает, диоды поочередно переключаются, но когда заканчивает гореть последний (LG1), то до повтора цикла есть промежуток во времени, когда ничего не горит, но после этого все идет заново как надо. Проще говоря, после последнего диода, есть еще ненужная задержка, которую не могу убрать. Как быть? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
TDSS Опубликовано 29 января, 2013 Поделиться Опубликовано 29 января, 2013 if (led1 = true && !led2 && !led3) может всё же if (led1 == true && !led2 && !led3) или просто if (led1 && !led2 && !led3) ну и так далее.. 0 Иван Сусанин - первый полупроводник Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 29 января, 2013 Автор Поделиться Опубликовано 29 января, 2013 if (led1 = true && !led2 && !led3) может всё же if (led1 == true && !led2 && !led3) или просто if (led1 && !led2 && !led3) ну и так далее.. Не помогло, задержка осталась 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 30 января, 2013 Поделиться Опубликовано 30 января, 2013 Это "пустой" цикл, когда ни один из Led-ов не попадает под условие If. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 2 февраля, 2013 Автор Поделиться Опубликовано 2 февраля, 2013 (изменено) С этим разобрался через goto. Теперь не могу понять как сделать разные интервалы переключения светодиодов в одном таймере. Насколько я понял нужно изменять TCNT1 в нужном if? Изменено 2 февраля, 2013 пользователем fresh.rus 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
TDSS Опубликовано 2 февраля, 2013 Поделиться Опубликовано 2 февраля, 2013 (изменено) нужно изменять TCNT1 в нужном if? или OCR Изменено 2 февраля, 2013 пользователем TDSS 0 Иван Сусанин - первый полупроводник Ссылка на комментарий Поделиться на другие сайты Поделиться
fresh.rus Опубликовано 2 февраля, 2013 Автор Поделиться Опубликовано 2 февраля, 2013 Получилось, спасибо. А вот такой вопрос теперь. У светофора перед включением красного зеленый начинает мигать. Как сделать такое в прерывании в стиле if (осталосьвремени < 100с)? И можно ли в одном таймере? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 2 февраля, 2013 Поделиться Опубликовано 2 февраля, 2013 Зачем такой код в прерывании ? Создайте переменные-счётчики, которые будут "тикать" в прерывании, а в основном цикле этими счётчиками управляйте. Там-же и производите их проверку и управляйте выводами МК. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.