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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

Привет всем! :)
проблема такая: допустим есть 8 переменных, которые динамически меняют состояние 0/1
мне нужно через сдвиговый регистр включать/выключать 8 светодиодов.

Код: Выделить всё

                void sdvig_reg(void) { 
      
           for (count=0;count<8;count++) {
            if (z & 0b10000000)
            data=1 ;
           else 
          data=0;
          shift=1;
          delay_us(5);
          shift=0;
          z=z<<1;  //z<<=1;
         }

        latch=1;
        delay_us(5);
        latch=0;
       // data=0 ;
    
  }






 void main(void)
  { 

while(1){

sdvig_reg();


if( led_0==1){
z=0b00000001;
}


}
}
  
:facepalm:

я так понял, что нужно led_0 - led_7 записывать в переменную к примеру:" z = 0b10001011;"

скажите как правильно записать ? :oops:
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Заюзайте структуру и union. Будут и led'ы и выдвигаемый байт "в одном флаконе".
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

Создайте структуру к примеру :

Код: Выделить всё

struct UnionBits
{
   unsigned DO0: 1;
   unsigned DO1: 1;
   unsigned DO2: 1;
   unsigned DO3: 1;
   unsigned DO4: 1;
   unsigned DO5: 1;
   unsigned DO6: 1;
   unsigned DO7: 1;
};

union Byte {
   uint8_t ByteRegister;
   struct UnionBits Register;
};

union Byte OneOUT;
И пишите состояние в эту структуру к примеру чере SPI.

Код: Выделить всё

uint8_t SPI_UpdataByte(uint8_t data)
{
   uint8_t report;
   SPDR = data;
   while(!(SPSR & (1<<SPIF)));
   report = SPDR;
   return report;
}
void SpiOutRegister()
{
   SPI_PORT &= ~(1<<SPI_SS);
   OneIN.ByteRegister=SPI_UpdataByte(EightOUT.ByteRegister);
   SPI_PORT |= (1<<SPI_SS);
}
Вот ссылка с моей реализацией реализацией.
http://radiokot.ru/forum/viewtopic.php?f=57&t=149947
andrei23061996@gmail.com
.................................................................................................................
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

Спасибо но spi уже занят у меня есть 3 свободных порта, по этому и решил применить программный spi.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 453
Зарегистрирован: Вс авг 16, 2015 13:08:53

Сообщение Бубоник »

Вам нужно 8 раз отправить 1. Соответственно загорится 8 светодиодов.

Добавлено after 24 minutes 59 seconds:
И еще кое что. Если у вас переменная latch управляет STCP регистром то вам его нужно в начале цикла выставить в 0, а потом в конце цикла выставить 1.
Реклама
Мудрый кот
Сообщения: 1735
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="ATMEL86",url="/forum/viewtopic.php?p=3245730#p3245730"]Спасибо но spi уже занят у меня есть 3 свободных порта, по этому и решил применить программный spi.[/uquote]
Что значит "занят"? SPI - это вообще-то шина и, соответственно, позволяет вешать на неё несколько независимых слэйвов, каждый со своим CS.
Занят может быть только конкретный CS.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

Народ, неужели 74hc595 не требует совсем никакой обвязки?
Ни на одной схеме в инете я её не увидел.
Проскакивала инфа, что надо вешать кондеры по питанию.
Так ли это?
Какого номинала они должны быть, как думаете?
0,1мкФ, как на контроллере, достаточно будет?
Или не ставить вовсе, если схема будет питаться от батареек и управлять светодиодами?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Я за народ.
Ставить на каждую микросхему по 0,1 мкФ.
[uquote="BlYur",url="/forum/viewtopic.php?p=3261284#p3261284"]...Ни на одной схеме в инете я её не увидел...[/uquote]
И не увидите. Бо рисуют (а в большинстве своём копипастят) и выкладывают эти схемы такие же, как вы.
Docendo discimus
Контактная информация:
Мудрый кот
Сообщения: 1735
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="BlYur",url="/forum/viewtopic.php?p=3261284#p3261284"]Народ, неужели 74hc595 не требует совсем никакой обвязки?
Или не ставить вовсе, если схема будет питаться от батареек и управлять светодиодами?[/uquote]
Какая разница - от батареек или нет?
Читайте учебники что такое "блокировочные конденсаторы" и зачем они нужны.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Всем привет!
Вопрос по данной микросхеме.

