Inhoudsopgave:

Tiny LED Matrix Display Klok - Ajarnpa
Tiny LED Matrix Display Klok - Ajarnpa

Video: Tiny LED Matrix Display Klok - Ajarnpa

Video: Tiny LED Matrix Display Klok - Ajarnpa
Video: DIY Arduino LED Clock using MAX7219 LED Matrix Display and DS3231 RTC module | Arduino LED Clock 2024, Juli-
Anonim
Image
Image
Kleine LED Matrix-displayklok
Kleine LED Matrix-displayklok
Kleine LED Matrix-displayklok
Kleine LED Matrix-displayklok
Kleine LED Matrix-displayklok
Kleine LED Matrix-displayklok

Ik heb altijd al een ouderwetse desktopklok willen hebben, die eruitziet als iets uit de films van de jaren 90, met vrij bescheiden functionaliteit: realtime klok, datum, veranderend achtergrondlicht, pieper en een alarmoptie. Dus kwam ik met een idee om er een te bouwen: een digitaal apparaat, gebaseerd op een microcontroller met alle functies die ik hierboven heb genoemd, en aangedreven door USB - ofwel een pc of een mobiele USB-oplader. Omdat ik het programmeerbaar wilde maken, met menu's en instellingen, was plaatsing van de MCU onvermijdelijk in dit project. ATMEGA328P IC (waar elk Arduino Uno-bord uit bestaat) werd gekozen als het "brein" van het circuit (overigens, ik had er gewoon genoeg). Door enkele elektronische onderdelen te combineren, zoals RGB-LED, druppellading-tijdwaarnemingschip en drukknoppen, was de geboorte van het hele project mogelijk - Programmeerbare kleine LED-display-desktopklok.

Dus, nadat we de entiteit van het project hebben behandeld, laten we het bouwen

Stap 1: Het idee

Het idee
Het idee

Zoals eerder vermeld, bevat ons apparaat een aantal mooie LED-matrixdisplays, van kleur veranderende RGB LED-achtergrondverlichting, druppellading-tijdwaarnemingschip, handige USB-voedingseenheid en kleine behuizing.

Laten we het blokschema van de apparaatbediening per onderdeel beschrijven:

1. Voedingseenheid:

Aangezien het apparaat op 5 volt gelijkstroom werkt, bestaat de voedingscomponent uit twee afzonderlijke circuits:

  • Micro-USB-ingang - Voor directe voeding oplader\PC.
  • 5V Lineair spanningsregelaarcircuit gebaseerd op LM7805 IC.

Het LM7805 IC-circuit is optioneel, tenzij u er de voorkeur aan geeft een andere beschikbaarheid van de voedingsingang te implementeren. In ons apparaat wordt Micro-USB PSU gebruikt.

2. Microcontroller-eenheid:

