74HC595 не работает должным образом

Я использовал следующий код для последовательного включения 8 желтых светодиодов, но он работает только в Proteus, как и предполагалось. Однако на моей макетной плате все 8 светодиодов продолжают мигать, а резисторы на 220 Ом. Кроме того, когда я пытаюсь изменить значение переменной «светодиоды», например, на 0x0F, она не загорается, я читал в руководстве по переключению Arduino, что конденсатор 0,1F на защелке будет даже мерцать, поэтому теперь я действительно запутался.

int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

byte leds = 0;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

void loop() 
{
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(100);
  }
}

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);

}

, 👍1

Обсуждение

Задержка после «updateShiftRegister» всего 100 мс? Это означает, что в течение секунды все светодиоды обновляются. Из-за этого они будут мигать? Также; Вы пробовали конденсатор 0.1F?, @Paul

что значит "мигать все вместе"?, @jsotola


1 ответ


1

РЕШЕНО! я пробовал много решений, чтобы заставить его работать, но это просто не сработало, и вот решения, которые я пробовал а) использовать 0,1 мкФ или 10 мкФ между VCC и заземляющим контактом 74hc595. b) установить нулевое значение для clockPin и dataPin перед отправкой данных. в) замена резисторов с 220 Ом на 470 Ом.

тем не менее, я подключил контакт 13 74HC595 к контакту Arduino и обнулил его, чтобы 8 выходов были готовы к работе, затем digitalWrite(out_enable_Pin, HIGH), отправьте данные, как показано в следующем коде, затем digitalWrite(out_enable_Pin, LOW ) снова .

int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
int out_enable_Pin=13;
int resetPin=5;
char leds = 0;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  pinMode(out_enable_Pin, OUTPUT);  
  pinMode(resetPin, OUTPUT);  
}


void loop() 
{
  digitalWrite(out_enable_Pin, LOW);  
  digitalWrite(resetPin, HIGH);

  for (int i = 0; i <255; i++)
  {
    leds=i;
    updateShiftRegister();
    delay(1000);
  }
}

void updateShiftRegister()
{
    digitalWrite(out_enable_Pin, HIGH);
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, leds);
   digitalWrite(out_enable_Pin, LOW);
   digitalWrite(latchPin, HIGH);
}
,