Что-то я не понимаю. пределитель у меня стоит 1024, значит за 1 секуду счётчик считает до 3906. но почему когда я симулирую в протеусе, там задержка намного больше чем 1 секунда. что так, ведь у меня по сравнению когда считает до 3906. МК атмега8. #define F_CPU 4000000l #include #include #include unsigned char i; unsigned char temp, direction; void wait1 (void) { TCNT1 = 0; while (TCNT1 < 3906){}; } void segchar (unsigned char seg) { switch (seg) { case 1: PORTD = 0b11111001; break; case 2: PORTD = 0b10100100; break; case 3: PORTD = 0b10110000; break; case 4: PORTD = 0b10011001; break; case 5: PORTD = 0b10010010; break; case 6: PORTD = 0b10000010; break; case 7: PORTD = 0b11111000; break; case 8: PORTD = 0b10000000; break; case 9: PORTD = 0b10010000; break; case 0: PORTD = 0b11000000; break; } } ISR (TIMER1_COMPA_vect) { for (i=0;i<10;i++) { segchar(i); wait1(); } }
а зачем задержка в задержке? у тебя таймер и так настроен так, чтобы прерывание вызывалось с нужной частотой, а в нём ты ещё таймер мучаешь функция wait1(); нафиг не нужна
Добавлено after 2 minutes 47 seconds: и цикл фор тоже не нужен, само прерывание и есть цикл: прерывание() { вывод(i); i++; если (i>9) i=0; }
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
а зачем задержка в задержке? у тебя таймер и так настроен так, чтобы прерывание вызывалось с нужной частотой, а в нём ты ещё таймер мучаешь функция wait1(); нафиг не нужна
Добавлено after 2 minutes 47 seconds: и цикл фор тоже не нужен, само прерывание и есть цикл: прерывание() { вывод(i); i++; если (i>9) i=0; }
сделал всё как ты сказал, всё равно счёт идёт не 1 секунда, а больше
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
у тебя фьюзами 1 мГц выставлен - попробуй внешнее тактированик туда выставить или кварц
Добавлено after 1 minute 51 second: и ватчдог выключи, раз не используется
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
есть внутренний RC генератор - от его частот и пляши; вроде можно выбрать 1, 2, 4 и 8 мегагерц, а если нужна точность ставь кварц и ориентируйся на его частоту
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
есть внутренний RC генератор - от его частот и пляши; вроде можно выбрать 1, 2, 4 и 8 мегагерц, а если нужна точность ставь кварц и ориентируйся на его частоту
а смыссл вообще в программе пи ать строку #define F_CPU 4000000L, если всё равно частота фьюзами выставляется
настраивается фьюзами. с ними надо быть осторожным - не правильно поставишь и кристалл останется без генератора (переключится на внешний) и тогда программатор просто так его уже не увидит
Добавлено after 1 minute 24 seconds: это для функции DELAY если эта переменная будет отличаться от реальной частоты - программные задержки будут неправильны
Добавлено after 2 minutes 58 seconds: также эту константу используют многие функции работы с периферией (с экранами например) для выставления задержек
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
а смыссл вообще в программе пи ать строку #define F_CPU 4000000L, если всё равно частота фьюзами выставляется
Так делать и не следует. Следует задавать в Makefile макрос -DF_CPU=4000000L чтобы она подставлялась во ВСЕ используемые файлы. Некоторые среды разработки позволяют это же делать графически. Вообще, эта макроконстанта нужна для задержек, иногда автоматической настройки периферии и прочего.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения