Кстати напомню. В интерфейсе SPI помимо линий данных и такта есть линия выбора устройства. И ее перед передачей данных нужно опустить в "0", а после передачи поднять. Например для 595 регистра это нога 12 ("RCK" в даташите или "ST_CP" в протеусе)
Разобрался как выводить.Но вывод там мягко говоря странный.Вот пример.Там не выводяться стандартные 1 и 0 к стате ib00001 там тоже не выводиться.Вот пример число 1 , 2 и 3
В смысле что у 595-го регистра нельзя вкл/выкл выводы по одному? Ну правильно, он так и не работает. Что бы переключить вывод в регистре нужно записать в него тоже самое число, но с измененным битом в соответствующем разряде.
Я раньше делал так
1)Посылаю бит в DC
2)Сдвигаю
3)Посылаю следующий
4)Сдвигаю
И так раз 10
И потом защёлкиваю.
А тут можно лиш так.
1)Запускаю SPI
2)Посылаю переменную на весь регистр от 1 до 255
3) Защёлкиваю всё весь регистр готов!
Вот на основе такой странной передачи битов я написал простенькую программку.
Вот её алгоритм.
1)m = 1
2)Запускаем SPI
Бесконечный цикл.
3)Выдать переменную m
4) Защёлкиваем весь регистр
5)Проверяем m = 255 если да то m = 1.Если нет то идём дальше.
Это наглядный пример все возможных комбинаций.
Первый вариант похож на программную реализацию SPI, второй на аппаратную. Если есть возможность, то лучше делать по второму варианту, это занимает меньше кода и времени контроллера.
Ну поздравляю. Вроде SPI освоен. Можно идти дальше.
Вадиматоричик писал(а):Я раньше делал так
1)Посылаю бит в DC
2)Сдвигаю
3)Посылаю следующий
4)Сдвигаю
И так раз 10
И потом защёлкиваю.
А тут можно лиш так.
1)Запускаю SPI
2)Посылаю переменную на весь регистр от 1 до 255
3) Защёлкиваю всё весь регистр готов!
Я не понимаю, вам проще заниматься первым? Вы ведь получите тоже самое Зачем сдвигать по биту? Записал в аппаратный SPI весь _байт_ и попёр передавать. Передалось - защёлкнул - PROFIT!
И выкидывай этот флоукод или как там его. За время возни с этими картинками и значками уже бы познал азы C..
Проблема в том что в моём коде каждый светодиод имеет свою переменную (Что очень напрягает)Для второго варианта придёться писать ещё формулу которая 12 переменных объединяет в одно число!