Задача: управление электромагнитом при помощи ШИМ, т.е. срываем якорь при D=1, затем удержание ШИМом при D=0.5. размножил GPIO при помощи этой микросхемы.
Вот схема.

Изображение

В общем, записываю бит в нужную позицию, а на вывод OE подаю ШИМ. По идее, этот же ШИМ появляется на выводе, в который я раньше записал лог.1 . Частота не более 100 кГц. Такой вариант использования микросхемы адекватен или же идея шляпа?
Исток транзистора соединен с землей через токоизмерительный резистор 0,1 Ом.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15605
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ну и садомазохизм...
Для 595-го надо от 3х до 4х линий управления, а для полевика ВСЕГО одна - в чем смысл такого изврата?
:dont_know:
Нашел транзистор. Понюхал.
Сообщения: 152
Зарегистрирован: Пн мар 06, 2017 18:53:23
Откуда: Казань.

Сообщение vk696 »

было сделано для 1533ир24, но не суть.

записываем значение переменной temp в регистр сдвига.

чуть изменив код можно писать инверсное значение переменной.


#include <xc.h>


#define strb_c0 RD6
#define strb_c1 RD7
#define clk_c RD0
#define data_c RD1
#define clk_c1 RD2
#define data_c1 RD3


// makros
unsigned char var,bitno,mask;
#define bitset(var,bitno) ((var)|=1<<(bitno))
#define bitclr(var,bitno) ((var)&=~(1<<(bitno)))
#define testbit(var,bitno) ((var>>bitno)&0x01) // chek 1
#define testbit_0(var,bitno) (!((var>>bitno))&0x01) // chek 0
#define bits_on (var, mask) var |= mask //
#define bits_off (var, mask) var &= ~ 0 ^ mask
///////////////////////////////////////////////////////////////////////////////

void load_reg_clock (unsigned char temp){

/////////////////////////////////////////////new_load_reg
signed char j;
for (j=0x07; j>=0x00; j--) {

if (testbit(temp,j)) data_c=0;
else ( data_c=1);
clk_c=1;
clk_c=0;

}
/////////////////////////////////////////////new_load_reg

}
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3387232#p3387232"]Ну и садомазохизм...
Для 595-го надо от 3х до 4х линий управления, а для полевика ВСЕГО одна - в чем смысл такого изврата?
:dont_know:[/uquote]
В том что полевиков 7, я просто один разместил рядом, что бы скрин сделать. И да, поражает особенность отечественных форумов. Я спрашивал не про адекватность такого "изврата", а про гипотетическую возможность так управлять: возможно ли и с какими граблями или же нет.
Да. Смысл такой. В регистр записываем нужное значение, выставив единицы на нужных линиях, а нога enable шимится от аппаратного ШИМ. Думаю прокатит. Прототип платы уже заказан )
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15605
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это вход разрешения, а не логика.
Если критичны параметры наростания/спада(и пиковых токов зарядки емкости затвора) импульса лучше добавить обычную логику между выходом регистра и полевиком.
8)
Друг Кота
Аватара пользователя
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Сообщение korob »

Chip115 писал(а):В общем, записываю бит в нужную позицию, а на вывод OE подаю ШИМ. По идее, этот же ШИМ появляется на выводе, в который я раньше записал лог.1 . Частота не более 100 кГц. Такой вариант использования микросхемы адекватен или же идея шляпа?
Имейте ввиду, что при лог.1 на управляющем входе ОЕ выходы переходят в Z-состояние (повисают в воздухе), а не переключаются в лог.0. :wink: А по сему управлять таким способом (без дополнительной разрядной цепочки) полевым транзистором не выйдет даже и при 2кГц. . :( В остальном проблем нет, по управляющему входу ОЕ вполне можно ШИМ-ить выходами. :)
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Спасибо за ответы! Прижал затвор резистором. Придется подбирать резюк или же, действительно, ставить разрядную цепочку
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Сообщение korob »

Chip115 писал(а):Прижал затвор резистором. Придется подбирать резюк...
Это не дело. :? Ставьте разрядную цепочку на транзисторе, и не задирайте частоту ШИМ выше 2кГц.
Изображение

В противном случае нужен драйвер/буфер. :roll:
Вложения
discharge.JPG
(14.99 КБ) 877 скачиваний
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Ответить

Вернуться в «Периферия»