Inhoudsopgave:

Basys 3 wekker - Ajarnpa
Basys 3 wekker - Ajarnpa

Video: Basys 3 wekker - Ajarnpa

Video: Basys 3 wekker - Ajarnpa
Video: 3-часовой ТАЙМЕР (обратный отсчет) с 15-минутным ГРОМКИМ БУДИЛЬНИКОМ ⏱⏱ @TimerClockAlarm 2024, Oktober
Anonim
Basys 3 Wekker
Basys 3 Wekker

Ons project creëert een wekker met behulp van het Basys 3 FPGA-bord, een Arduino en een luidsprekerstuurprogrammabord. De gebruiker kan de huidige tijd op het bord invoeren met behulp van 11 invoerschakelaars op de Basys 3 en de waarde vergrendelen met de middelste knop op het bord. De gebruiker kan dan de wektijd invoeren met dezelfde schakelaars, maar druk op de linkerknop om de wektijd vast te zetten. Als de verkeerde tijd is ingevoerd, kan de resetknop (bovenste knop) worden ingedrukt en worden de huidige kloktijd en alarmtijd ingesteld op 00:00. De gebruiker kan dan de klok starten met de meest linkse schakelaar en het alarm aanzetten met de volgende schakelaar. Wanneer het alarm is ingeschakeld, maakt de wekker een geluid wanneer de kloktijd en de ingestelde alarmtijd overeenkomen.

Stap 1: Black Box-diagram

Black Box-diagram
Black Box-diagram
Black Box-diagram
Black Box-diagram

We begonnen ons project met het tekenen van een black box-diagram om de inputs en outputs die nodig zijn in ons programma te visualiseren. De volgende ingangen voor ons programma, zoals 5-bits invoer (Hour_in) zijn geïnitialiseerd om de 24-uurs tijd te specificeren, 6-bits (Min_in) invoer om maximaal 60 minuten weer te geven, een resetknop (Rst_b) om de gebruiker toe te staan om hun tijdinvoer wijzigen, een 1-bit invoer (alm_en) die de alarminvoer laadt, een 1-bit invoer (alarm_sw) om de wekker uit te zetten wanneer deze wordt geactiveerd, een 1-bit invoer (e_sec) die regelt wanneer de teller seconden zal lopen, een 1-bit invoer (Led_btn) die de huidige tijd instelt, en tot slot een 1-bit invoer (clk) die de tijd regelt die wordt weergegeven door het Basys 3-bord. De uitgangen zijn de (alm_on) die het signaal naar de Arduino stuurt, de sseg-uitgang die de ingangstijd op de Basys 3 weergeeft, en de anode-uitgang die regelt waar de ingangen worden weergegeven op het display met zeven segmenten.

Stap 2: Langzame klok

Langzame klok
Langzame klok

Het slow clock- of clock_div2-bestand creëert een klok waarvan de frequentie 2 hz is. Als we deze klok naar onze secondenteller voeren, zal de secondewaarde elke seconde met één toenemen. De langzame klok wordt gebruikt om een betrouwbaar kloksignaal te creëren dat één keer per seconde van laag naar hoog verandert.

Stap 3: Teller

Balie
Balie
Balie
Balie

Componententeller (minuten en seconden):

De basisfunctie van minuten en seconden is dat het tellers zijn. De minutenteller neemt ingang (Vin) op, wat een signaal is van ingangen (Min_in), en telt dan totdat de gewenste ingevoerde ingang is bereikt. De seconden nemen alleen de invoer van schakelaar (e_Sec) in beslag omdat deze niet op het zevensegment kan worden weergegeven en telt op de achtergrond zodra de schakelaar hoog '1' is. Ze voeren allebei hun waarde uit naar (Qout), en dan wordt het opgeslagen in (data) dat het naar SSEG stuurt, wat wordt gedaan in het koppelingsbestand. Ook wanneer minuten en seconden de waarden van 59 bereiken, wordt het gereset en is de uitvoer ervan '1' om minuten/uur te verhogen. Het kan ook worden toegewezen met een reset (rst_b) naar hun ingangen.

Stap 4: Telleruur

Teller uur
Teller uur
Teller uur
Teller uur

Component Teller Uur

Evenzo, als de componententeller van de minuten en seconden, neemt de uurcomponent invoer s op, zoals (Vin), wat een signaal is van het koppelen van bestandsinvoer (Hour_in), en heeft uitgangen die op dezelfde manier zijn gekoppeld aan de minuten en seconden. Wanneer de telwaarde van het uur 24 00 bereikt, wordt deze teruggezet naar 00 00.

