Все равно каждые 2 секунды перезагружает после отработки прерывания.
изучите, наконец, даташит - с WDT просто так работать нельзя, надо выдерживать определенную последовательность действий при смене его режима работы. не надо гадать - в даташите есть примеры, которые будут работать.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
// External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
// Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR1=(0<<AIN0D) | (0<<AIN1D);
Atmega 644 PA. прошивал ппосталом2. фьюзы прошились не правильно. проверил этой программой.на JTAGEN нет галки, а должна быть. сконектился этой программой. выставил фьюзы так. не нашел здесь фьюза SPIEN(куда он делся?). выставил и прошшил фьюзы.как на картинке и проц залочился, не определяется теперь. где ошибся?
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Ну, так ты его на работу с кварцем настроил... наверно потому и не определяется
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
если кварц там стоит, то всё ок. если нет - придется генератор городить (частота не сильно критична, оrоло 1МГц) и подавать импульсы на XTAL1
Добавлено after 32 minutes 11 seconds: источник тактирования настраивается фьюзами CKSEL(3..0)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Да, судя по всему, там на кварц 3..8МГц выставлено.
Повторил "галочки" на fuse calculator:
Собственно, вот из-за этого недолюбливаю все эти программы с "галочками". Avrdude просто передаёшь готовые параметры (-U lfuse:w:0x1d:m -U hfuse:w:0x06:m -U efuse:w:0xfa:m) через тот же Makefile или любой скрипт, и никогда не ошибёшься.
если кварца конструкцией не предусмотрено, то, скорее всего, человек стал очередной жертвой инверсии фьюзов. слава богу, в его случае - не смертельно...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Да, по таймеру. В основном цикле кнопки при нажатии кнопки включаем порт и устанавливаем переменную в N. В обработчике прерывания таймера эта переменная декрементируется, пока она больше нуля (if (N>0) {N--;}). В основном цикле, помимо опроса кнопок, проверяем эту переменную, если она равна нулю - значит, N времени прошло, устанавливаем N в -1, и выключаем порт.
N должно соответстовать 30 минутам. В зависимости от частоты вызова прерывания это может быть одна переменная типа int или long (если хватает), или можно её разбить на две (по аналогии с секундами-минутами) - одна декрементируется постоянно в каждом прерывании, другая - при "переполнении" первой.
для успокоения души сноси его к фьюз-доктору, если проц жив, то доктор все регистры ему на место вправит
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Добавлено after 1 minute 57 seconds: если СМА = стиральная машина автомат, то проверь протечки на разъем мотора, и за сырости в нем бывает вышибает цепи тахометра...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 01, 2018 17:45:14
Нашел транзистор. Понюхал.
Зарегистрирован: Вс мар 30, 2014 21:41:24 Сообщений: 170 Откуда: Украина
Рейтинг сообщения:0
Здравствуйте. Делаю тахометр. Atmega8 будет измерять период сигнала с катушки зажигания, преобразовывать в частоту/обороты в минуту и выводить на семисегментник. Програму написал, все мерит, вроде нормально, на железке тоже работает. НО при исчезновения сигнала (в момент остановки двигателя), на дисплее остается последнее значение, а хотелось бы "0000". Я не особо опытный в этих делах, прошу помочь. Цепляю исходник, Proteus, файлы проекта. Спойлер
Код:
#include <mega8.h> #include <delay.h> unsigned char i,OFcount,var[4],zamer_T,c3,c2,c1,c0; unsigned long T,f; unsigned int rising1,rising2; static flash unsigned char SEGMENTE[]= // масив для индикатора { (0b10111110), // 0 (0b10001000), // 1 (0b11110010), // 2 (0b11011010), // 3 (0b11001100), // 4 (0b01011110), // 5 (0b01111110), // 6 (0b10001010), // 7 (0b11111110), // 8 (0b11011110), // 9 }; void bcd(unsigned long s) { c3=0;c2=0;c1=0; while (s>=1000){s-=1000;c3++;} while (s>=100){s-=100;c2++;} while (s>=10){s-=10;c1++;} c0=s; } interrupt [TIM1_OVF] void timer1_ovf_isr(void) { OFcount++;//считаем количество переполнений }
interrupt [TIM1_CAPT] void timer1_capt_isr(void) { switch(zamer_T) { case 0: rising1 = ICR1; // Запоминаем значение счётчика OFcount = 0; // Обнуляем количество переполнений счётчика zamer_T = 1; // Переходим к следующему вычислению break;
case 1: rising2 = ICR1; // Запоминаем значение счётчика T = (unsigned long)rising2 - (unsigned long)rising1 + ((unsigned long)OFcount * 65536); // Приводим все переменные к одному типу и вычисляем период импульса f = 30000000/T; // Вычисляем обороты в минуту zamer_T = 0; break; } }
if (OFcount>1000) f=0; // в счетчике интервала значение за разумными пределами }
или тут
Код:
interrupt [TIM1_OVF] void timer1_ovf_isr(void) { OFcount++;//считаем количество переполнений if (OFcount>1000) f=0; // в счетчике интервала значение за разумными пределами }
Наверное просто не дождались, слишком большая константа, через 65535*1000/125000=511 секунд обнулится, если правильно понял логику программы )) можно вместо 1000 написать число 2, должно обнуляться через 1 секунду.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения