регистры сдвига
- Войдите на сайт для отправки комментариев
Втр, 28/08/2012 - 16:25
Привет всем подскажите новичку как на писать программу, в режиме ожидания все диоды горят если нажать на первую кнопку гаснет первый светодиод если отпустить он загорается если нажимаем вторую кнопку второй светодиод гаснет если отпустить он загорается и так далии, заранее благодарен.
Вот статья Вам в помощь. Это как раз случай для Вашей схемы
Вообще-то этот вопрос нужно задавать в программировании, а не здесь.
А еще, прямо на этом сайте, в разделе "программирование", в абзаце "Базовые и полезные знания, необходимые для успешного программирования под платформу Arduino" есть ссылка на пример "Множим выходы с помощью сдвигового регистра 74HC595"
P.S. У меня "де жа вю". Как экономить выводы? Всего неделю назад. Те же вопросы, те же отвечающие, те же ответы :(
А еще, прямо на этом сайте, в разделе "программирование", в абзаце "Базовые и полезные знания, необходимые для успешного программирования под платформу Arduino" есть ссылка на пример "Множим выходы с помощью сдвигового регистра 74HC595"
P.S. У меня "де жа вю". Как экономить выводы? Всего неделю назад. Те же вопросы, те же отвечающие, те же ответы :(
с светодиодами я эту схему я собирал а как всё вместе чтобы работало с кнопками?
с светодиодами я эту схему я собирал а как всё вместе чтобы работало с кнопками?
Ну, наверное, для этого нужно научится работать с кнопками. Даже лучше было не со сдвиговых регистров начинать. А с "мигаем одним диодом", "читаем одну кнопку". Потом "по кнопке зажигаем диод", а уж потом переходить к "по кнопке зажигаем диод через сдвиговый регистр".
Начните с чтения http://arduino.ru/Reference/DigitalRead, а еще лучше весь раздел http://arduino.ru/Reference бегло просмотреть. Что-бы знать "какие строительные блоки" у вас имеются под руками.
На и базовые примеры, идущие с ArduinoIDE стоит посмотреть в File/Examples
Тот же File/Examples/Digital/Button (в нем и ссылочку найдете где можно посмотреть один из вариантов подключения кнопки).
И, кстати, в статье что дал AlexFisher как раз описан вариант где кнопки подключены не напрямую к дуине, а тоже через сдвиговый. Что-бы и входы - тоже экономить.
И, кстати, в статье что дал AlexFisher как раз описан вариант где кнопки подключены не напрямую к дуине, а тоже через сдвиговый. Что-бы и входы - тоже экономить.
С мигающим светодиодам там всё просто выбирается пин как выход
высоки – низкий уровень и задержка тут всё просто
Вот в этом тоже вроде всё понятно сдвиг регист всё работает хорошо
int data = 2;
int clock = 3;
int latch = 4;
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
void loop()
{
int delayTime = 50;
for(int i = 0; i < 256; i++){
updateLEDs(i);
delay(delayTime);
}
}
void updateLEDs(int value){
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, value);
digitalWrite(latch, HIGH);
}
Но не понятно как выбирать светодиод какой тебе нужно .
И вот тут я не пойму где вы сказали пример посмотреть
#include <SPI.h>
enum { REG_SELECT = 8 }; // пин, управляющий защёлкой (SS в терминах SPI)
void setup()
{
/* Инициализируем шину SPI. Если используется программная реализация,
* то вы должны сами настроить пины, по которым будет работать SPI.
*/
SPI.begin();
pinMode(REG_SELECT, OUTPUT);
digitalWrite(REG_SELECT, LOW); // выбор ведомого - нашего регистра
SPI.transfer(0); // очищаем содержимое регистра
/* Завершаем передачу данных. После этого регистр установит
* на выводах QA-QH уровни, соответствующие записанным битам.
*/
digitalWrite(REG_SELECT, HIGH);…………………………………….
http://robocraft.ru/blog/arduino/519.html
загружаю в ардуино 2180 не какой реакции я не понимаю как оно должно работать без этого int data = 2;
int clock = 3;
int latch = 4;
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
Ну подскажите как мне эту прогу написать
Что бы при нажатие кнопки через регистр светодиод гас ну очень нужно.
Помимого прочего почитайте вот это пожулуйста - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Ну подскажите как мне эту прогу написать
Что бы при нажатие кнопки через регистр светодиод гас ну очень нужно.
Leshak уже подсказал выше. От себя добавлю, чтобы научиться выбирать нужный светодиод, нужно понять, что байт состоит из 8 бит, каждый бит соответствует своему светодиоду. Ваша задача "в целом" сводится к 2-м действиям - прочитать содержимое регистров с кнопками и пихнуть это в регистры со светодиодами.
Никто за Вас писать прогу не будет Если Вы не будете выполнять рекомендации (хотя бы пытаться), то... сами понимаете.
Ну подскажите как мне эту прогу написать
Что бы при нажатие кнопки через регистр светодиод гас ну очень нужно.
Leshak уже подсказал выше. От себя добавлю, чтобы научиться выбирать нужный светодиод, нужно понять, что байт состоит из 8 бит, каждый бит соответствует своему светодиоду. Ваша задача "в целом" сводится к 2-м действиям - прочитать содержимое регистров с кнопками и пихнуть это в регистры со светодиодами.
Никто за Вас писать прогу не будет Если Вы не будете выполнять рекомендации (хотя бы пытаться), то... сами понимаете.
Я и не прошу мне написать программа мне просто нужен пример хотя бы с одной кнопкой и с одним светодиодам чтобы всё через сдвиг регистр работало
я понимаю что байт состоит из 8 бит, мне просто нужен наглядный и понятный пример как это всё работает, но неужели вам сложна написать наглядный пример с одной кнопкой и с одним диода , а дальше я сам потихоньку разберусь.
[...]
неужели вам сложна
[...]
Неужели вам сложно написать - пусть неправвильный - скетч, реализующий чтение из регистра сдвига / запись в регистр сдвига? На основе уже предлагавшихся вам примеров?
Напишите скетч, опубликуйте в ветке. Ну а мы попинаем вас (ваш скетч). А попинав, поможем.
А то как-то больно на эту рыбу похоже:
Я бы написал если бы знал с чего начать
leshak достаточно подробно описал возможный порядок действий.
А зачем Вам вообще программу писать? В поставленом Вами задании можно и без МК и без регистров обойтись.
Ох... запинали Levin-а :) Правда сам, слегка, подставился :) Ну ничего... Не обижайтесь. Это всяко лучше чем "тупой игнор" (есть персонажи которые и такого результат добиваются на форуме).
С чего начать - как я уже говорил "с чтения" - выше перечислил чего именно.
Далее, с принятия того факта что вы заблуждаетесь когда думаете "я это знаю". Судя по вашим вопросам утверждения вида "С мигающим светодиодам там всё просто выбирается пин как выход,высоки – низкий уровень и задержка тут всё просто","вроде всё понятно сдвиг регист" и "я понимаю что байт состоит из 8 бит" - не соотвествуют действительности.
Сдвиг регистр может и работает хорошо, но вот "как он работает" четкой ясности - явно нет. Я говорю это не с целью "загнобить вас", мы все тоже не родились с понимаем сдиговых регистров. Просто в кокой-то момент было понимания что "я их не понимаю", чтение нескольких(!) статей... ну и понял. То есть отправной точкой было именно "я не знаю".
Пример, который вы просите, написать не трудно. Есть только одно но... он уже имеется в линках/статьях которые вам давали. Смысл их писать заново? Результат-то будет тот же самый. Раз сложность подобных примеров, пока, не по зубам - значит нужно "откатится на шаг назад". Кушать слона по частям.
Вы просто схватились за задачу не соотвествующую "своему уровню". При этом когда вам подсказывают путь "в каком порядке нужно решать такие задачи" - вы игнорируете это. Как бы говорите врачу "как вас нужно лечить". Что, естественно, вызывает зубоскальство (раз сам знаешь что именно нужно - ну так и делай сам). Вообщем у вас есть выбор. Либо пользоватся "тем что дают", либо пытатся настаивать что-бы вам дали именно то что вы хотите и в той форме как вы хотите (шансы это получить я думаю вы уже оценили). Вы пришли к тренеру, он вам говорит "отжимайся", а вы "не... покажи мне супер-прием и я сам всех побью".
Вообщем вам нужно
Вот тут, когда по пунктам будете двигатся, усложнять "постепенно", то и помогать будут с большей вероятностью. Обычно помогают, как вам уже сказали, тем кто "сам пытается", а не ноет "дайте мне готовое".
P.S. И поправте ваш код. В соотвесвии с тем как вам сказали почитать "Втавка програмного кода". Лично мне код втавленный как вы вставили - даже читать/вникать не хочется. Если человеку лениво о удобстве других заботится, то зачем мне напрягатся?
А то как-то больно на эту рыбу похоже:
Ну а если это все "длинно и сложно" и вы, все-таки, хотите что-бы вам давали "по вашему", в том виде "как вы просите" - переходите из категории "новичка коллеги" в категорию "клиент". Тогда никто парить мозг вам не будет. Тратить усилия что-бы поднять ваше понимание, давать вам линки для чтения. "Любой каприз за ваши деньги". Хотите "диоды от кнопок через сдвиги" - пожалуста. Получите работающий скетч. Что вы потом с ним делать будете - уже будет целиком ваша забота (любоватся, пытаться понять, опять нанять кого-то что-бы объяснил и т.п.)
Только скорее всего это будет дорого. Програмисты нынче не дешевы :) Банкой пива обойтись - не выйдет.
А может и выйдет, смотря кого найдете. Может и найдете кому "будет не трудно", за "просто так". Но из отметившихся в ветке таких явно нет :)
На приму с этим та я разобрался тут сложностей нету правда по своему написано но работает а вот через регистр
А зачем Вам вообще программу писать? В поставленом Вами задании можно и без МК и без регистров обойтись.
По трём проводам такое количество кнопок не подключить
Ну почему светодиод не гаснет в чём косяк
int KnopkaPin1 = 7;
int val = 0;
int data = 11;
int cloc = 12;
int RCK = 8;
void setup()
{
pinMode(KnopkaPin1, INPUT);
pinMode(data,OUTPUT);
pinMode(cloc,OUTPUT);
pinMode(RCK,OUTPUT);
}
void loop()
{
val = digitalRead(KnopkaPin1);
if (val == HIGH){
shiftOut(data,cloc,LSBFIRST,1);
digitalWrite(RCK,HIGH);
}
}
Для начала, что бы код был более читабельный научитесь его правилно вставлять в комментарий: Вставка программного кода в тему/комментарий
Вот как это должно выглядеть:
А теперь по делу:
1. Еще раз пересмотрите пример работы со сдвиговыми регистрами, и найдите ошибку в своем коде касающуюся "задвижки" RCK. Перед передачей данных функцией shiftOut() на "задвижку" должен быть подан логический 0.
2. А почему светодиод должен погаснуть? Для того что бы светодиод погас нужно в регистр отправить нулевой бит соответствующий этому светодиоду.
2Levin
Для начала, что бы код был более читабельный научитесь его правилно вставлять в комментарий: Вставка программного кода в тему/комментарий
Кстати вам уже в третий(!) раз говорят про то что вы криво вставляете код. Обратите, наконец, на это внимание! И поправте свое прошлые посты в соотвествии с этим. Нажмите кнопку "изменить" и сделайте код читабильным.
На приму с этим та я разобрался тут сложностей нету правда по своему написано но работает а вот через регистр
Ну хозяин - барин. Разобрался, так разобрался. Мне что-то вам доказывать - совершенно не интерестно. Моя жизнь от того разбирается вы или нет - совершенно не изменится. Так что готов согласится с вами что вы разобрались. Ну и хорошо. Дальше можете доказывать свое правильное понимание сдвиговых регистров им самим. Рано или поздно они тоже согласятся с вами :)
Для начала, что бы код был более читабельный научитесь его правилно вставлять в комментарий: Вставка программного кода в тему/комментарий
Вот как это должно выглядеть:
А теперь по делу:
1. Еще раз пересмотрите пример работы со сдвиговыми регистрами, и найдите ошибку в своем коде касающуюся "задвижки" RCK. Перед передачей данных функцией shiftOut() на "задвижку" должен быть подан логический 0.
2. А почему светодиод должен погаснуть? Для того что бы светодиод погас нужно в регистр отправить нулевой бит соответствующий этому светодиоду.
digitalWrite(RCK, HIGH); Ели тут поставить LOW он проста вырубается и тоже не какой реакции
Блин с утра мысли в голову свежие лезут
А то... ;)
Для полноты счастья резюмируйте, чему научились:
Загонять данные в сдвиговый регистр?
Загоняете нужные вам данные? На нужные места? Или пока что только хоть какой-то реакции на регистре добились?
Сможете зажечь второй светодиод? (т.е. тот, что подключен к 2-му выводу сдв.регистра при нумерации 0->7)
А пятый?
А если на входе у вас две (пока что) кнопки? Сможете зажигать нужный вам светодиод или оба сразу (если обе кнопки нажаты одновременно)? Как вы будете это делать (код в студию)?
Ответите на эти вопросы - можно браться за регистр на входе...
UPD:
По каким соображениям выбрали delay(100)? Почему не delay(1000)? Или delay(1)? Или в конце концов delayMicroseconds(1)?
А то... ;)
Для полноты счастья резюмируйте, чему научились:
Загонять данные в сдвиговый регистр?
Загоняете нужные вам данные? На нужные места? Или пока что только хоть какой-то реакции на регистре добились?
Сможете зажечь второй светодиод? (т.е. тот, что подключен к 2-му выводу сдв.регистра при нумерации 0->7)
А пятый?
А если на входе у вас две (пока что) кнопки? Сможете зажигать нужный вам светодиод или оба сразу (если обе кнопки нажаты одновременно)? Как вы будете это делать (код в студию)?
Ответите на эти вопросы - можно браться за регистр на входе...
UPD:
По каким соображениям выбрали delay(100)? Почему не delay(1000)? Или delay(1)? Или в конце концов delayMicroseconds(1)?
Что бы была фиксация на нажатую кнопку
А то... ;)
Для полноты счастья резюмируйте, чему научились:
Загонять данные в сдвиговый регистр?
Загоняете нужные вам данные? На нужные места? Или пока что только хоть какой-то реакции на регистре добились?
Сможете зажечь второй светодиод? (т.е. тот, что подключен к 2-му выводу сдв.регистра при нумерации 0->7)
А пятый?
А если на входе у вас две (пока что) кнопки? Сможете зажигать нужный вам светодиод или оба сразу (если обе кнопки нажаты одновременно)? Как вы будете это делать (код в студию)?
Ответите на эти вопросы - можно браться за регистр на входе...
UPD:
По каким соображениям выбрали delay(100)? Почему не delay(1000)? Или delay(1)? Или в конце концов delayMicroseconds(1)?
Хотя это там вовсе и ненужно delay(100);
Что бы была фиксация на нажатую кнопку
"Сомневаюсь я, однако..." (с)
delay между установкой и сбросом уровня на выводе RCK в общем то и не нужен. Есть подозрение (давно не заглядывал в соответствующий даташит), что сдвиговый регистр защелкивается либо по возрастающему, либо по ниспадающему фронту. И, стало быть, необходимо обеспечить лишь определенный фронт, а не импульс минимально допустимой ширины.
А нажатие кнопки регистрируется довольно далеко от этого места - в строках 27 и 36.
Кстати, в последней редакции скетча вы можете отследить только раздельные нажатия кнопок. Если же их нажать одновременно, то ни одна нормально гореть не будет - особенно кнопка 2 (бит 0, т.к. после ее отработки вы сразу же забиваете регистр единичками (строки 24-26), теряя только что установленное состояние. Пока что вас спасают условные переходы и паразитное гашение (зажигание?) светодиода длится лишь микросекунды, но с разрастанием кода это может вылезти наружу.
Чего та не магу не как врубится по логике если 8 бит пишем В11111111
А если 16 В1111111111111111 не понятно не пашит с двумя регистроми послед.
Добавляем сюда
Почему не работает?
Чёта я запутался помогите
а если так попробовать:
Чем черт не шутит - а вдруг последовательная отправка двух байтов позволит заполнить два последовательно подключенных регистра сдвига?
Лишний параметр добавляете, вот и не работает.
Два подряд - это правильно. Если регистры подключены последовательно, то так и надо.
А почему Вы массив из 16 байт иниализируете только 2-мя байтами?
а если так попробовать:
Чем черт не шутит - а вдруг последовательная отправка двух байтов позволит заполнить два последовательно подключенных регистра сдвига?
так тоже не работает
Интересно, а в чем выражается это "так тоже не работает"?
Еще раз код перекопируйте, могло не работать из-за отсутствия задержки. А если и так не заработает, значит что-то не так подключаете.
Может я чёта в схеме напутал первый сдвиг регистр работает нормально а второй не хочет , 9 ногу первого регистра цепляем на 14 второго, а на в тором 9 висит пустая
Вот схема:
этот здесь смотрели?
Извиняюсь на нагрузку массу не подал
а если так попробовать:
Чем черт не шутит - а вдруг последовательная отправка двух байтов позволит заполнить два последовательно подключенных регистра сдвига?
Блин оказывается в схеме косяк был
Ну вот на конец та с вашей помощью я добрался практически до конца
Подключаем кнопки через регистр
Подключаем последовательно
Всё работает идеальна
Подключаем нагрузку через сдвиг регистр последовательно
Всё работает идеально
А теперь как же это всё совместить?
Для начала нужно перестать игнорировать сообщения.... Вот этот ваш код будет работать ровно один раз после перезаглузки. А почему подумайте сами...
Я не игнорировал я попробовал у меня не заработала косяк в другом был
вот это
Правильно. По умолчанию все выводы находятся в состоянии 0. Вы передаете данные в регистры и защелкиваете задвижку. При следующей передаче в регистры задвижку нужно опять опустить в 0 иначе регистр не выведет переданные ему биты.
Я умею в Ардуине управлять светодиодом через кнопку а вот дальше не знаю как
а дальше что делать?
Примерно дальше так: