Неправильно работают 7-сегментные индикаторы.
- Войдите на сайт для отправки комментариев
Втр, 25/06/2019 - 14:34
Здравствуйте! Я школьник, интересуюсь ардуиной. Хочу сделать термометр с выводом на 2 одноразрядных семисегментных индикатора с сдвиговыми регистрами 74HC595. Код для термометра пашет отлично, а вот с каскадом все плохо. Семисегментники горят всеми огнями и не реагируют на цифры вводимые в последовательный порт. Железо поставил правильно, получается проблема в коде. Код брал отсюда: http://arduino.ru/Tutorial/registr_74HC595 , думал доработать но не смог. Вот мой код:
#define CLOCK 13 #define DATA 12 //замена слов на порты к сдвиговикам #define LATCH 8 int i; int t; int r; //переменные int y; int g; int w; int firtemp; int h = 1000; byte inf[10] { 0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, //массив с байтами, посылаемыми в сдвиговики 0b11100000, 0b11111110, 0b11110110 }; void setup() { pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); //пинмоды pinMode(LATCH, OUTPUT); // digitalWrite(LATCH, HIGH); //не знаю нужна ли эта строчка Serial.begin(9600); //открыл порт } void loop() { w = Serial.parseInt(); //ввод в порт числа g = fun(w); //выделение десятков из числа Serial.println(g); //печать десятков g = inf[g]; //присвоение числу десятков, байта из массива, соответствующего числу y = prim(w); Serial.println(y); //то же с единицами y = inf[y]; shift(y); //продвигаем байты в регистры, сначала второй, потом первый shift(g); delay(h); //задержка(потом переделаю) } void shift(int ry) { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, LSBFIRST, ry); //продвигалка digitalWrite(LATCH, HIGH); } void outshift(int ry) { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, MSBFIRST, ry); //продвигалка наоборот //блоки функций digitalWrite(LATCH, HIGH); } int fun(int number) { int r = number / 10; //вычисление десятков return r; } int prim(int num) { int g = fun(num); int t = num - g * 10; //вычисление единиц return t; }
Забыл прочитать как вставлять код. Сделал наобум. Извиняюсь.
А если выкинуть все лишнее и просто присвоить g и y какие-то значения (допустим 1 и 2 ), работает? А 29 строка скорее всего нужна.
Нет не реагирует вообще. Насчет 29 строки спасибо. учту
Внимательно проверь подключение регистров, согласно последней схеме из твоей ссылки. Загрузи пример оттуда и проверью Там все правильно и работать должно. Если работает, то регистры подключены правильно. После этого грешить можно только на твой скетч.
Ок. Сделаю - отпишусь.
А в сериал правильные цифры выводит?. Усли Да, то скорее всего ошибки в монтаже.
Работает. Все таки это скетч.
Работает. Все таки это скетч.
И что было?
А в сериал правильные цифры выводит?. Усли Да, то скорее всего ошибки в монтаже.
Цифры выводит правильные, но это только маленький кусок кода. Я уже даже пробовал и MSBFIRST и подключать по другому. Не получается.
Работает. Все таки это скетч.
И что было?
Поочередно загорается каждый сегмент второго индикатора, а затем первого. (для ардуины наоборот).
Потом тухнет.
Это работает последний пример?
Самый последний. 2.2
Замени во 2 и 3 строке последние параметры на любые цифры из массива inf твоего кода и посмотри что получится
Работает просто збс! Даже 7-сегментники не глючат!
Может надо переписать массив под MSBFIRST?
А зачем? Что не так? Думаю дальше сам разберешься.
Ладно, сейчас попробую. Но не факт: в программировании я новичок, так что могу быть тупым на совершенно очевидных вещах. Так что могу потом еще спросить.
Ладно, сейчас попробую. Но не факт: в программировании я новичок, так что могу быть тупым на совершенно очевидных вещах. Так что могу потом еще спросить.
Если мозги работают, то пара тройка дней и сам будешь новичков учить. Удачи!
Спасибо!
Неправильно работают 7-сегментные индикаторы
Никогда так не говорите (не пишите). Просто, никогда. Такие формулировки сразу же вызывают отторжение, неприятие и желание ответить "Это мозги у тебя неправильно работают". Техника всегда работает так, как сделана, а программа так, как написана.
Это не наезд, просто совет как писать вопросы, чтобы не вызывать раздражение первой же фразой.
Вот на всякий случай для общего развития http://arduino.ru/forum/apparatnye-voprosy/displei-16kh1-ot-kkm-elves-mikro#comment-417911 правда там 8 разрядов, но управление регистрами очень похожее. Может что-нибудь прояснит.