Помощь с 74hc595

Muse
Offline
Зарегистрирован: 14.04.2016

Здравствуйте! Вопрос такой 

cube[z][y] |= (1 « x);

Светодиоды подключены к 74hc595. В этой части кода светодиоды горят справа налево. Поскольку у меня перед светодиодами стоят транзисторы. Мне нужен 0. Как сделать чтобы посылать на выход регистра не 1 а 0. (0«x) не работает.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

~(1<<x);

Будет инвертированный байт со сброшенным битом x и установленными остальными.

Muse
Offline
Зарегистрирован: 14.04.2016



cube[z][y] |~ (1 « x);  тоесть так? 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

cube[z][y] &= ~(1<<x);

Muse
Offline
Зарегистрирован: 14.04.2016

Огромное спасибо))) Помогло)))

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

bitClear и bitSet для тех кто не хочет вникать в битовые операции

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Penni пишет:

bitClear и bitSet

Не по-пацански :)))

Muse
Offline
Зарегистрирован: 14.04.2016
Мне сново нужна помощь. Если я правильно понял то этот код отправляет на регистры 1 байт. Вопрос как сделать чтобы регистры получали 2 байта?
 
//--- The really fast SPI version of shiftOut
byte spi_transfer(byte data)
{
  SPDR = data;        // Start the transmission
  loop_until_bit_is_set(SPSR, SPIF);
  return SPDR;        // return the received byte, we don't need that
}
SLKH
Offline
Зарегистрирован: 17.08.2015

Muse пишет:

Мне сново нужна помощь. Если я правильно понял то этот код отправляет на регистры 1 байт. Вопрос как сделать чтобы регистры получали 2 байта?
 
//--- The really fast SPI version of shiftOut
byte spi_transfer(byte data)
{
  SPDR = data;        // Start the transmission
  loop_until_bit_is_set(SPSR, SPIF);
  return SPDR;        // return the received byte, we don't need that
}

вызвать функцию 2 раза

Muse
Offline
Зарегистрирован: 14.04.2016

А как))

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

spi_transfer(x);
spi_transfer(y);

Muse
Offline
Зарегистрирован: 14.04.2016

Я что-то не совсем понимаю Куда это надо 

spi_transfer(x);
spi_transfer(y);

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Muse пишет:

Я что-то не совсем понимаю Куда это надо 

Господа офицеры, ....

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ворота пишет:

Muse пишет:

Я что-то не совсем понимаю Куда это надо 

Господа офицеры, ....

Ржевский молчит, мы ему рот занавеской заткнули - всё рвался сказать, куда это надо :)

Muse
Offline
Зарегистрирован: 14.04.2016
Перефразирую что мне надо. В этом коде регистры работают одновременно (тоесть у меня одновременно двигается светодиод и на 1 и на 2 регистре)а мне надо чтобы сначало 1 прогнал светодиоды а потом второй продолжил.  
 
//--- Used to setup SPI based on current pin setup
//    this is called in the setup routine;
void setupSPI(){
  byte clr;
  SPCR |= ( (1<<SPE) | (1<<MSTR) ); // enable SPI as master
  SPCR &= ~( (1<<SPR1) | (1<<SPR0) ); // clear prescaler bits
  clr=SPSR; // clear SPI status reg
  clr=SPDR; // clear SPI data reg
  SPSR |= (1<<SPI2X); // set prescaler bits
  delay(10);
}
 
//--- The really fast SPI version of shiftOut
byte spi_transfer(byte data)
{
  SPDR = data;        // Start the transmission
  loop_until_bit_is_set(SPSR, SPIF);
  return SPDR;        // return the received byte, we don't need that
}
ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Muse, а вот скажите, штатной библиотекой SPI воспользоваться Вам религия не позволяет? Она делает именно то, что Вы пытаетесь делать. В чём проблема? Зачем Вы пытаетесь решать задачу с использованием средств, которых Вы не понимаете?

Muse
Offline
Зарегистрирован: 14.04.2016

Если бы я знал как это сделать то не писал бы сюда.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Muse пишет:

Если бы я знал как это сделать то не писал бы сюда.

Если бы Вы, кроме как писать, ещё бы и читать умели, Вам бы не пришлось писать сюда ибо:

1. Прямо на этом сайте ксть описание.

2. Прямо на Вашем диске, в поставке IDE имеются примеры использования SPI (путь см. на картинке)

Так что просто не понимаю, что Вам ещё нужно, чтобы знать как это сделать?

strarbit
Offline
Зарегистрирован: 12.06.2016

Написала библиотеку для  управления сдвиговыми регистрами. Сдвиговые регистры подключаются каскадно или `вагончиками друг за другом`. Можете включать, выключать отдельно выбранный выход или несколько выходов  одновременно. При этом,  не изменяя другие выводы регистров. Продам задорого.

b707
Offline
Зарегистрирован: 26.05.2017

strarbit пишет:

Написала библиотеку для  управления сдвиговыми регистрами. Сдвиговые регистры подключаются каскадно или `вагончиками друг за другом`. Можете включать, выключать отдельно выбранный выход или несколько выходов  одновременно. При этом,  не изменяя другие выводы регистров. Продам задорого.

это стеб? вроде как разобрано в 1000 мест в инете....

strarbit
Offline
Зарегистрирован: 12.06.2016

Нет, не прикалываюсь. Если разобрано 1000+, нет никаких сложностей найти готовое)

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Уступлю дешево скетч, как вкл и выкл светодиод. Скетч как работать с 74hc595 был продан, и сейчас в наличии нет.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

strarbit пишет:

...Продам задорого.

Класс!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

Уступлю дешево скетч, как вкл и выкл светодиод. Скетч как работать с 74hc595 был продан, и сейчас в наличии нет.

Надо не скетч, надо - библиотеку.

А лучше - две: одну для включения светодиода, а другую - для выключения.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

strarbit пишет:

Написала библиотеку для  управления сдвиговыми регистрами. 

Да, бедный shiftOut, как же он до этого без библиотеки-то работал :) Там делов-то передать в сдвиговые - несколько строчек кода. Библиотека, чо.

Muse
Offline
Зарегистрирован: 14.04.2016
void latchOn(){
  bitSet(PORTB,latchPinPORTB);
}
void latchOff(){
  bitClear(PORTB,latchPinPORTB);
}
А что делает эта часть кода?
b707
Offline
Зарегистрирован: 26.05.2017

Muse пишет:

А что делает эта часть кода?

так вроде названия функций говорят сами за себя. разве нет? :)

Muse
Offline
Зарегистрирован: 14.04.2016

Мне тут написали что можно использовать bitSet и bitClear чтобы изменить принцип прохода огонька с 1 на 0 Я хочу понять что тут нужно изменить

b707
Offline
Зарегистрирован: 26.05.2017

Muse пишет:

Мне тут написали что можно использовать bitSet и bitClear чтобы изменить принцип прохода огонька с 1 на 0 Я хочу понять что тут нужно изменить

Если коротко и по делу - в этих двух функциях ничего менять не надо, независимо от "принципа прохода огонька".

А если "поговорить" - судя по всему. вы делаете какую-то ерунду, типа елочной гирлянды. То есть от этой поделки ни ваша жизнь, ни судьба :) - не зависят. При этом сам процесс вам явно не приносит ни удовольствия, ни пользы. И потому я, хоть убей - не могу понять, зачем вы это делаете....

Если бы вы чему-то учились ... а вы просто задаете элементарные вопросы на форуме... Попробуйте хоть чуть-чуть разобраться, как работает сдвиговый регистр, что такое "latch".

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

andriano пишет:

Надо не скетч, надо - библиотеку.

А лучше - две: одну для включения светодиода, а другую - для выключения.

И третью для определения в каком он нынче состоянии.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

andriano пишет:

Надо не скетч, надо - библиотеку.

А лучше - две: одну для включения светодиода, а другую - для выключения.

И третью для определения в каком он нынче состоянии.

Настоящие пацаны никогда не проверяют, в каком состоянии!

Ds. Вполне хватит и двух библиотек.