Microcontroller ATMEGA328P, fungeert als een "brein" van het hele apparaat. Het doel is om te communiceren met alle perifere circuits, de benodigde gegevens te leveren en de gebruikersinterface van het besturingsapparaat te bedienen. Aangezien de gekozen microcontroller ATMEGA328P is, hebben we Atmel Studio en basis C-kennis nodig (schema's en programmeersequenties worden in de verdere stappen beschreven).

3. Realtime klokcircuit:

Het op één na belangrijkste circuit in het apparaat. Het doel is om datum- en tijdgegevens te leveren, met de vereiste om deze op te slaan, zonder afhankelijkheid van de ingangsstroomaansluiting, d.w.z. tijdgegevens worden vernieuwd in realtime-modus. Om ervoor te zorgen dat de RTC-component de tijd- en datumgegevens kan blijven wijzigen, is een 3V-knoopcelbatterij aan het circuit toegevoegd. Het IC is DS1302, de werking ervan wordt in verdere stappen beschreven.

4. Invoerinterface - Drukknopschakelaars:

Input PB-schakelaars bieden een invoerinterface voor de gebruiker. Deze schakelaars worden verwerkt in het door de MCU en het besturingsapparaat gedefinieerde programma.

5. LED-matrixweergave

Apparaatdisplay bestaat uit twee IC-omhulde HCMS-2902 alfanumerieke LED-matrices, elk IC heeft 4 tekens van 5x7 kleine LED-matrix. Deze displays zijn eenvoudig te gebruiken, 3-draads communicatie ondersteund en klein van formaat - alles wat we nodig hebben in dit project.

6. RGB-achtergrondverlichting:

De kleur veranderende achtergrondverlichting is gebaseerd op externe RGB LED, aangestuurd door PWM-signalen afkomstig van de MCU. In dit project heeft RGB LED in totaal 4 pinnen: R, G, B en gemeenschappelijk, waarbij het R, G, B-kleurenpalet wordt bestuurd via PWM door MCU.

7. Zoemer:

Zoemercircuit wordt gebruikt als geluidsuitgang, voornamelijk voor alarmdoeleinden. De BJT-schakelaar wordt gebruikt om voldoende stroom te leveren aan de zoemercomponent, zodat het volume luid genoeg is om een levend persoon wakker te maken.

Stap 2: Onderdelen en instrumenten

Onderdelen en instrumenten
Onderdelen en instrumenten

I. Elektronica:

A. Geïntegreerde en actieve componenten:

  • 1 x ATMEGA328P - MCU
  • 2 x HCMS2902 - AVAGO-schermen
  • 1 x DS1302 - RTC
  • 1 x 2N2222A - BJT (NPN)

B. Passieve componenten:

  • Weerstanden:

    • 5 x 10K
    • 1 x 180R
    • 2 x 100R
  • condensatoren:

    • 3x 0.1uF
    • 1x 0.47uF
    • 1 x 100uF
    • 2 x 22pF
  • 1 x 4-pins RGB-led
  • 1 x zoemer
  • 1 x 32.768 KHz kristal

C. Connectoren:

  • 1 x Micro-USB-connector
  • 2 x 6-pins standaard pitch (100mil) connector.
  • 2 x 4-pins standaard pitch (100mil) connector.
  • 1 x Knoopcelbatterijhouder.

D. Diversen:

  • 3 x SPST-drukknopschakelaars
  • 1 x 3V knoopcelbatterij.

E. Optionele PSU:

  • 1 x LM7805 - Lineaire regelaar
  • 2 x 0.1uF dop
  • 2 x 100uF dop

II. Mechanisch:

  • 1 x kunststof behuizing
  • 4 x rubberen opzetstukken
  • 1 x prototype soldeerbord
  • 1 x MCU-header (in het geval van een microcontrollerstoring)
  • 2 x kleine 8 mm bouten
  • 2 x 8 mm ringen

III. Instrumenten en materialen:

  • Soldeer draden
  • Krimpkousen
  • soldeer tin
  • Soldeerbout
  • Snijder
  • tang
  • Pincet
  • Boren
  • Klein bestand
  • Diverse Schroevendraaiers
  • Remklauw
  • Multimeter
  • Broodplank (optioneel)
  • Micro-USB-kabel
  • Middelgroot bestand
  • Heet lijmpistool
  • AVR ISP-programmeur

NS. Programmering:

  • Atmel Studio 6.3 of 7.0.
  • ProgISP of AVRDude
  • Microsoft Excel (voor het maken van weergavetekens)

Stap 3: Schemabeschrijving

Schema Beschrijving
Schema Beschrijving

Om het gemakkelijker te maken om de werking van het circuit te begrijpen, is de schematische stap verdeeld in zeven subgroepen. Merk op dat de netnamen die op de schemapagina zijn gedefinieerd, ook verbindingen tussen afzonderlijke subcircuits van het apparaat definiëren.

A. Hoofdcomponentenkaart:

Zoals eerder vermeld, worden alle geschikte subcircuits die we "in" het apparaat willen hebben, op een enkelvoudig gesneden prototypebord geplaatst. Laten we verder gaan met de uitleg van de werking van de op het moederbord geplaatste circuits:

1. Microcontrollercircuit:

MCU die in dit project wordt gebruikt, is een ATMEGA328P. Het wordt gevoed door een externe 5V-voeding, in dit geval - micro-USB-connector. Alle geschikte I/O-pinnen zijn aangesloten volgens de ontwerpvereisten. De I/O-toewijzing van poorten is gemakkelijk te begrijpen, aangezien alle netnamen precies zijn gedefinieerd zoals ze in de programmeerstap zullen worden gebruikt. MCU heeft een eenvoudig RC-resetcircuit, dat wordt gebruikt voor de programmeervolgorde en de stroominitialisatie.

Het cruciale onderdeel van MCU is het programmeercircuit. Er is een 6-pins programmeerconnector - J5, zorg ervoor dat VCC-, GND- en RESET-netten gemeenschappelijk zijn voor de externe ISP-programmeur en de hoofdcomponentenkaart.

2. Realtime klokcircuit:

Het volgende circuit is een belangrijk randonderdeel in het project. DS1302 is een druppellaad-IC, dat verwerkte tijd- en datumwaarden levert aan onze verwerkingseenheid. DS1302 communiceert met MCU via een 3-draads interface, vergelijkbaar met de 3-draads SPI-communicatie, op de volgende lijnen:

  • RTC_SCK (Output): Voert het aansturen en bemonsteren uit van gegevens die op de SDO-lijn worden verzonden.
  • RTC_SDO (I/O): Data-aandrijflijn. Fungeert als invoer voor de MCU wanneer tijd-/datumgegevens worden ontvangen en als uitvoer wanneer gegevens worden verzonden (zie de stap Programmeren voor meer uitleg).
  • RTC_CE:(Output): Lijn voor gegevensoverdracht inschakelen. Wanneer is ingesteld op HOOG door MCU, zijn de gegevens klaar om te worden verzonden/ontvangen.

DS1302 vereist een externe 32.768KHz kristaloscillator voor adequaat circuitgedrag. Om grote drift op het circuittelsysteem te voorkomen (driftverschijnselen zijn gewoon onvermijdelijk in dit soort geïntegreerde schakelingen), is het nodig om twee kalibratiecondensatoren op elke kristalpen te plaatsen (zie delen X1, C8 en C9 in het schema). 22pF was een optimale waarde na veel experimenten met tijdmetingen in dit project, dus als je op het punt staat het circuit helemaal te solderen, zorg er dan voor dat er een optie is om deze condensatoren te vervangen door condensatoren met andere waarden. Maar 22pF voor een klein bord werkte redelijk goed voor een zeer kleine drift (7 seconden per maand).

De laatste maar niet de minste component in dit circuit - 3V knoopcelbatterij moet op het bord worden geplaatst om voldoende energie te leveren aan de DS1302 IC, zodat deze zijn tijdtelling zou voortzetten.

4. 8 tekens LED-matrix:

De weergave van het apparaat is gebaseerd op 2 x 4 karakters LED Matrix-display-IC's, geprogrammeerd via een 3-draads interface, vergelijkbaar met de DS1302, met een enkel verschil, dat de gegevensverschaffende lijn (SDI) wordt gedefinieerd als de uitvoer van de MCU (tenzij u wilt toevoegen statuscontrole naar uw weergavecircuit). Displays worden gecombineerd in een serie 3-draads extensie, dus beide IC's fungeren als een enkel display-apparaat, waarbij het mogelijk is om het te programmeren voor alle definities van displaykarakters (zie SPI-seriecombinatie). Alle netnamen van het circuit komen overeen met MCU-geschikte aansluitingen - merk op dat er gemeenschappelijke netten zijn die communicatie tussen de displays tot stand brengen, en het is niet nodig om beide displaycommunicatie-interfaces op de MCU aan te sluiten. Programmering en tekenvolgorde worden gedefinieerd in verdere stappen.5. Gebruikersinterface circuit:

De gebruikersinterface is verdeeld in twee subgroepen - Invoer- en uitvoersystemen: Invoersysteem: het apparaat zelf heeft door de gebruiker geleverde invoer gedefinieerd als drie SPST-drukknopschakelaars, met extra pull-up-weerstanden, om gedefinieerde logica HOOG of LAAG naar de MCU. Deze schakelaars bieden een controlesysteem voor het gehele geprogrammeerde algoritme, aangezien het nodig is om tijd-/datumwaarden, menubesturing, enzovoort aan te passen.

6. Uitvoersysteem:

A. Zoemercircuit levert geluidsuitvoer in beide toestanden, menuschakeling bevestigt geluid en alarmalgoritme. NPN-transistor wordt gebruikt als een schakelaar, die voldoende stroom naar de zoemer levert, waardoor deze in een geschikte itenity klinkt. Zoemer wordt rechtstreeks bestuurd door de software van MCU. B. RGB LED wordt gebruikt als achtergrondverlichting van het apparaat. Het wordt rechtstreeks bestuurd door MCU, met vier opties voor achtergrondverlichting: ROOD, GROEN, BLAUW, PWM of UIT-modi. Merk op dat weerstanden die in serie zijn verbonden met de LED R-, G- en B-pinnen verschillende waarden hebben, omdat elke kleur een andere intensiteit heeft bij een constante stroom. Voor groene en blauwe LED's zijn er dezelfde kenmerken, wanneer rood een iets grotere intensiteit heeft. Zo wordt rode LED aangesloten op de grotere weerstandswaarde - in dit geval: 180Ohm (zie uitleg RGB LED).7. Connectoren:

Er zijn connectoren op het moederbord geplaatst om communicatie mogelijk te maken tussen externe interfacecomponenten zoals: Display, RGB-led, stroomingang en drukknopschakelaars en moederbord. Elke connector is bestemd voor een ander circuit, waardoor de complexiteit van de apparaatassemblage drastisch daalt. Zoals u in de schema's kunt zien, is elke bestelling van connectornetten optioneel en kan deze worden verwisseld, als dit het bedradingsproces veel eenvoudiger maakt. Nadat we alle schematische concepten hebben behandeld, gaan we verder met de volgende stap.

Stap 4: Solderen

Solderen
Solderen
Solderen
Solderen
Solderen
Solderen

Waarschijnlijk is het voor sommigen van ons de moeilijkste stap in het hele project. Om het veel gemakkelijker te maken om het apparaat zo snel mogelijk te laten werken, moet het soldeerproces in de volgende volgorde worden voltooid:

1. MCU en programmeerconnector: het wordt aanbevolen om de 28-pins header te solderen in plaats van MCU zelf om MCU IC te kunnen vervangen in geval van storing. Zorg ervoor dat het apparaat kan worden geprogrammeerd en ingeschakeld. Het wordt aanbevolen om een sticker met de pinbeschrijving op de programmeerconnector te plaatsen (zie derde afbeelding).

2. RTC-circuit: zorg er na het solderen van alle benodigde onderdelen voor dat de kalibratiecondensatoren gemakkelijk kunnen worden vervangen. Als u een 3V-knoopcelbatterijbehuizing wilt gebruiken, zorg er dan voor dat deze overeenkomt met de afmetingen van de apparaatbehuizing.

3. Display: Twee display-IC's moeten op het afzonderlijke kleine bord worden gesoldeerd (afb. 1). Nadat alle benodigde netten zijn gesoldeerd, moeten externe draden worden voorbereid (Afb. 4): deze draden moeten worden gesoldeerd en aan de zijkant van het displaybord worden geleid, houd er rekening mee dat spanning en mechanische spanning op de draden niet invloed hebben op de soldeerverbindingen op het displaybord.

4. Op de draden van de vorige stap moeten labelstickers worden geplaatst - dat zou het montageproces in de volgende stap veel gemakkelijker maken. Optionele stap: voeg een mannelijke enkelpolige connector toe aan elke draad (Arduino-stijl).

5. Soldeer de resterende connectoren op het moederbord, inclusief randapparatuur. Wederom is het aan te raden om bij elke connector stickers te plakken met een pinbeschrijving.

6. Zoemercircuit: zoemer bevindt zich in het apparaat, dus het moet op het moederbord worden gesoldeerd, er is geen verbindingsconnector nodig.

7. RGB-LED: om ruimte op het moederbord te besparen, heb ik de serieweerstanden OP de LED-pinnen gesoldeerd, waarbij elke weerstand overeenkomt met zijn eigen bijpassende kleur en de juiste MCU-pin (Afb. 5).

Stap 5: Montage

in elkaar zetten
in elkaar zetten
in elkaar zetten
in elkaar zetten
in elkaar zetten
in elkaar zetten

Deze stap definieert het uiterlijk van het project - elektrisch en mechanisch. Als alle aanbevolen opmerkingen in acht zijn genomen, wordt het montageproces heel eenvoudig uit te voeren. De volgende stapsgewijze volgorde biedt volledige procesinformatie:

Deel A: Behuizing

1. Boor drie gaten, afhankelijk van de diameter van de drukknop (in dit geval 3 mm).2. Boor een speciaal voor de zoemer bestemd gat aan de zijkant van de behuizing. Elke gewenste boordiameter kan worden gebruikt.3. Boor een klein gaatje als basis voor het slijpen volgens de USB-connector die u moet gebruiken (Micro USB in dit geval). Voer daarna het slijpen uit met de kleine vijl, zodat deze overeenkomt met de afmetingen van de connector.4. Boor relatief groot gat als basis voor slijpen. Voer het slijpen uit met een middelgrote vijl, volgens de afmetingen van het display. Zorg ervoor dat de display-IC's aan de buitenzijde van de behuizing aanwezig zijn.5. Boor een middelgroot gat aan de onderkant van het apparaat, volgens de diameter van de RGB LED. Deel B - Bijlagen:

1. Soldeer twee draden aan elk van de drie drukknoppen (GND en signaal). Labelstickers en connectoren met één pin op draden worden aanbevolen.2. Bevestig vier voorbereide draden aan de RGB LED-pinnen. Plak etiketstickers en krimpkousjes op de soldeerverbindingen.3. Bevestig vier rubberen pootjes aan de onderkant van het apparaat. Deel C - De onderdelen aansluiten:

1. Plaats de RGB-LED op de onderkant van de behuizing en sluit deze aan op de speciale connector op het moederbord. Bevestig het met de hete lijm.2. Plaats drie drukknopschakelaars, sluit ze aan op de speciale connector op het moederbord, bevestig ze met de hete lijm.3. Plaats de USB-connector, sluit deze aan op de voedingspinnen van de programmeerconnector (VCC en GND). Zorg ervoor dat de polariteit van de voedingskabels overeenkomt met de gesoldeerde onderdelen. Bevestig het met hete lijm.4. Plaats het displaybord, sluit het aan op de speciale connector. Bevestig het met de hete lijm. Opmerkingen:

1. Het wordt aanbevolen om bout-moer-paren toe te voegen aan de behuizing van de hoofdprintplaat en de bovenste afdekking (zoals in dit geval wordt getoond).2. Om defecte draden te voorkomen, moet u ze bevestigen met hun uiterlijk in de behuizing.

Stap 6: Korte programmeerinleiding

Korte programmeerinleiding
Korte programmeerinleiding
Korte programmeerinleiding
Korte programmeerinleiding
Korte programmeerinleiding
Korte programmeerinleiding

Nadat alle onderdelen zijn gesoldeerd, wordt aanbevolen om de eerste apparaattest uit te voeren voordat u doorgaat met de laatste montagestap. De MCU-code is geschreven in C en ATMEGA328P wordt geprogrammeerd via een ISP-programmeur (er zijn verschillende soorten Atmel-programmeerapparaten: AVR MKII, AVR DRAGON enz. - Ik heb een goedkope USB ISP Programmer van eBay gebruikt, die wordt bestuurd door ProgISP of AVRDude-software). De programmeeromgeving moet Atmel Studio 4 en hoger zijn (ik raad ten zeerste de nieuwste softwareversies aan). Als een externe, niet-Atmel Studio inherente programmeur wordt gebruikt, moet het.hex-bestandspad naar de programmeersoftware worden opgegeven (meestal in de Debug- of Release-map van het project). Zorg ervoor dat voordat u doorgaat met de montagestap, het apparaat kan worden geprogrammeerd, en dat elk specifiek AVR-project voor het bouwen en compileren is gebaseerd op de ATMEGA328P-microcontroller (zie Atmel Studio-tutorial).

Stap 7: De codebeschrijving

De codebeschrijving
De codebeschrijving
De codebeschrijving
De codebeschrijving

Decice code-algoritme is gelaagd in twee semi-afzonderlijke lagen: 1. Kernlaag: communicatie met perifere circuits, definitie van apparaatbewerkingen, initialisatie en componentverklaringen.2. Interfacelaag: interactie tussen gebruiker en apparaat, menufunctionaliteit, klok/zoemer/kleur/alarmaanpassing. Het programmaverloop wordt beschreven in de afbeelding. 1, waarbij elk blok overeenkomt met de MCU-status. Het beschreven programma fungeert als een basis "besturingssysteem" dat een interface biedt tussen hardware en de buitenwereld. De volgende uitleg beschrijft de essentiële programmawerking per onderdelen: Deel A: Kernlaag:

1. MCU I/O-initialisatie: Allereerst moeten hardwarecomponenten worden geïnitialiseerd: - Code-constanten. - Poorten I/O - Interface. - Perifere communicatieverklaringen.

2. Algemene basisfuncties: Sommige functies worden gebruikt door afzonderlijke codeblokken, de bewerkingen op pinnen die worden bestuurd door de software: - Schakel RTC- en displaybordcommunicatie in/uit. - Zoemergeluidsgeneratie aan/uit. - 3-draads klok up/Clock down-functies.- Functies voor het maken van tekens weergeven.3. Perifere initialisatie: Nadat I/O-poorten zijn geconfigureerd, vindt communicatie tussen circuitfuncties plaats. Wanneer klaar - MCU begint met initialisatie van RTC en weergavecircuits met behulp van functies die hierboven zijn gedefinieerd.

4. Definitie van kernfuncties: in dit stadium is het apparaat ingesteld en klaar om communicatie uit te voeren met enkele randcircuits. Deze functies definiëren: - Schakelaar toggle-bediening - RGB LED-bediening (vooral PWM) - Zoemer blokgolfgenerator

5. Weergavefuncties: ik vond niet veel op internet over de HSMS-IC's die ik heb gebruikt, dus heb ik de bibliotheek zelf geschreven. Weergavefuncties bieden volledige functionaliteit voor het weergeven van tekens, inclusief weergave van ASCII-tekens en alle gehele getallen. Functies worden op de algemene manier geschreven, dus als het nodig is om weergavefuncties uit een deel van de code op te roepen, is het gemakkelijk om ze te gebruiken omdat ze worden gegeneraliseerd door bewerking (bijvoorbeeld: tekenreeksweergave, weergave met één teken, enz.).

6. RTC-bedieningsfuncties: alle RTC-functies zijn op een algemene manier geschreven (vergelijkbaar met de ingestelde weergavefuncties) volgens de werking van DS1302 IC. Code is gebaseerd op een geschreven bibliotheek, die in veel variaties beschikbaar is op gitHub. Zoals u zult zien in de definitieve code, zijn de weergave- en RTC-functiesset opgenomen in de afzonderlijke.c- en.h-bestanden. Deel B - Interfacelaag:

1. Hoofdfunctie: in het gedeelte void main() vindt u declaratie van alle kerninitialisatiefuncties. Direct na de initialisatie van alle componenten komt MCU in een oneindige lus, waarbij de functionaliteit van het apparaat wordt gecontroleerd door een gebruiker.

2. Real-time schakelaars, achtergrondverlichting en displaybediening: terwijl het in een oneindige lus wordt uitgevoerd, voert MCU een verversing uit op elk onderdeel van het apparaat. Het kiest welke gegevens worden weergegeven, welke knop is ingedrukt en welke achtergrondverlichtingsmodus is gekozen.

3. Gebruikersmenufuncties: Deze functies hebben een boomachtige vorm (zie afb. X), waarbij het menusysteem en de hiërarchie zijn gedefinieerd als een toestandsmachine. Elke toestandsmachine die wordt bestuurd door een gebruikersinvoer - drukknop schakelt, dus wanneer de juiste drukknop werd ingedrukt - zal de toestandsmachine zijn waarde wijzigen. Het is zo ontworpen dat alle wijzigingen in het apparaat die in het menu worden uitgevoerd, onmiddellijk worden gewijzigd.

4. Wisselen van gebruikersmenu: wanneer de gebruikersinvoer wordt gegeven, moet de status van het menu zijn status wijzigen. Deze functies bieden dus gebruikersafhankelijke controle over een statusmachine. In dit specifieke geval: volgende, vorige en OK.

Stap 8: Definitieve code en nuttige bestanden

En dat is het! In deze stap kunt u alle bestanden vinden die u mogelijk nodig hebt: - Elektrische schema's - Volledige broncode - Display Character Builder Optionele functie: er zijn verschillende tekens die kunnen worden weergegeven in de bibliotheek met display-IC's, maar sommige zijn niet inbegrepen. Als je zelf karakters wilt bouwen, voeg dan case state toe met een ASCII-referentie in de functie Print_Character(' ') (zie functies van display.c). Ik hoop dat je dit Instructable nuttig vindt:) Bedankt voor het lezen!

Aanbevolen: