Looplicht

Looplicht in hardware

Voor het looplicht projectje willen een reeks lichtjes maken die één voor één gaan oplichten en volledig in hardware (en een beetje hulp van software). Dit gaan we doen in twee stappen. De eerste stap (v1) is als volgt: gebruik het schuifregister om een lichtje te laten lopen van links naar rechts. In de tweede stap (v2) zorgen we voor continuatie van het looplichtje met behulp van een multiplexer.

Breadboard Setup

Elektronisch Schema

Opdracht 4.5a - Looplichtje V1

Bouw de eerste stap van het looplichtje in hardware. Plaats je componenten op het breadboard zoals weergegeven in bovenstaande afbeelding. Gebruik een drukknop voor de klokingang en een switch om de seriële ingang van het schuifregister te bedienen. Sluit de drukknop aan op zowel het schuifregister als het opslagregister en vergeet niet de debouncer techniek op deze klokingangen toe te passen.

Op onderstaande pagina vind je extra informatie/herhaling over debouncing alsook een code-voorbeeld dat je voor deze oefening als startpunt kan gebruiken:

Extra info debouncing




ANS

ANS vraag 6a, 6b, 6c:

  • Waarom passen we de debouncer techniek toe op de klokingangen?

  • Waarom zien we de uitgangen van het schuifregister met een vertraging van één klokperiode? Hoe kunnen we dit oplossen?

  • We gaan de lus vervolledigen in de volgende stap met de multiplexer maar mogen we de QH’ uitgang van het schuifregister ook niet gewoon rechtstreeks verbinden met de seriële ingang van de schuifregister?

Roep de docent, demonstreer de functionaliteit van de schakeling.

Wegwerken van de vertraging

We willen de vertraging wegwerken tussen het schuifregister en het storageregister. Er zijn een aantal oplossingen mogelijk. Het nieuwe programma is gelijkaardig aan de initiële debouncer code, maar heeft nu twee uitgangen (zoals blijkt uit onderstaande code-snippets): RCLK en SRCLK. Beide uitgangen zijn afhankelijk van de variabele kloktoestand, maar waar de SRCLK de gewone kloktoestand-waarde gebruikt, gebruikt de RCLK de geïnverteerd kloktoestand-waarde. De functie updateCLK wordt gebruikt om de uitgaande kloktoestanden te updaten.

Het storageregister schakelt nog altijd op de stijgende flank van RCLK. Aangezien dit signaal nu het geïnverteerde is van SRCLK, zal het ogen alsof het storageregister schakelt op de dalende flank van SRCLK.

void updateCLK(){
    // Update het uitgaande kloksignaal:
    // RCLK is steeds SRCLK geïnverteerd
    digitalWrite(RCLK, !kloktoestand);
    digitalWrite(SRCLK, kloktoestand);
}
// Als de knop hoog is, laten we de knop 1 puls genereren,
// Op die manier resulteert eenmaal op de knop drukken in één klokpuls 
if (knoptoestand == HIGH) {
    kloktoestand = !kloktoestand;
    updateCLK();
    delay(1);
    kloktoestand = !kloktoestand;
    updateCLK();
}

Opdracht 4.5b - Looplichtje V2

  • Update je programma om de vertraging tussen het schuif- en storageregister weg te werken. Je mag hiervoor bovenstaande code-snippets gebruiken.

  • Vervolledig de lus door de uitgang van het schuifregister aan te sluiten op de ingang het schuifregister met behulp van een multiplexer (74HC157). Zo kunnen we kiezen om zelf de aanzet te geven om het lichtje te laten lopen, maar ook om de lichtjes in een lus door te laten lopen. Met de multiplexer kunnen we m.a.w. de keuze maken tussen onze eigen input (switch) of de uitgang van het schuifregister. Voorzie daarnaast ook een extra switch om het selectie kanaal van de multiplexer te bedienen. De werking van de multiplexer werd eerder behandeld in opdracht 4.4c.

ANS

ANS vraag 7a, 7b:

  • Kunnen we nu meer dan één ledje tegelijk laten oplichten?

  • Kan het looplichtje ook opgebouwd worden in software?