Доброго времени суток, радиолюбители и профессионалы. У меня небольшая проблемка, а именно непонимание некоторых функций сдвигового регистра модели SN74HC595N. К сообщению прикреплён pdf даташит на Английском языке. В нём описаны такие непонятные мне функции, как SRCLK и RCLK. Хоть в английском не полный дурак, но не пойму при чём тут часы, а если это тактовая частота, то при чём тут она? Объясните неучу, пожалуйста.
P.S. не уверен что создал тему в нужном разделе, админ извини, если что. картинка
По сигналу SRCLK данные записываются в "первый регистр" (сдвигаются), по сигналу RCLK принятые в "первый регистр" данные перезаписываются в выходной регистр и если разрешен вывод, то эти данные появляются на шине вне микросхемы
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
По сигналу SRCLK данные записываются в "первый регистр" (сдвигаются), по сигналу RCLK принятые в "первый регистр" данные перезаписываются в выходной регистр и если разрешен вывод, то эти данные появляются на шине вне микросхемы
Тоесть это просто спец. функции, и для того чтобы просто писать данные в сдвиговый регистр последовательно, со стандартным сдвигом, можно просто подавать сигналы на SER, а RCLK и SRCLK просто не трогать? Я правильно понял?
Тоесть это просто спец. функции, и для того чтобы просто писать данные в сдвиговый регистр последовательно, со стандартным сдвигом, можно просто подавать сигналы на SER, а RCLK и SRCLK просто не трогать? Я правильно понял?
Нет, неправильно.. Это УПРАВЛЕНИЕ РЕГИСТРОМ Вот таблица: Спойлер Какой- то у вас даташит странный.. Хотя в чипдипе он же.. Вот тут: https://www.rlocman.ru/shem/schematics.html?di=65110 вроде неплохо описана работа этого регистра
SRCLK передвигает данные, поступающие на вход регистра (SER) по каждому "клоку" на один шаг, а RCLK передаёт данные (в том состоянии, в котором они находятся на этот момент времени) из самого регистра на выходы.
Если вы умеете пользоваться протеусом, то там можно посмотреть, что происходит с регистром в "типа ручном управлении"..
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Любой SPI в общем случае имеет ЧЕТЫРЕ сигнала. Два - это данные (входные и выходные). Один - клоки мастера (сдвигающее тактирование). И еще один - чип селект. Последний сигнал не препятствует сдвигу. Он перезаписывает ПО ЗАДНЕМУ фронту данные из сдвигового регистра на выход или в исполнительный регистр микросхемы-слейва SPI шины. Без перезаписи данные просто будут проталкиваться на выход самого SPI клоками мастера.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Благодарю, ознакомлюсь. Дело в том, что мне нужно с микроконтроллера посылать байт информации на сдвиговый регистр, откуда сигналы пойдут на сборку дарлингтона для включения нужных сегментов ВЛИ. Вот и пытаюсь понять куда байты загружать... Тоесть без перезаписи данные просто будут заменятся новыми? Если так, то так и нужно!
Добавлено after 10 minutes 59 seconds: ПОНЯЛ! Это что-то вроде "Защёлки"(RCLK) а SRCLK это передвигает данные?
Код:
// отправляем в цикле по два байта в сдвиговые регистры for(byte i = 0; i <= 3; i++){ digitalWrite(RCLK, LOW); // открываем защелку shiftOut(DIO, SCLK, MSBFIRST, digit[digitBuffer[i]]); // отправляем байт с "числом" shiftOut(DIO, SCLK, MSBFIRST, chr[i]); // включаем разряд digitalWrite(RCLK, HIGH); // защелкиваем регистры delay(1); // ждем немного перед отправкой следующего "числа" } }
Добавлено after 13 minutes 14 seconds: Meteor, КРАМ, АлександрЛ, Спасибо огромное! С наступающим!
Заголовок сообщения: Re: Непонятные функции сдвигового регистра SN74HC595N
Добавлено: Пн янв 11, 2021 20:28:31
Встал на лапы
Зарегистрирован: Пн ноя 04, 2019 09:58:29 Сообщений: 102 Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения:0
Доброго времени суток. Есть неплохая библиотека для работы со сдвиговым регистром 74HC595 shiftreg.cppСпойлер/**************************************************************************** * File Name : shiftreg.c * Author : D.Gotic * Version : V0.1 * Date : 03/12/2010 * Description : This file contains all the functions definitions * for the 74HC595 shit register driver *****************************************************************************/ /* Includes ----------*/ #include "shiftreg.h" #include "macros.h"
#define BIT_MASK 0x80
/* Private macros-----------------------------------------------------------*/ /* Private functions ----------*/ #define shift_in_pulse(port,reg_pin) sbi(port,reg_pin); cbi(port,reg_pin) #define parallel_out_pulse(port,reg_pin) sbi(port,reg_pin); cbi(port,reg_pin) // // Function Name : SHIFTREG_InitRegister // Description : Initializes the interface from the uC to the shift register // Input : DDR adress and PORT adress of the interface and pin numbers // of the uC interface // Return : initialized register structure // SHIFTREG_register SHIFTREG_InitRegister( volatile uint8_t *ddr_addr, volatile uint8_t *port_addr, uint8_t ds_pin, uint8_t st_cp_pin, uint8_t sh_cp_pin) {
return tmp_reg; } /**************************************************** * Function Name : SHIFTREG_OutputValue * Description : Transmits nbytes bytes to nbytes shift registers and outputs the values * Input : shift register structure, bytes to transmit, number of bytes to transmit * Return : None ******************************************************/ void SHIFTREG_OutputValue(SHIFTREG_register *reg, uint8_t *bytes, uint8_t nbytes ){
uint8_t mask, i, j;
for (i=0; i<nbytes; i++) { mask = BIT_MASK;
for (j = 0; j< 8; j++) { /* mask bit * if bit 0 output 0 * else output 1 * shift bit mask one place right (сдвинуть битовую маску на одно место вправо) */ if (bytes[i] & mask){ //сравниваем каждый бит с единицей sbi(*(reg->PORT_addr),reg->DS_pin); shift_in_pulse(*(reg->PORT_addr),reg->SH_CP_pin); } else{ cbi(*(reg->PORT_addr),reg->DS_pin); shift_in_pulse(*(reg->PORT_addr),reg->SH_CP_pin); }
mask = (mask >> 1); //сдвигаем биты } } parallel_out_pulse(*(reg->PORT_addr),reg->ST_CP_pin); } /***********************END OF FILE***********************/shiftreg.hСпойлер/****************************************************************************** * File Name : shiftreg.h * Author : D.Gotic * Version : V0.1 * Date : 03/12/2010 * Description : This file contains all the functions prototypes * and structure definitions for the 74HC595 shit register driver ******************************************************************************/ /* Define to prevent recursive inclusion ----------*/ #ifndef SHIFTREG_H #define SHIFTREG_H /* Includes ----------*/ #include <inttypes.h> /* a structure which defines the interface from the uC to the SHIFT REGISTER */ typedef struct _SHIFTREG_register { volatile uint8_t *DDR_addr; /* address of the uC Data Direction Register */ volatile uint8_t *PORT_addr; /* address of the uC PORT Register */ uint8_t DS_pin; /* Pin number to which the DS pin is connected */ uint8_t ST_CP_pin; /* Pin number to which the ST_CP pin is connected */ uint8_t SH_CP_pin; /* Pin number to which the SH_CP pin is connected */ } SHIFTREG_register;
lev[4][3]^=((1<<7)|(1<<6)|(1<<5)|(1<<2)); */Собрал схемку в протеусе, проверил, работает. Это просто счетчик импульсов на ATiny85 с выводом значений на семисегментные индикаторы. Мой проект в рамках самообразования (код черновик). Но я решил пойти несколько дальше, т.к. непосредственно на 74HC595 много не подключить, по току есть ограничения. Конечно выручит ULN2803A. https://www.chipdip.ru/product/uln2803a-stm Матрица из восьми транзисторов Дарлингтона, 500мА, 50В. Однако есть сдвиговые регистры уже с силовыми ключами - TPIC6C595N напр. Описаний его и поделок, тем более библиотек - не много, и то все ардуиновские. С ардуино особо не дружу - предпочитаю чистый C/C++ и голый МК. http://labdegaragem.com/forum/topics/pl ... t%3A644315 У меня есть намерение что-нибудь сделать на этом регистре. Ну там бегущие поворотники, да мало ли чего. Наброски кода уже есть, но вот в протеусе подходящей модели не нашел. Начал лепить этот регистр из примитивов. И на этом дело остановилось. Может быть кто подскажет чем можно заменить TPIC6C595N в протеусе или как синтезировать сей девайс. (Здесь Datasheet на TPIC6C595N) https://www.chipdip.ru/product/tpic6c595n
Вложения:
Комментарий к файлу: Начало есть, а что дальше пока не знаю. TPIC6C595-0.png [12.73 KiB]
Скачиваний: 215
Если сравнить эти микросхемы (74HC595 и TPIC6C595) в представлении стандарта " IEC logic symbol" то "функционально" они одинаковы, и, скорее всего, для TPIC6C595 можно попробовать использовать библиотеку для 74HC595 , а в протеусе просто поставить 74HC595.. С учётом того, что у них нумерация выводов не совпадает..
если ТС работать с ВЛИ то пока не позно меняй регистр на sn75518
тогда тебеж не нужны будут ВВ ключи все равно код ПОКА не написан пиши сразу под него
Добавлено after 4 minutes 36 seconds: strobe там заточен на АРЯ можно не применять подаф 0
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Заголовок сообщения: Re: Непонятные функции сдвигового регистра SN74HC595N
Добавлено: Вс янв 17, 2021 16:56:23
Встал на лапы
Зарегистрирован: Пн ноя 04, 2019 09:58:29 Сообщений: 102 Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения:0
Здравствуйте уважаемые коты. Коли здесь упоминается о сдвиговом регистре 74HC595, то за вечерок (дело было вечером - делать было нечего) я написал некоторую реализацию его применения в связке с матрицей из восьми транзисторов Дарлингтона - ULN2803A. Среда разработки AtmelStudio, MCU Attiny13. Назвал это дело "Веселый стоп-сигнал" и "Веселый поворотник". Может быть себе на мотоцикл приколхозю. Код на Си. Дополнительно решил разобраться как правильно укладывать микроконтроллер спать и как его будить. Электроэнергию надо экономить. Для "помигать светодиодами" счел целесообразным снизить частоту до 128 kHz, ну и поиграть с единственным таймером на Attiny13. Это регистры OCR0A/TCCR0B (Output Compare Register и Timer/Counter Control Register). Просимулировал в протеусе - вроде как фурычит. Стоп-сигналСпойлер
//------- void HC595Pulse(void){ // Pulse the Shift Clock DATA_PORT |= (1<<CLOCK); // HIGH DATA_PORT &=(~(1<<CLOCK)); // LOW }
//------- void HC595Latch(void){ // Pulse the Store Clock DATA_PORT |=( 1<<LATCH ); // HIGH _delay_ms(1); DATA_PORT&=(~(1<<LATCH)); // LOW _delay_ms(1); }
//------- void HC595Write(uint8_t data){ //Последовательная отправка каждые 8 бит //Send each 8 bits serially //Order is MSB first for( uint8_t i=0; i<8; i++ ){ //Output the data on DS line according to the Value of MSB if(data & 0b10000000) { HC595DataHigh();} //MSB is 1 so output high else { HC595DataLow(); } //MSB is 0 so output high HC595Pulse(); //Pulse the Clock line data = (data<<1); //Now bring next bit at MSB position } //Now all 8 bits have been transferred to shift register //Move them to output latch at one HC595Latch(); }
//------- void HC595Init(void){ // Initialize HC595 // Make the Data(DS), Shift clock (SH_CP), Store Clock (ST_CP) lines output DATA_DDR|=((1<<DATA)|(1<<CLOCK)|(1<<LATCH)); HC595Write(0b00000000); }
//------- void HC595Pulse(void){ // Pulse the Shift Clock DATA_PORT |= (1<<CLOCK); // HIGH DATA_PORT &=(~(1<<CLOCK)); // LOW }
//------- void HC595Latch(void){ // Pulse the Store Clock DATA_PORT |=( 1<<LATCH ); // HIGH _delay_ms(1); DATA_PORT&=(~(1<<LATCH)); // LOW _delay_ms(1); }
//------- void HC595Write(uint8_t data){ //Последовательная отправка каждые 8 бит //Send each 8 bits serially //Order is MSB first for( uint8_t i=0; i<8; i++ ){ //Output the data on DS line according to the Value of MSB if(data & 0b10000000) { HC595DataHigh();} //MSB is 1 so output high else { HC595DataLow(); } //MSB is 0 so output high HC595Pulse(); //Pulse the Clock line data = (data<<1); //Now bring next bit at MSB position } //Now all 8 bits have been transferred to shift register //Move them to output latch at one HC595Latch(); }
/* Initialize HC595 */ void HC595Init(void){ // Make the Data(DS), Shift clock (SH_CP), Store Clock (ST_CP) lines output DATA_DDR|=((1<<DATA)|(1<<CLOCK)|(1<<LATCH)); HC595Write(0b00000000); }
/* Не настраиваемое прерывание _П_П_П_П_П_П_ по любому фронту */ void setupPCINT0(void){ GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0. PCMSK |= (1<<BUTTON); // Разрешаем по маске прерывания. }
PORTB|= (1 << BUTTON); //Устанавливаем pull-up режим ножки BUTTON DDRB &= ~(1 << BUTTON); //Настраиваем ножку BUTTON в режим входа
/* Отключаем не используемые функции, для экономии электроэнергии */ ADCSRA &= ~(1<<ADEN); //Disable ADC ACSR = (1<<ACD); //Disable the analog comparator
/* Подготовка ко сну */ set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set Sleep Mode: Power Down sleep_enable(); // Enable Sleep Mode
sei(); // разрешаем прерывания
while(1){ /* здесь делать нечего */ }
}
Отличие одного кода от другого лишь в логике организации беготни светодиодных огоньков. Кроме того, функции сдвигового регистра не предусматривают возможности каскадирования.
Эйлер Леонард, зачем такие адские задержки? Тинька 595-й по скорости не "пробьёт". И вот такой алгоритм будет компактней и быстрей. Для тиньки это актуально.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения