Если делать качественный светодиодный индикатор двух прерываний вряд-ли хватит, тем более при том, что помимо индикации еще и задачи ввода/обработки делать необходимо. И ВСЕ на одном кристалле. Ежли вывести управление светодиодным табло на отдельную мелкосхемку с собственными мозгами - дело несколько упростится (то же касается индикаторов ЖКИ, имеющих свой контроллер). Однако чаще стараются "мелкий" проект в одну корпусину запихерить, а в таком случае без кучки прерываний "с выпендрежом" не обойтись.
Сейчас нет. Потом, в процессе отладки или доработки понадобится второе, и приплыли.
а если и потом не понадобится?
я это все к тому, что надо все делать с умом. Делал я как-то ампервольтметр для своего ЛБП. Использовал два прерывания, АЦП и таймер, для индикации. Основной цикл пустой. Теперь вопрос: откуда тут могут взяться еще какие-то прерывания?
Ну ты троль. Если, когда, зачем... просто делай сразу так ,чтобы потом не было мучительно больно за потраченное время на быдлокод. 500 мс задержки в прерывании - это вечность.
Встречаются два мужика в пустыне. Один тащит телефонную будку, второй рельсу. Тот что с рельсой спрашивает: - Нафига тебе телефонная будка? - Ну а вдруг на меня лев нападет?! Я в будку спрячусь, и он меня не съест! А ты зачем рельсу таскаешь? - А вдруг львы?! - И что? - Ну дак я рельсу брошу и налегке от них убегу!
есть правильный подход, который ВСЕГДА дает хороший реззультат, а есть подход, который дает результат ЕСЛИ. знать о таком подходе - плюс, а пользоваться им повседневно на регулярной основе - минус.
я и не пользуюсь. Я просто не люблю усложнять на ровном месте
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Теперь непонятные проблемы с таймером1 - ставлю такие настройки (внешний кварц 20мГц):
Код:
TCCR1B = 0; TCCR1A = 0; TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению) для первого таймера // OCR1AH = 0xFF; //записываем в регистр число для сравнения - старшый байт // OCR1AL = 0x7F; //записываем в регистр число для сравнения - младший байт OCR1A = 4000; //записываем в регистр число для сравнения
Канал B осциллографа в Протеусе подключён к ноге PC2, на которой в ISR (TIMER1_COMPA_vect )меняется высокий уровень на низкий, каждый полупериод меандра должен быть 205 милисек. = 1/(20000000/(4000*1024)) а он, почему то, то в 3 раза больше, то в 2 !
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
может в прерывание входит не сразу (не разрешены по какой то причине, I, например нет), может в прерывании не сразу скидывает (код то не видно)... а поднимает ногу кто?
Добавлено after 2 minutes 15 seconds: посмотрел видимую часть сигнала - сбрасывается он вроде регулярно (интервалы между спадающими фронтами равны), а вот поднятие идет както поразному...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Я выложил весь тестовый проект (Таймеры.zip) для Atmel studio 6.2, там же внутри проэкт для Proteus 8.7
Кстати, если закомментировать блок настроек относящиеся к таймеру0, то таймер1 перестаёт работать вообще (кажется это происходит после одного срабатывания) !
// Верхняя граница счета. Диапазон от 0 до 255. OCR0A = 255; // Частота прерываний A будет = Fclk/(N*(1+OCR0A)) OCR0B = 255; // Частота прерываний B будет = Fclk/(N*(1+OCR0B)) // где N - коэф. предделителя (1, 8, 64, 256 или 1024) TIMSK0 |= (1<<OCIE0A); // Разрешить прерывание по совпадению A //TIMSK0 |= (1<<OCIE0B); // Разрешить прерывание по совпадению B //TIMSK0 |= (1<<TOIE0); // Разрешить прерывание по переполнению
// Верхняя граница счета. Диапазон от 0 до 65535. OCR1A = 2678; // Частота прерываний A будет = Fclk/(N*(1+OCR1A)) OCR1B = 2678; // Частота прерываний A будет = Fclk/(N*(1+OCR1B)) // где N - коэф. предделителя (1, 8, 64, 256 или 1024) TIMSK1 |= (1<<OCIE1A); // Разрешить прерывание по совпадению A //TIMSK1 |= (1<<OCIE1B); // Разрешить прерывание по совпадению B //TIMSK1 |= (1<<TOIE1); // Разрешить прерывание по переполнению
//////////////////////////////////////////////////////////////////////////////////////////////////// } ISR (TIMER0_COMPA_vect) // вектор прерывания по совпадению таймера 0 { ///////////////////////////////////////////////////////////////// if ((PINC&0b00000001)) { PORTC &= ~(1<<0); //записать в PC0 ноль } else { PORTC |= (1<<0); //записать в PC0 единицу }
//////////////////////////////////////////////////////////////////// } ISR (TIMER1_COMPA_vect ) { ///////////////////////////////////////////////////////////////////// if ((PINC&0b00000001)) { PORTC &= ~(1<<2); //записать в PC0 ноль } else { PORTC |= (1<<2); //записать в PC0 единицу } /////////////////////////////////////////////////////////////////// } int main(void) { //=========================
DDRC |= (1<<0); //записать в PC0 единицу (что бы выставить его на выход) PORTC &= ~(1<<0); //записать в PC0 ноль DDRC &= ~(1<<1); PORTC |= (1<<1); DDRC |= (1<<2); //записать в PC2 единицу (что бы выставить его на выход) PORTC &= ~(1<<2);//записать в PC2 ноль
timers_ini(); sei();//разрешить прерывания
//========================= while(1) { if (false == (PINB&0b00000010)) {
что за хрень вы наворотили? что вы там пытаетесь сгенерировать? просто меандр генерируется без всяких прерываний чисто аппаратно в двух разных прерываниях от разных таймеров переключать один и тот же вывод и удивляться, что длительность странно меняется?! а вы чего ждали-то?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Ну ты троль. Если, когда, зачем... просто делай сразу так ,чтобы потом не было мучительно больно за потраченное время на быдлокод. 500 мс задержки в прерывании - это вечность.
я сразу сделал "не так" и мне не больно, все работет. А у тебя я спросил, откуда в вольтметре возьмется еще одно прерыване. От сырости?
Вы как роботы, сказали вам что в прерывании низзя и все тут. Нет шоп моск включить, хотя бы на мгновение
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения