Сдвиговый регистр 74HC595
- Войдите на сайт для отправки комментариев
Пт, 06/07/2012 - 19:22
Добрый вечер
Подключил 8 светодиодов через 74HC595
digitalWrite(REG_SELECT, LOW); SPI.transfer(248); digitalWrite(REG_SELECT, HIGH)
Данный код зажигает 4-5-6-7-8 сведоиоды, т.к. число 248 в двоичной форме 00011111
Такой вопрос, могу я для удобства оперировать в скетче двочичными числами для удобства зажигания нужного светодиода?
Форма записи в скетче (двоичная, десятичная, 16-ти ричная) - сугубо для вашего удобства. Компилятор по любой форме записи сгенерирует идентичный машинный код.
Это как в баре, что-бы вы не заказали бармену "100 грам. водки" или "пол стакана" - в желудке результат будет одинаковый. Если бармен честный. А компилятор - честный бармен ;)
P.S. А вообще IMHO это было быстрее проверить самому :) Написать и так и этак и посмотреть на результат. Как и в случае с водкой ;) И и 16-ти ричную можете попбовать 0x1F
1. Забыл, указать что я нубоват:) и не ориентируюсь в типах переменных, и формах записи чисел в разных с/с.
2. И заодно следущий вопрос:
Скажем у меня выполнилось какое то условие, и необходимо зажечь 5ый светодиод/релюху и тд, но сосотяние всех остальных выходов должно быть неизменно, а если методом SPI.transfer(n) то надо скармливать состояние всех выходов, как это можно реализовать? т.е. разделить 8 выходов, а не каждый раз указывать состояние каждого
1. Забыл, указать что я нубоват:)
Это лечится. ;)
Читайте книжки, раздел Программирование данного сайта, опять же...
По формам представления целочисленных констант там можно найти, например, это.
По поводу 2 - никак. Невозможно влезть на елку, не оцарапав ног.
Либо вы довольствуетесь небольшим количеством выводов МК, но зато меняете состояние любого из них, как вам заблагорассудится и абсолютно независимо от другиз.
Либо расширяете число ножек, но платите за это определенными ограничениями. В случае сдвигового региста - необходимостью ПОСЛЕДОВАТЕЛЬНО (т.е. строго по очереди) прописывать значения для дополнительных выводов. Купить место в очереди здесь не удастся.
>1. Забыл, указать
Это не обязательно. Наоборот - хорошо. Раздражает бесконечный поток тем с назавниями "вопросы новичка" и 50% текста "расшаркивание" и рассказы как он собирается учится.
>что я нубоват:)
При готовности тратить некоторое количество усилий это проходящий недостаток.
>и не ориентируюсь в типах переменных, и формах записи чисел в разных с/с.
А для этого существует документация. Желательно хотя-бы бегло просмотреть http://arduino.ru/Reference
Типы переменных - читаем раздел, неожиданно, "типы данных". Формы записи тут: http://arduino.ru/Reference/IntegerConstants
2. И заодно следущий вопрос:
Скажем у меня выполнилось какое то условие, и необходимо зажечь 5ый светодиод/релюху и тд, но сосотяние всех остальных выходов должно быть неизменно, а если методом SPI.transfer(n) то надо скармливать состояние всех выходов, как это можно реализовать? т.е. разделить 8 выходов, а не каждый раз указывать состояние каждого
Менять состояние отдельного бита не позволит сама логика работы сдвигового регистра.
Значит нужно сохранять "текущие состояние" в какую-то переменную. Менять в ней нужный бит, и послыть ее каждый раз заново целиком.
Работать с отдельными битами переменной можно либо с помощью функций из раздела Bits and Bytes, либо с помощью Bitwise Operators. К сожалению в русской документации эти разделы отсуствуют, так что разбиратся с ними прийдется по оригиналу http://arduino.cc/en/Reference/HomePage (если есть желание программить, то хотя-бы со словариком читать прийдется научится).
"Bits and Bytes", наверное будет проще для новичка, но я бы рекомендовал идти через "Bitwise Operators" - они более универсальны, и примеры скетчей которые будете встречать в интернете в 90% используют именно их. А зная их "Bits and Bytes" будут понятны с полуслова.
1. Забыл, указать что я нубоват:)
Это лечится. ;)
Читайте книжки, раздел Программирование данного сайта, опять же...
По формам представления целочисленных констант там можно найти, например, это.
По поводу 2 - никак. Невозможно влезть на елку, не оцарапав ног.
Либо вы довольствуетесь небольшим количеством выводов МК, но зато меняете состояние любого из них, как вам заблагорассудится и абсолютно независимо от другиз.
Либо расширяете число ножек, но платите за это определенными ограничениями. В случае сдвигового региста - необходимостью ПОСЛЕДОВАТЕЛЬНО (т.е. строго по очереди) прописывать значения для дополнительных выводов. Купить место в очереди здесь не удастся.
Вот за это спасибо http://arduino.ru/Reference/IntegerConstants
часто пользуюсь разделом справки, но вот почемуто константы и типа данных на уровне подсознания не заметил:)
Исходя из этого
B101 // тоже что 5 десятичных ((1 * 2^2) + (0 * 2^1) + 1)
можно держать в памяти значения 8 выходов
а вSPI.transfer(n) отдавать
Всем спасибо
>можно держать в памяти значения 8 выходов
Ну можно и так. Раз так понятней попробуйте реализуйте таким макаром. Но потом, все-таки, попробуйте "для держания в памяти" использовать один байт, а не восемь + плюс тяжеленные операции умножения и возведения в степень.
При работе с дуинкой, от разбирательств как работать с отдельными битами байта - все равно никуда не денетесь.
P.S. Кстати в качестве переводчика между системами исчислений можно использовать стандартный виндовый калькулятор, если ему включить "программерский вид".
Кстати можете еще прочитать http://arduino.ru/Reference/Serial/Println
как выводить в сериал, при отладке поможет, в разных системах исчисления.
P.S. Там "системы исчисления" переведены как "базис". В данном случае этот синонимы.