Интересные глюки с Arduino UNO & sn74hc595n & матрицей 1588-BS 8x8DOT
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!Поработав некоторое время с AVR, решил поиграться с набором Arduino, да и быстро проверять алгоритмы и внезапные идеи .Собственно сам набор заказал в Китае, все пришло ок.Начал с простого, помигал светодиодом, потом RGB.Дошел до интересной для меня матричной сборки.Хоть китайцы и положили мне одну sn74hc595n, заказал у себя в местной конторе еще 5 микросхем регистров сдвига.За основу взял простую книгу Бокселла Дж.-Изучаем Ардуино.Вот схема (не привык что в литературе по arduino они такие неопрятные, ну да ладно)
Собрал схему, не сразу заработала.Поправив контакты, вновь включил и получил нужный эффект, вот фото и код
// Проект 21 - Создание светодиодной матрицы #define DATA 6 // к выводу 14 микросхемы 74HC595 #define LATCH 8 // к выводу 12 микросхемы 74HC595 #define CLOCK 10 // к выводу 11 микросхемы 74HC595 void setup() { pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); } void loop() { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, MSBFIRST, ~B10101010); // столбцы shiftOut(DATA, CLOCK, MSBFIRST, B10101010); // ряды digitalWrite(LATCH, HIGH); do {} while (1); // ничего не делать }
Так, работает.Хорошо приступаю к следущему уроку.Автор говорит что должно быть: "В результате выполнения скетча на светодиодной матрице получается изображение подмигивающего смайлика"
// Проект 23 - Отображение образа на светодиодной матрице
#define DATA 6 // к выводу 14 микросхемы 74HC595 #define LATCH 8 // к выводу 12 микросхемы 74HC595 #define CLOCK 10 // к выводу 11 микросхемы 74HC595 byte smile[ ] = {B00000000, B00000110, B01000110, B00000000, B00011000, B00000000, B11000011, B01111110}; int binary[ ] = {1, 2, 4, 8, 16, 32, 64, 128}; void setup() { pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); } void loop() { int i; for ( i = 0 ; i < 8 ; i++ ) { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, MSBFIRST, ~smile[i]); // столбцы shiftOut(DATA, CLOCK, LSBFIRST, binary[i]); // ряды digitalWrite(LATCH, HIGH); delay(1); } }
Залил скетч.И началась абракадабра на матрице.Все мельтешит и реагирует на то подношу я руку к схеме или нет.А самое интересное, что если заливать прошивку раз за разом то каждый раз получаю свечение индикатора в разных местах не поддающиеся логике(это по последней картинке).Пишу под Debian 9.Что тут посоветуете опытные корифеи? Проблемма в аппаратной части или же автор книги что-то упустил? Буду очень признателен дельным советам.Все попробую и отпишу.
Сперва проверить все контакты, на макетке они очень поханые. Симптомы похожие.
а он за 1 миллисекунду сможет разглядеть, чо там и как на матрице меняеца?
Я менял от 1 мс до 50-70 мс.Мельтешит.А если больше длительность поставить, то видно как то, что должно быть изображением(смайликом) медленно проплывает построчно, но цельного изображения не видно.
Сделай шаг по кнопке и смотри, что должно быть, и что выводится.
Ок, сделаю отпишусь!
А вот вопрос, как прокрутить изображение частично и остановить его кнопкой.Можно хотя бы пример кода где-нибудь глянуть? Потому что это не так просто.
после шага делаешь бесконечный цикл. Если кнопка нажалась, ждешь отжатия и break на след. шаг. Не забуть про дребезг. Ты программист, в канцеканцов, или где?
можно даже, чтоб с кнопками не вазюкаца, по приему символа из Serial шаг делать. Наморщи мозг чучуть.
Я не программист.Я больше по железу.Давным давно писал на ассемблере под AVR не сложные вещи типа частотомера.А здесь я спросил Вас дать хотя бы кусок кода.Ибо с ардуино и языком С я знаком совсем чуть-чуть.
Спасибо!Буду пробовать.
Так как все равно я в это не вкурил куда этот код вставлять, пошел своим путем. Вспомнил свои прошлые навыки с универа, собрал схему в Proteus, дабы исключить огрехи монтажа в реальной схеме.
Далее убедившись в корректной схеме и общей работе программы решил копать далее в железе.Первое что обнаружил это то, что моя матрица была дефектной и засвечивала 3 и 4 столбец по 2 светодиода .Отпишу товарищу китайцу про это.После купил новую матрицу собрал заново, запустил, опять муар.Стал искать по информационным проводам, дошел до контакта 11 микросхемы сдвиг.регистра SH_CP - к D10(Arduino).Переткнув пин в другой соседний в ряду контакт добился четкой картинки-это и было еще одной решенной проблемой в комплексе багов.
Теперь у меня вопрос. Как мне при текущей схеме вывести бегущей строкой хотя бы "HELLO WORLD".Что нужно поменять в коде?Объясните пожалуйста, если не сложно.