Сдвиговый регистр 74HC595

Tamer
Tamer аватар
Offline
Зарегистрирован: 24.06.2012

Добрый вечер

Подключил 8 светодиодов через 74HC595

  digitalWrite(REG_SELECT, LOW);
  SPI.transfer(248);
  digitalWrite(REG_SELECT, HIGH)

Данный код зажигает 4-5-6-7-8 сведоиоды, т.к. число 248 в двоичной форме 00011111

Такой вопрос, могу я для удобства оперировать в скетче двочичными числами для удобства зажигания нужного светодиода?

leshak
Offline
Зарегистрирован: 29.09.2011

Форма записи в скетче (двоичная, десятичная, 16-ти ричная) - сугубо для вашего удобства.  Компилятор по любой форме записи сгенерирует идентичный машинный код.

Это как в баре, что-бы вы не заказали бармену "100 грам. водки" или "пол стакана" - в желудке результат будет одинаковый. Если бармен честный. А компилятор - честный бармен ;)

P.S. А вообще IMHO это было быстрее проверить самому :) Написать и так и этак и посмотреть на результат. Как и в случае с водкой ;) И и 16-ти ричную можете попбовать 0x1F

Tamer
Tamer аватар
Offline
Зарегистрирован: 24.06.2012

1. Забыл, указать что я нубоват:)  и не ориентируюсь в типах переменных, и формах записи чисел в разных с/с.

2. И заодно следущий вопрос:

Скажем у меня выполнилось какое то условие, и необходимо зажечь 5ый светодиод/релюху и тд, но сосотяние всех остальных выходов должно быть неизменно, а если методом SPI.transfer(n) то надо скармливать состояние всех выходов, как это можно реализовать? т.е. разделить 8 выходов, а не каждый раз указывать состояние каждого

step962
Offline
Зарегистрирован: 23.05.2011

Tamer пишет:

1. Забыл, указать что я нубоват:)  

Это лечится. ;)

Читайте книжки, раздел Программирование данного сайта, опять же...

По формам представления целочисленных констант там можно найти, например, это.

По поводу 2 - никак. Невозможно влезть на елку, не оцарапав ног.

Либо вы довольствуетесь небольшим количеством выводов МК, но зато меняете состояние любого из них, как вам заблагорассудится и абсолютно независимо от другиз.

Либо расширяете число ножек, но платите за это определенными ограничениями. В случае сдвигового региста - необходимостью ПОСЛЕДОВАТЕЛЬНО (т.е. строго по очереди) прописывать значения для дополнительных выводов. Купить место в очереди здесь не удастся.

leshak
Offline
Зарегистрирован: 29.09.2011

 

>1. Забыл, указать

Это не обязательно. Наоборот - хорошо. Раздражает бесконечный поток тем с назавниями "вопросы новичка" и 50% текста "расшаркивание" и рассказы как он собирается учится.

>что я нубоват:) 

При готовности тратить некоторое количество усилий это проходящий недостаток.

>и не ориентируюсь в типах переменных, и формах записи чисел в разных с/с.

А для этого существует документация. Желательно хотя-бы бегло просмотреть http://arduino.ru/Reference

Типы переменных - читаем раздел, неожиданно, "типы данных". Формы записи тут: http://arduino.ru/Reference/IntegerConstants

 

Tamer пишет:

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" будут понятны с полуслова.

 

Tamer
Tamer аватар
Offline
Зарегистрирован: 24.06.2012

step962 пишет:

Tamer пишет:

1. Забыл, указать что я нубоват:)  

Это лечится. ;)

Читайте книжки, раздел Программирование данного сайта, опять же...

По формам представления целочисленных констант там можно найти, например, это.

По поводу 2 - никак. Невозможно влезть на елку, не оцарапав ног.

Либо вы довольствуетесь небольшим количеством выводов МК, но зато меняете состояние любого из них, как вам заблагорассудится и абсолютно независимо от другиз.

Либо расширяете число ножек, но платите за это определенными ограничениями. В случае сдвигового региста - необходимостью ПОСЛЕДОВАТЕЛЬНО (т.е. строго по очереди) прописывать значения для дополнительных выводов. Купить место в очереди здесь не удастся.

Вот за это спасибо http://arduino.ru/Reference/IntegerConstants

часто пользуюсь  разделом справки,  но вот почемуто константы и типа данных на уровне подсознания не заметил:)

Исходя из этого

B101 // тоже что 5 десятичных ((1 * 2^2) + (0 * 2^1) + 1)

можно держать в памяти значения 8 выходов

а вSPI.transfer(n) отдавать 

(n1 * 2^7) + (n2 * 2^6) + (n3 * 2^5) + (n4 * 2^4) + (n5 * 2^3) + (n6 * 2^2) + (n7 * 2^1) + n8

 Всем спасибо

leshak
Offline
Зарегистрирован: 29.09.2011

 >можно держать в памяти значения 8 выходов

Ну можно и так. Раз так понятней попробуйте реализуйте таким макаром. Но потом, все-таки, попробуйте "для держания в памяти" использовать один байт, а не восемь + плюс тяжеленные операции умножения и возведения в степень. 

При работе с дуинкой, от разбирательств как работать с отдельными битами байта - все равно никуда не денетесь.

P.S. Кстати в качестве переводчика между системами исчислений можно использовать стандартный виндовый калькулятор, если ему включить "программерский вид". 

leshak
Offline
Зарегистрирован: 29.09.2011

 Кстати можете еще прочитать http://arduino.ru/Reference/Serial/Println

как выводить в сериал, при отладке поможет, в разных системах исчисления.

P.S. Там "системы исчисления"  переведены как "базис". В данном случае этот синонимы.