секундомер из 60 светодиодов
- Реклама
Значит похожего ничего нет
Мда, схемка на 60 СД чарлиплексингом будет наверно весьма тяжелая для разводки...
зачем страдать фигней... в каждый момент времени нужно включать один светик, если их запараллелить в матрице, то матрицей 6x5 можно организовать 30 ячеек по 2 светодиода - в зависимости от полярности строки/столбца загорается первый или второй. итого - 11 выводов, это даже на AT90S1200 уместится.
Alexeyslav писал(а):зачем страдать фигней...
Расклад
чарлиплексинг - 9 линий и подключение 9^2-9=72 светика
матрица 6+5 линий и подключение 30*2=60 светиков
512 слов FLASH, 32 регистра и стек с 3-мя уровнями вложения. С учетом того, что просит filarmonAlexeyslav писал(а):это даже на AT90S1200 уместится.
filarmon Примерно нарисовал, что должно получитьсяя юзаю СИ , пакет code vision 4.0 Кнопка это запуск таймера
Последний раз редактировалось akl Пт мар 23, 2012 03:46:52, всего редактировалось 1 раз.
- Реклама
Зачем искать сложности на ровном месте? Алгоритм управления получится очень неочевидным, на отладку уйдет уйма времени и нервов, в то время когда такие сложности вовсе не нужны. Ладно если выводов не хватало бы, но их хватает.
И под такую простую задачу можно было бы и ассемблер использовать.
И под такую простую задачу можно было бы и ассемблер использовать.
Alexeyslav малоубедительно, кроме последнего предложения.
filarmon составьте таблицу, аналогичную этому с учетом Ваших условий. Не сомневайтесь, алгоритм простейший и ничего там сложного. В качестве небольшой визуализации можете посмотреть работу этого дешифратора на "чарлиплексинге" управляющего катодами газоразрядного индикатора.
filarmon составьте таблицу, аналогичную этому с учетом Ваших условий. Не сомневайтесь, алгоритм простейший и ничего там сложного. В качестве небольшой визуализации можете посмотреть работу этого дешифратора на "чарлиплексинге" управляющего катодами газоразрядного индикатора.
На самом деле алгоритм получается элементранейший. Делается массив из значений DDR и PORT для каждого из 60 светодиодов, при необходимости зажечь определенный светодиод просто читаем i-й элемент и пишем его в DDR и PORT. Размер элемента получается 4 байта т.к. 9 выводов и 2 регистра, т.е. всего 60*240 байт для 60 светодиодов. Таблицу заполнить проще всего пронумеровав линии и записав их номера в строчку. Ищем какой светодиод нужно зажечь. К нему идут 2 линии - в них для DDR пишем 1, а в PORT пишем 1 только в столбце где у светодиода анод. У парного ему в DDR тоже самое, а в PORT единица в другом столбце.Alexeyslav писал(а):Алгоритм управления получится очень неочевидным, на отладку уйдет уйма времени и нервов, в то время когда такие сложности вовсе не нужны. Ладно если выводов не хватало бы, но их хватает.
Тут я естественно только заAlexeyslav писал(а):И под такую простую задачу можно было бы и ассемблер использовать.
А по подробнее о массивах , можно как то узнать ? С массивами никогда не работал 
Массив это просто куча расположенных подряд одинаковых элементов, у которых одинаковое имя, но разный индекс. Например можно сделать кучу переменных A0,A1,A2,A3, но тогда к ним невозможно обратиться в цикле, чтобы например каждое увеличить на 1 - нужно написать отдельно: A0=A0+1; A1=A1+1;A2=A2+1;A3=A3+1. В случае массива можно сделать проще: цикл I от 0 до 3; A=A+1; Но это с точки зрения языков высокого уровня. В ассемблере это выглядит немного по-другому, хотя принцип тот же.
наверно все-таки 60*4 байта = 240 байт.
4 байта, потому что приходится хранить значение двух регистров DDR, и двух PORT.
затратная по ресурсам задача... и запутаться нефиг делать. Чтобы все заработало - необходимо правильно занести в массив значения, и правильно сделать разводку светодиодов. Если вдруг что сделаешь не так, долго будешь искать причину.
4 байта, потому что приходится хранить значение двух регистров DDR, и двух PORT.
затратная по ресурсам задача... и запутаться нефиг делать. Чтобы все заработало - необходимо правильно занести в массив значения, и правильно сделать разводку светодиодов. Если вдруг что сделаешь не так, долго будешь искать причину.
А как это будет выглядеть в исходнике, например в code vision . а то как то не понятно
В конечном итоге, все сводится к вычислению смещения на конкретный элемент массива, загрузке суммы база+смещение в регистр Z и выполнение команды LPM Rd, Z+ с автоматическим пост-инкрементом.
Вероятно на C такие массивы будут выглядеть гораздо наглядней.
Вероятно на C такие массивы будут выглядеть гораздо наглядней.
а что то похожее сможеш скинуть что бы увидеть , как это нужно прописать,а то я как то не пойму


