fk0, легенда (14.03.2018 13:47, просмотров: 343) ответил 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]