74hc165 не выдаёт данные.
- Войдите на сайт для отправки комментариев
Пнд, 01/04/2019 - 17:57
Добрый день! Знаю что очередная тема про 165, но я не нашел решение проблемы и решил написать.
Не могу заставить работать 165 микруху. Подключил и все порты не рабоатют. только при подаче напряжения на порт D7 выдает что все еденицы. В чём может быть проблема? или что я не заметил?
datasheet: http://www.ti.com/lit/ds/symlink/sn74hc165.pdf
Порты подвел к земле через резистор 1кОм.
Код :
const int data_pin = 11; // Connect Pin 11 to SER_OUT (serial data out)
const int shld_pin = 8; // Connect Pin 8 to SH/!LD (shift or active low load)
const int clk_pin = 12; // Connect Pin 12 to CLK (the clock that times the shifting)
const int ce_pin = 9;
void setup() {
pinMode(shld_pin, OUTPUT);
pinMode(ce_pin, OUTPUT);
pinMode(clk_pin, OUTPUT);
pinMode(data_pin, INPUT);
digitalWrite(ce_pin, HIGH);
digitalWrite(data_pin, LOW);
digitalWrite(clk_pin, LOW);
digitalWrite(shld_pin, HIGH);
Serial.begin(9600);
}
void loop() {
digitalWrite(shld_pin, HIGH);
delay (10);
digitalWrite(shld_pin, LOW);
delay (10);
digitalWrite(ce_pin, LOW);
delay (10);
for (uint8_t i=0; i<8; i++)
{
digitalWrite(clk_pin , LOW);
//digitalWrite(clk_pin , LOW);
delay (10);
Serial.print(digitalRead (data_pin));
delay (10);
digitalWrite(clk_pin , HIGH);
delay (10);
}
digitalWrite(ce_pin, HIGH);
Serial.print("\n");
delay (1000);
}
Извините, код неправильный. Пробовал по разному все поменять и посмотреть как работает.
Вот правльный код:
const int data_pin = 11; // Connect Pin 11 to SER_OUT (serial data out) const int shld_pin = 8; // Connect Pin 8 to SH/!LD (shift or active low load) const int clk_pin = 12; // Connect Pin 12 to CLK (the clock that times the shifting) const int ce_pin = 9; void setup() { pinMode(shld_pin, OUTPUT); pinMode(ce_pin, OUTPUT); pinMode(clk_pin, OUTPUT); pinMode(data_pin, INPUT); digitalWrite(ce_pin, HIGH); digitalWrite(data_pin, LOW); digitalWrite(clk_pin, LOW); digitalWrite(shld_pin, HIGH); Serial.begin(9600); } void loop() { digitalWrite(shld_pin, LOW); delay (10); digitalWrite(shld_pin, HIGH); delay (10); digitalWrite(ce_pin, LOW); delay (10); for (uint8_t i=0; i<8; i++) { digitalWrite(clk_pin , HIGH); delay (1); Serial.print(digitalRead (data_pin)); digitalWrite(clk_pin , LOW); } digitalWrite(ce_pin, HIGH); Serial.print("\n"); delay (1000); }ПС: Может у вас проблемы с руками. Ну я здесь точно не помошник.
Qwone, ваши совет мне очень помог! Здоровья и счатья Вам и вашим близким.
А так оказалось что ардуина глючная, поменял ардуину и заработало. так что ломается всё.
А так оказалось что ардуина глючная, поменял ардуину и заработало.
Очередной Wavgat небось?
Человек птица гордая, пока не пнешь , не взлетит даже если ей надо. Но человек еще птица неблагодарная. Если взлетит от пинка, то нагадит на голову помогающему.
В монитор порта билеберду выводит.
byte in_165_shift() { digitalWrite(LATCH_PIN, LOW); // щелкнули защелкой digitalWrite(LATCH_PIN, HIGH); return shiftIn(DATA_PIN, CLOCK_PIN, MSBFIRST); // считали данные digitalWrite(LATCH_PIN, LOW); // щелкнули защелкой digitalWrite(LATCH_PIN, HIGH); return shiftIn(DATA_PIN, CLOCK_PIN, MSBFIRST); // считали данные }Все понял, мегу надо брать и нафиг эту 165.
В монитор порта билеберду выводит.
byte in_165_shift() { digitalWrite(LATCH_PIN, LOW); // щелкнули защелкой digitalWrite(LATCH_PIN, HIGH); return shiftIn(DATA_PIN, CLOCK_PIN, MSBFIRST); // считали данные digitalWrite(LATCH_PIN, LOW); // щелкнули защелкой digitalWrite(LATCH_PIN, HIGH); return shiftIn(DATA_PIN, CLOCK_PIN, MSBFIRST); // считали данные }это не монитор порта, это вы в коде билиберду пишете. Оператор return к чему у вас в 3 и 6-ой строке. подумайте?
Все понял, мегу надо брать и нафиг эту 165.
Всё правильно!
Только решение половинчатое, берите сразу Fugaku!
Использовал библиотеку. Два регистра подключено, использую 10 входов, 6 лишних подтянуты к нулю резисторами.
Монитор порта показывает числа от 1 до 1000000000, десять положений входов (кнопки), а не в двоичном формате.
#include <AH_74HC165.h> AH_74HC165 hc(10,11,12,13); unsigned int intValue; void setup () { Serial.begin(9600); } void loop() { hc.ReadBytes((byte*)&intValue,sizeof(int)); // чтение двух микрух Serial.println(intValue,BIN); delay(2000); }Монитор порта показывает числа от 1 до 1000000000, десять положений входов (кнопки), а не в двоичном формате.
а число 1 - это какое, двоичное или десятичное ?:)
В ардуине нет десятичных чисел. Есть только двоичные. Десятичныим они становятся в момент вывода по умолчанию. Если залезть в описание принт, то можно увидеть, что умолчание можно изменить например на шеснадцатиричные и тогда вывод будет в хексах но это не значит, что хексы живут внутри ардуины. Это только вывод в человеку понятном виде.
а число 1 - это какое, двоичное или десятичное ?:)
[/quote]
Как с 595, так B00100101. Перепаял подтяжку с не используемых ног с - на + и теперь как надо выдает 1111110000000001, но это тоже не работает пока не стал задавать так 64514.
Где задавать ? Что задавать ? Зачем ? Вроде регистры читали, не ? ) Взяли бы и без библиотеки прочитали (ну как в первых постах), глядишь и уложилось бы в голове что то.
Где задавать ? Что задавать ? Зачем ? Вроде регистры читали, не ? ) Взяли бы и без библиотеки прочитали (ну как в первых постах), глядишь и уложилось бы в голове что то.
Для запуска функций нужны значения каждой кнопки с 165-го. Так вот в формате 1111100000010101 не работает, а в формате 64514 условие на срабатывание функции работает.
Для запуска функций нужны значения каждой кнопки с 165-го. Так вот в формате 1111100000010101 не работает, а в формате 64514 условие на срабатывание функции работает.
жгешь просто :)
Показывай код, как работаешь с 1111100000010101 и как с 64514
жгешь просто :)
Показывай код, как работаешь с 1111100000010101 и как с 64514
Что монитор порта выдает с тем и работаю.
#include <AH_74HC165.h> AH_74HC165 hc(10,11,12,13); void setup () { Serial.begin(9600); } void loop() { if (intValue == 64513) {motor_s1();} //if (intValue == 1111110000000001) {motor_s1();} Вот так не работает. unsigned int intValue; hc.ReadBytes((byte*)&intValue,sizeof(int)); // чтение двух микрух Serial.println(intValue); delay(2000); } void motor_s1() { stepperq.setMaxSpeed(172); stepperq.setAcceleration(20000); stepperq.moveTo(-8000000); }//if (intValue == 1111110000000001) {motor_s1();} Вот так не работает.Вот здесь я вам ответил - http://arduino.ru/forum/programmirovanie/modernizatsiya-biblioteki-ili-kto-kak-chitaet-74hc165#comment-609969
жгешь просто :)
Показывай код, как работаешь с 1111100000010101 и как с 64514
Что монитор порта выдает с тем и работаю.
тяжелый случай...
Столько возитесь с этими регистрами, а с битами так и не научились работать...
если вам нужно проверить, что какой-то вход регистра замкнут - пишите так:
и это будет проверено. независимо от состояния других входов. И никакие лишние входы мешать не будут
да... с 2015года не научился двоичные и десятичные числа различать...
А вот никому не обязан! Прикажу - сделают!)
да... с 2015года не научился двоичные и десятичные числа различать...
Это моя вторая самоделка. Не каждый день конструирую. С новым сталкиваюсь, изучаю как могу. Не прошу готового решения, прошу помощи в случае больших трудностей.
тяжелый случай...
Столько возитесь с этими регистрами, а с битами так и не научились работать...
это называется логика, не всем с ней везет.У некоторых с этим большие трудности, вот люди и мучаются.
Это моя вторая самоделка. Не каждый день конструирую. С новым сталкиваюсь, изучаю как могу. Не прошу готового решения, прошу помощи в случае больших трудностей.
учитесь задавать вопросы, чаще случается, что когда вопрос составишь - тут и ответ сам складывается...
del