Не работает схема расширения выходов Ардуино на 74HC595 для светодиодов.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Доброе время суток форумчане!

Собрали схему для одного регистра 74HC595, как приведено на сайте, заливали скетчи примеров, во всех случаях горит светодиод на ноге 7, т.е. Q7

Не поймем в чем дело. Меняли регистры, выходы Ардуино. Светодиоды горят, если подать питание.

Помогите кто чем сможет :)

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

А вы пробовали без скетчей им управлять - напрямую задавая логические уровни на входах?

А так думаю вы его не правильно подключили. И в скетче у вас 5 ошибок.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

вот, просто перебор диодов в двоичном коде:

//Пин подключен к ST_CP входу 74HC595
int latchPin = 8;
//Пин подключен к SH_CP входу 74HC595
int clockPin = 12;
//Пин подключен к DS входу 74HC595
int dataPin = 11;
  
void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() {
  // отсчитываем от 0 до 255  и отображаем значение на светодиоде
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // устанавливаем синхронизацию "защелки" на LOW
    digitalWrite(latchPin, LOW);
    // передаем последовательно на dataPin
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); 
 
    //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    digitalWrite(latchPin, HIGH);
    // пауза перед следующей итерацией
    delay(500);
  }
}

Горит только Q7

ites
Offline
Зарегистрирован: 26.12.2013

Наверняка, уже всё давно проверено на правильность подключения, но, скорее всего, дело в электроннике. Либо нет где-то контакта, либо он где-то не там, либо не подсоединён один из "неважных" выходов сдвигового реистра, либо что то не работает.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

из всей программы оставили только:

//Пин подключен к ST_CP входу 74HC595
int latchPin = 8;
//Пин подключен к SH_CP входу 74HC595
int clockPin = 12;
//Пин подключен к DS входу 74HC595
int dataPin = 11;
 
 
 
void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() {
  // отсчитываем от 0 до 255  и отображаем значение на светодиоде  numberToDisplay
  //for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // устанавливаем синхронизацию "защелки" на LOW
    //digitalWrite(latchPin, LOW);
    // передаем последовательно на dataPin
    shiftOut(dataPin, clockPin, MSBFIRST, 255); 
 
    //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    digitalWrite(latchPin, HIGH);
    // пауза перед следующей итерацией
    //delay(500);
  //}
}

Фактически выводим число 255, т.е. зажечь все св.диоды - не горит.

Выводим 254 - не горит. Выключаем питание Ардуино, включаем - не горит один, а еще один судоржно моргает. на его ноге 3,8 В

Если посадить этот диод на другую ногу, то там будет 3,8 В

Какая-то хрень. Диоды и резисторы  (220 Ом) одинаковые.

На остальных выходах регистра примерно 4,2 В 

Питание 5 В.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Собрали схему точно также как здесь http://arduino.ru/Tutorial/registr_74HC595

Для одного регистра.

sp34
Offline
Зарегистрирован: 05.03.2013

74HC595 - помучал я ее и тоже что-то не выходило , тогда я стал использовать библиотеку SPI - ......

#include <SPI.h>
 /* - библ. использующая SPI интерфейс МК (MOSI> 5 ,MISO< 6 ,SCK>7) при этом pin 6 (MISO) нельзя использовать для других нужд  Он является входом для ответа от ведомых устройств и даже если ответ не нужен , он должен все равно остаться свободным.*/
// подключаем библиотеку SPI
// - pin 5(MOSI) ATtiny к 14 выводу 74hc595
// - pin 7(SCK) ATtiny к 11 выводу 74hc595 
// ST(вывод 12 74HC595 ) подсоединяем к управляющим выходам ATtiny 13
enum { reg_OUTSIDE = 4 }; // -  pin 3
byte P1=0; 

В void setup ;

pinMode(reg_OUTSIDE, OUTPUT);
// инициализируем SPI 
 SPI.begin(); 

