ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
823754 Топик полностью
fk0, легенда (14.03.2018 13:47, просмотров: 308) ответил Mikron на Я только осваивая писать проги не умею прошивку декомпелировал но нифига там не пойму мне нужно всего лиш чтоб каждий диод загорался не через 300 оборотов а через 200
Там бит защиты стоит может, прошивку ты и не увидишь. Но зачем атмега? Это контроллер любительского уровня предназначенный для применения в радиоконструкторах типа "Ардуино". Профессиональная аппаратура не делается таких контроллерах. Для этого существуют контроллеры проф. уровня, таких фирм как Microchip, Renesas, Texas Instruments, NXP... Ближе к теме. Что тебе мешает написать с нуля прошивку? Логика там тупейшая: 1. Считаем число импульсов за единицу времени (пусть будет N импульсов за секунду); 2. Зажигае число светодиодов М пропорциональное числу импульсов (M = N * K). Коэффициент K выбирается под максимальные обороты (твои 200 вместо 300). Для пункта 1 ты должен: запрограммировать таймер, пока флаг таймера не установится считать импульсы (задачу можно поручить другому таймеру вообще, если у него внешний вход на нужной ноге атмеги есть). Чтоб не морочиться с таймером можно просто на асме цикл написать, посчитать такты процессора за цикл и решить сколько раз цикл исполнять чтоб примерно секунда вышла (ну или 1/5 секунды, чтоб индикация по-динамичней была). Цикл типа такого: unsigned N = 0; unsigned state = input_pin(); unsigned i = 12345; do { if(input_pin() != state) { N++, state = !state; } } while (--i); В пункте 2 перемножить и зажечь светодиоды начиная с первого и по М-ый, остальные погасить (пробежаться по всем диодам i=1..L, если i<M зажигать, иначе гасить, где L число диодов): unsigned M = N * K / 256; /* K домножить на 256 заранее */ unsigned i; for (i=0; i<L; i++) { if (i < М) set_led(i, 1); else set_led(i, 0); }
[ZX]