Prueba de LEDs Arduino PWM y IC74HC595

Oct 17, 2013 No Comments by

El integrado IC74HC595 es un shift que permite manejar 8 bit paralelos a través de un byte serial. Como solo maneja estados lógicos, debemos jugar con el tiempo o el PWM para manejar “intensidades” de iluminación.

El siguiente ejemplo permite manejar 8 leds a través de un byte enviado al shift (IC74HC595) y la intensidad es aplicada a través de un PWM sobre la línea de tierra, usando un transistor de baja potencia, ejemplo el 2N2222.

int data = 11, clock = 10, latch = 8, bitToSet = 0, pwm1 = 9, pwm1val = 0, led=0;
unsigned long t0int = 100000, t0prv = 0;
unsigned long t1int = 500, t1prv = 0;

void setup() {
  // initialize the digital pin as an output.
  pinMode(data, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(latch, OUTPUT);
  pinMode(pwm1, OUTPUT);
  registerWrite(data,LOW);
  Serial.begin(9600);
  Serial.println("Inicio");
}

void loop() {
  unsigned long t0act = micros();
  unsigned long t1act = millis();
  //Led
  if(t0act - t0prv > t0int)
  {
    t0prv = t0act;
    for(int i=0;i<8;i++)
    {
      registerWrite(i, LOW);
    }
    registerWrite(led, HIGH);
    led++;
    if ( led == 8 )
      led = 0;
  }
  //PWM
  if(t1act - t1prv > t1int)
  {
    t1prv = t1act;
    analogWrite(pwm1,pwm1val);
    pwm1val = (pwm1val + 5);
      if(pwm1val > 255)
      pwm1val=0;
  }
}

void registerWrite(int whichPin, int whichState) {
  byte bitsToSend = 0;
  digitalWrite(latch, LOW);
  bitWrite(bitsToSend, whichPin, whichState);
  shiftOut(data, clock, MSBFIRST, bitsToSend);
  digitalWrite(latch, HIGH);
}
Electronica

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.
No Responses to “Prueba de LEDs Arduino PWM y IC74HC595”

Leave a Reply


6 + one =