Далее монипулируем  выводами 74hc595 как хотим в функции LOOP , прописывая переменной Р1 - любые значения (например P1=B10000000; или P1= 00111100;  и т д


  digitalWrite(reg_OUTSIDE, LOW);
  SPI.transfer(P1);
  digitalWrite(reg_OUTSIDE, HIGH);
  delay(10);

 

ites
Offline
Зарегистрирован: 26.12.2013

Вряд ли дело в библиотеке. У меня 74HC595 нормально работает. Вот тут, например: http://arduino.ru/forum/programmirovanie/pyatoe-uprazhnenie-po-arduino-s...

sp34
Offline
Зарегистрирован: 05.03.2013

ites пишет:

Вряд ли дело в библиотеке. У меня 74HC595 нормально работает. Вот тут, например: http://arduino.ru/forum/programmirovanie/pyatoe-uprazhnenie-po-arduino-s...

Все очень сложно .....

Вот самый простейший пример http://greenoakst.blogspot.ru/2011/11/arduino-7-spi.html

ites
Offline
Зарегистрирован: 26.12.2013

sp34 пишет:

ites пишет:

Вряд ли дело в библиотеке. У меня 74HC595 нормально работает. Вот тут, например: http://arduino.ru/forum/programmirovanie/pyatoe-uprazhnenie-po-arduino-s...

Все очень сложно .....

Вот самый простейший пример http://greenoakst.blogspot.ru/2011/11/arduino-7-spi.html

Я к тому, что применение SPI вряд ли тут поможет, если не работает корректный (а в скетче почти корректно) вызов шифтаут.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Почему-то перестали загружаться скетчи....

Ошибка: avrdude: stk500_getsync(): not in sync: resp=0x00

Сменили плату Ардуино на новую! - тоже самое. Даже со скетчами примеров. В чем тут дело?

Переустановили среду разработки - без изменений.

Что-то вообще ничего не идет на двух платах, даже что раньше работало.

maksim
Offline
Зарегистрирован: 12.02.2012
Найдено результатов: примерно 88 (за 0,15 сек.)
14 фев 2012 ... avrdude: stk500_getsync(): not in syncresp=0x00. Порт указан правильный: Сom3, Board: Arduino Uno. Tools -> Burn Bootloader: avrdude: ...
arduino.ru/forum/.../stk500getsync-not-sync-resp0x00
5 май 2013 ... Добрый день.. проблема в следубщем, очень доллго готовил проект, сюрприз , только закончил залил программу и выдет avrdude: ...
arduino.ru/.../panika-avrdude-stk500getsync-not-sync-resp0x00
 
18 ноя 2012 ... Серву подключил вроде правилно,а призагрузке скетча ,выдаёт вот это: avrdude: stk500_getsync(): not in syncresp=0x00 и при этом ни ...
arduino.ru/.../pochemu-pri-zagruzke-vydaetavrdude-stk500getsync-not-sync -resp0x00
13 июн 2012 ... купил atmega328, 7ка сама поставила дрова(я их удалил и руками о5 поставил) при аплоаде выдает avrdude: stk500_getsync(): not in ...
arduino.ru/.../oshibka-avrdude-stk500getsync-not-sync-resp0x00
images?q=tbn:ANd9GcQCo3bkAXnbBBQp5YeT22a
5 дек 2012 ... avrdude: stk500_getsync(): not in syncresp=0x00. DFRduino UNO v2.0 выдаёт: Размер скетча в двоичном коде: 1 108 байт (из 32 256 ...
arduino.ru/.../arduino-ne-proshivaetsya-perestala-bez-prichiny
21 окт 2012... ошибка "avrdude: stk500_getsync(): not in syncresp=0x00", компилирует скетч пытается залить,светодиод RX моргает при заливке , а ...
arduino.ru/.../arduino-nano-perestala-zagruzhat-sketchi
10 мар 2013 ... avrdude: stk500_getsync(): not in syncresp=0x00. я пробывал переустановить дрова менял usb и менял ide компиляторы. прошу о ...
arduino.ru/.../ne-gruzitsya-sketch-v-arduino-i-ne-rabotaet-knopka-reset
12 авг 2011 ... avrdude: stk500_getsync(): not in syncresp=0x00 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51. Уже перезагрузился ...
arduino.ru/.../atmega328-avrdude-stk500disable-protocol-error-expect0x14- resp0x51
15 фев 2012 ... Binary sketch size: 1026 bytes (of a 32256 byte maximum) avrdude: stk500_getsync(): not in syncresp=0x00. и при этом led который на 13 ...
arduino.ru/forum/obshchii/ne-gruzitsya-sketch
1
2
3
4
5
6
7
8
9

 

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Спасибо, но там все как-то молопонятно.

Такую ошибку стало выдавало, когда на все 14 выходов повесили светодиоды через 220 Ом, чтобы они по очереди загорались и тухли.

Потом стало выдавать эту ошибку и на Blink, при этом остальные св.диоды подключены, но не запрограммированы.

Следующий этап - отключили все, оставили только на 13-м выходе, залили Блинк - без ошибки! И моргает!

Повторяем блинк для 13 и 12-го выхода; 13-й горит хорошо, а 12-й еле-еле, заметно только если сверху диода смотреть.

Пробовали вместо 12-го 11 и 8 выходы - тоже самое, свечения практически нет. На выходе Ардуино при слабом свечении выдает 1,5 В. Плата новая, ничего кроме св. диодов не цепляли.

Можно ли было ее "поджарить", если на все 14 выходов св.диоды повесить?

Не хочется в это верить, ведь задали ток 20мА, вместо 40 допустимого....

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Вот код для 13 и 12 выхода

  digitalWrite(led13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(3000);               // wait for a second
  digitalWrite(led13, LOW);    // turn the LED off by making the voltage LOW
  delay(500);               // wait for a second

digitalWrite(led12, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(3000);               // wait for a second
  digitalWrite(led12, LOW);    // turn the LED off by making the voltage LOW
  delay(500);               // wait for a second

Выходы определены:

int led13 = 13;
int led12 = 12;

 

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Тьфу, пины-то как раз и не сконфигурировал на выход! :)

Мозг уже воспален :)  Заработал Блинк для 10-13 выхода на новой плате.
 

 

Со старой вопросы остались....

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а питаешь от USB только или с внешним питанием? может напряжение проседает. проверь питание когда много светодиодов зажигаешь

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Питаю по USB. Светодиоды зажигаю по очереди.

Заметил вот что. Если все 14 линий нагружены, скетч не заливается, выдает эту ошибку.

Снимаю диоды с 0...7, скетч заливается, даже на ту плату, которую посчитал сгоревшей.

А где померить напряжение? Во рабочем режиме на выходах платы 4,7 В (разъемы 0...13), на диодах - 1,7...2 В

USB 2.0 выдает с компа 500 мА, все св.диоды вместе потребят 300 мА, имхо, хватает. Где-то видел, что сама Ардуинка 75 мА хавает.

maksim
Offline
Зарегистрирован: 12.02.2012

Richtenstein пишет:

Заметил вот что. Если все 14 линий нагружены, скетч не заливается, выдает эту ошибку.

Читайте внимательно Uno.

  • Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины ATmega8U2 USB-to-TTL.
Связь

На платформе Arduino Uno установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. ATmega328 поддерживают последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX). Установленная на плате микросхема ATmega8U2 направляет данный интерфейс через USB, программы на стороне компьютера "общаются" с платой через виртуальный COM порт. Прошивка ATmega8U2 использует стандартные драйвера USB COM, никаких стороних драйверов не требуется, но на Windows для подключения потребуется файл ArduinoUNO.inf.  Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе. Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1). 

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Думаю, нужно снимать нагрузку при заливке скетча.

Сейчас все 14 линий нагружены, скетч не льется, размыкаю цепь (землю выдергиваю) - все ОК!

Видимо такая же причина была  с регистром и подключением MOTOR Shield 2.0

Заливалась всякая билиберда, колеса жили своей жизнью.

Завтра проверю - обязательно отпишусь!

Richtenstein
Offline
Зарегистрирован: 04.01.2014

То maksim, спасибо за разъяснение.

Однако раньше, когда было подключено 3 светодиода на 0, 1 и 2 подобных проблем не было.

Richtenstein
Offline
Зарегистрирован: 04.01.2014

Всем спасибо, все работает!