Stap 5: Alarm

Alarm
Alarm
Alarm
Alarm
Alarm
Alarm
Alarm
Alarm

Het alarm.vhd-bestand bestaat uit d-flip-flops, opslagapparaten die digitale gegevens kunnen opslaan. Het alarmbestand wordt gebruikt om de tijd op te slaan waarop het alarm wordt geactiveerd. Om de gegevens van uren (5 bit input) en minuten (6 bit input) op te slaan, moeten we 11 d-flip-flops in ons alarmbestand uitstampen. Om dit te doen, moeten we eerst de logica importeren die de werking van d-flip-flops regelt en de componenten in kaart brengen. Elk van de 11 d-flip-flops zal één bit data van de inputs opslaan en de data toewijzen aan de outputs van het alarmbestand. Omdat d-flip-flops gegevens opslaan, kunnen we de gegevens op een later tijdstip gebruiken, zelfs als de ingangsschakelaars zijn gewijzigd.

Stap 6: Universele zevensegmentendisplaystuurprogramma

Universeel 7-segment beeldschermstuurprogramma
Universeel 7-segment beeldschermstuurprogramma
Universeel 7-segment beeldschermstuurprogramma
Universeel 7-segment beeldschermstuurprogramma
Universeel 7-segment beeldschermstuurprogramma
Universeel 7-segment beeldschermstuurprogramma

De universele zevensegmentendisplaydriver ontvangt de invoer van de klok en klokset en kan deze uitvoeren naar het zevensegmentendisplay op het bord. De bestuurder kan twee afzonderlijke tellingen tegelijk op het bord uitvoeren. We hebben deze functie gebruikt om zowel de uurtijd als de minutentijd afzonderlijk weer te geven. Het zevensegmentendisplay kan slechts één nummer tegelijk activeren, daarom moet het sseg-bestand multiplexing gebruiken om alle nummers van de tijd tegelijkertijd weer te geven. Het kloksignaal van het bord wordt in de sseg ingevoerd om de juiste tijd voor multiplexen te behouden. Een binair naar binair gecodeerde decimale encoder is nodig om de invoer naar het bestand om te zetten in een vorm die kan worden uitgevoerd naar het zevensegmentendisplay. De uiteindelijke uitvoer van het sseg-bestand wordt toegewezen aan het zevensegmentendisplay en de juiste tijd wordt op het display weergegeven.

Stap 7: Bestand koppelen

Bestand koppelen
Bestand koppelen
Bestand koppelen
Bestand koppelen
Bestand koppelen
Bestand koppelen

Het linkbestand verbindt alle andere aspecten van het programma en brengt de signalen naar hun juiste locatie. Elke component wordt ingebracht en geïnstantieerd in het bestand. Signalen worden gebruikt om gegevens van de ene component naar de andere over te dragen. De poorttoewijzing volgt het bovenstaande blackbox-diagram. Het linkbestand bevat ook de logica die bepaalt wanneer het alarm wordt geactiveerd. Het grootste deel van het project zal dan al klaar zijn. Het resterende werk is het routeren van elk signaal naar de juiste locatie.

Stap 8: Arduino

Arduino
Arduino
Arduino
Arduino

De arduino wordt gebruikt om de luidspreker te activeren en om de toon en de duur van de noot die door de luidspreker wordt gespeeld te regelen. De arduino leest een digitaal signaal van het Basys 3-bord. Wanneer dit signaal hoog is, zal de Arduino een PWM-signaal uitvoeren dat de toon en de duur van het alarm regelt. Het uitgangssignaal van de arduino wordt aangesloten op het ingangssignaal van een luidsprekerdriverkaart die het volume van de luidspreker verhoogt. De arduino doet dit proces zeer snel en herhaalt zich vele malen per seconde.

Stap 9: Kabelroutering

Kabelroutering
Kabelroutering

Het Arduino- en Basys 3-bord moeten fysiek zijn aangesloten om signalen tussen de borden over te dragen. De eerste kabel die moet worden aangesloten, is die van de grondpen van de JA PMOD van de Basys 3 naar de grondpen van de arduino. Verbind vervolgens een draad van pin 1 van de JA PMOD van de Basys 3 naar digitale pin 7 van de arduino. Verbind vervolgens twee aardingspennen van de arduino met de aardingspennen van de luidsprekerdriver. Sluit vervolgens de 3,3 V-uitgang van de arduino aan op de Vcc-pin van de luidsprekerdriver. Verbind vervolgens digitale pin 9 van de arduino met de In-pin van de luidsprekerdriver.

Aanbevolen: