Sisällysluettelo:
- Vaihe 1: Pulssinleveyden modulointi värien sekoittamiseen
- Vaihe 2: Keskustelu vuororekisterien ja LEDien kanssa
- Vaihe 3: Kaavio
- Vaihe 4: C ++ -lähdekoodi
- Vaihe 5: Valmis gadget
- Vaihe 6: Sovellus: CPU: n kuormanvalvonta Linuxille Perl: n avulla
- Vaihe 7: Sovellus: Puhuminen muille moduuleille I²C: n avulla
- Vaihe 8: Sovellus: "Game Cube":-)
- Vaihe 9: Kuvien / animaatioiden näyttäminen Matrixissa - Quick Hack
- Vaihe 10: Tallennettujen animaatioiden vuorovaikutteinen hallinta
- Vaihe 11: Live -videon näyttäminen
- Vaihe 12: Lisää valoa lähes ilmaiseksi
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tämä näyttö perustuu 8x8 RGB LED -matriisiin. Testaustarkoituksiin se liitettiin tavalliseen Arduino -korttiin (Diecimila) käyttäen 4 vuororekisteriä. Kun sain sen toimimaan, permalisin sen nystyyn piirilevyyn. Siirtorekisterit ovat 8-bittisiä ja ne on helppo liittää SPI-protokollaan. Pulssileveysmodulaatiota käytetään värien sekoittamiseen, lisää siitä myöhemmin. Osaa MCU: n RAM -muistista käytetään kehyksen puskurina kuvan pitämiseen. Videon RAM -muistia jäsentää taustalla oleva keskeytysrutiini, joten käyttäjä voi tehdä muita hyödyllisiä asioita, kuten puhua tietokoneen kanssa, lukea painikkeita ja potentiometrejä. Lisätietoja "Arduinosta": www.arduino.cc
Vaihe 1: Pulssinleveyden modulointi värien sekoittamiseen
Pulssileveysmoduuli - MITÄ? Pulssileveysmodulaatio kytkee sähkölaitteeseen syötetyn virran päälle ja pois päältä melko nopeasti. Käytettävä teho saadaan neliöaaltofunktion matemaattisesta keskiarvosta yhden jakson aikana. Mitä kauemmin toiminto pysyy ON -asennossa, sitä enemmän virtaa saat. PWM: llä on sama vaikutus LED -valojen kirkkauteen kuin AC -valojen himmentimellä. Edessä oleva tehtävä on hallita 64 RGB -LEDin (= 192 yksittäistä LEDiä!) Kirkkautta yksilöllisesti halvalla ja helposti, jotta saat kaiken värivalikoima. Mieluiten ei pitäisi olla välkkymistä tai muita häiritseviä vaikutuksia. Ihmissilmän epälineaarista käsitystä kirkkaudesta ei oteta tässä huomioon (esim. 10%: n ja 20%: n kirkkauden ero näyttää "suuremmalta" kuin 90%: n ja 100%: n välillä). Kuva (1) havainnollistaa PWM -algoritmi. Oletetaan, että koodille annetaan arvo 7 LEDin kirkkaudelle (0, 0). Lisäksi se tietää, että kirkkaus on enintään N askelta. Koodi ajaa N silmukkaa kaikilla mahdollisilla kirkkaustasoilla ja kaikki tarvittavat silmukat jokaisen LEDin palvelemiseksi kaikissa riveissä. Jos kirkkaussilmukan silmukkalaskuri x on pienempi kuin 7, LED syttyy. Jos se on suurempi kuin 7, LED sammuu. Kaikki LEDit, kirkkaustasot ja perusvärit (RGB) toimivat erittäin nopeasti, ja jokainen LED voidaan säätää yksilöllisesti halutun värin näyttämiseksi. Loput voidaan käyttää sarjaliikenteeseen tietokoneen kanssa, lukea painikkeita, puhua RFID -lukijalle, lähettää I2C -tiedot muihin moduuleihin…
Vaihe 2: Keskustelu vuororekisterien ja LEDien kanssa
Siirtorekisteri on laite, joka mahdollistaa tietojen lataamisen sarjaan ja rinnakkaislähdön. Päinvastainen toiminta on mahdollista myös sopivalla sirulla. Arduino-verkkosivuston vuororekistereistä on hyvä opetusohjelma. LED-valoja ohjaavat 8-bittiset 74HC595-tyyppiset siirtorekisterit. Jokainen portti voi tuottaa tai upottaa noin 25 mA virtaa. Kokonaisvirta upotettua tai hankittua sirua kohti ei saisi ylittää 70 mA. Nämä sirut ovat erittäin halpoja, joten älä maksa enempää kuin noin 40 senttiä kappaleelta. Koska LED -valoilla on eksponentiaalinen virta- / jänniteominaisuus, virranrajoitusvastuksia tarvitaan. Ohmin lakia käyttämällä: R = (V - Vf) / IR = rajoittava vastus, V = 5 V, Vf = LEDin etujännite, I = haluttu virta Punaiset LEDit Lähtöjännite on noin 1,8 V, sininen ja vihreä vaihtelee 2,5 V - 3,5 V välillä. Käytä yksinkertaista yleismittaria sen määrittämiseksi. Käytännössä otetaan yksinkertaisesti 3 potentiometriä ja säädetään niitä, kunnes LED näyttää oikean valkoisen valon. LED -enimmäisvirtaa ei tietenkään saa ylittää. Tärkeää on myös se, että rivejä ohjaavan siirtorekisterin on syötettävä virtaa 3x8 LED -valolle, joten on parempi olla nostamatta virtaa liian korkeaksi. Olin onnistunut rajoittamaan 270 ohmin vastuksia kaikille LEDeille, mutta se riippuu tietysti LED -matriisin merkistä. Siirtorekisterit on liitetty SPI -sarjaan. SPI = Serial Peripheral Interface (Kuva (1)) PC: n sarjaportteja vastapäätä (asynkroninen, ei kellosignaalia) SPI tarvitsee kellolinjan (SRCLK). Sitten on signaalilinja, joka kertoo laitteelle, milloin tiedot ovat kelvollisia (sirun valinta / salpa / RCLK). Lopuksi on kaksi datalinjaa, joista toinen on nimeltään MOSI (master out slave in) ja toinen MISO (master in slave out). SPI: tä käytetään integroitujen piirien liitäntään, aivan kuten minä2C. Tämä projekti tarvitsee MOSI: n, SRCLK: n ja RCLK: n. Lisäksi käytössä on myös sallintalinja (G). SPI -sykli aloitetaan vetämällä RCLK -viiva kohtaan LOW (Kuva (2)). MCU lähettää tietonsa MOSI -linjalle. Sen loogisesta tilasta vastaa SRCLK -linjan nousevan reunan siirtorekisteri. Sykli päättyy vetämällä RCLK -linja takaisin HIGH -asentoon. Nyt data on saatavilla lähtöissä.
Vaihe 3: Kaavio
Kuva (1) näyttää, kuinka vuororekisterit on kytketty. Ne ovat ketjutettuja, joten tietoja voidaan siirtää tähän ketjuun ja myös sen kautta. Siksi lisää vuororekistereitä on helppo lisätä.
Kuva (2) näyttää loput kaaviosta, jossa on MCU, liittimet, kvartsi… Liitteenä oleva PDF -tiedosto sisältää kaikki teokset, parhaiten tulostettavat.
Vaihe 4: C ++ -lähdekoodi
C/C ++: ssa on yleensä prototyyppi toiminnoista ennen niiden koodaamista.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE ei vaadi tätä vaihetta, koska toimintojen prototyypit luodaan automaattisesti. Siksi toimintojen prototyypit eivät näy tässä näytetyssä koodissa Kuva (1): setup () functionImage (2): spi_transfer () -toiminto käyttäen ATmega168 -sirun laitteiston SPI: tä (toimii nopeammin) Kuva (3): framebuffer -koodi käyttämällä Ajastin1 ylivuoto keskeyttää kun (! (SPSR & (1 << SPIF))) {} käyttää MCU: n rekistereitä suoraan. Tämä esimerkki sanoin: "vaikka SPIF-bittiä rekisterissä SPSR ei ole asetettu, älä tee mitään". Haluan vain korostaa, että vakioprojekteissa ei todellakaan ole tarpeen käsitellä näitä asioita, jotka liittyvät läheisesti laitteistoon. Aloittelijoiden ei pitäisi pelätä tätä.
Vaihe 5: Valmis gadget
Kun olen ratkaissut kaikki ongelmat ja saanut koodin toimimaan, minun piti vain luoda piirilevyasettelu ja lähettää se upealle talolle. Se näyttää niin paljon puhtaammalta:-) Kuva (1): täysin täytetty ohjainkortti Kuva (2): paljaan PC: n etupuoli Kuva (2): takapuoli ATmega168/328-sirun PORTC- ja PORTD-liittimet ja 5V/GND. Nämä portit sisältävät sarjaliikenteen RX-, TX -linjat, I2C -linjat, digitaaliset I/O -linjat ja 7 ADC -linjaa. Tämä on tarkoitettu kilpien pinoamiseen levyn takapuolelle. Välimatka soveltuu perfboardin (0,1 tuuman) käyttöön. Heti kun tämä on tehty, käytä vain tavallista FTDI USB/TTL -sarjasovitinta tai vastaavaa. Olen lisännyt myös automaattisen nollaus-käytöstä poistavan hyppyjohdon. Olen myös keittänyt pienen Perl-skriptin (katso blogini), joka mahdollistaa automaattisen nollauksen FTDI-kaapeleilla, mikä ei yleensä toimi heti (RTS vs. DTR-linja). Tämä toimii Linuxissa, ehkä MAC: ssä. Blogistani löytyy painettuja piirilevyjä ja muutamia DIY KIT -tuotteita. SMD -juotos vaaditaan! Katso PDF -tiedostoista rakennusohjeet ja LED -matriisien lähteet.
Vaihe 6: Sovellus: CPU: n kuormanvalvonta Linuxille Perl: n avulla
Tämä on hyvin yksinkertainen kuormanvalvonta, jolla on historiakuvaaja. Se perustuu Perl -komentosarjaan, joka kerää järjestelmän "kuormituskeskiarvon" joka 1s käyttämällä iostatia. Tiedot tallennetaan taulukkoon, joka siirtyy jokaisen päivityksen yhteydessä. Luettelon yläosaan lisätään uusia tietoja, vanhin merkintä poistetaan. Tarkemmat tiedot ja lataukset (koodi…) ovat saatavilla blogistani.
Vaihe 7: Sovellus: Puhuminen muille moduuleille I²C: n avulla
Tämä on vain todiste periaatteesta eikä ylivoimaisesti yksinkertaisin ratkaisu tähän työhön2C mahdollistaa suoraan 127 "orja" -kortin osoittamisen. Tässä videon oikealla puolella oleva taulu on "isäntä" (joka aloittaa kaikki siirrot), vasen levy on orja (odottaa tietoja). Minä2C tarvitsee 2 signaalilinjaa ja tavalliset voimajohdot (+, -, SDA, SCL). Koska se on väylä, kaikki laitteet on kytketty siihen rinnakkain.
Vaihe 8: Sovellus: "Game Cube":-)
Pelkkä ajatus, tämä sopii myös esittelysivulla näkyvään puukoteloon. Sen takana on 5 painiketta, joita voidaan käyttää yksinkertaisen pelin pelaamiseen.
Vaihe 9: Kuvien / animaatioiden näyttäminen Matrixissa - Quick Hack
Joten siinä on vain 8 x 8 pikseliä ja muutamia värejä. Ensin käytä jotain Gimp -ohjelmaa, jotta voit pienentää suosikkikuvasi tarkasti 8 x 8 pikseliin ja tallentaa sen.ppm -raakamuodossa (ei ASCII). PPM on helppo lukea ja käsitellä Perl -komentosarjassa. ImageMagickin ja komentorivityökalun "convert" käyttäminen ei toimi oikein. Lataa uusi arduino -koodi ja käytä sitten Perl -komentosarjaa ladataksesi ohjaimeen. Välkkyminen on vain LED -päivityksen ja kameran kuvataajuuden välinen ristiriita. Koodin hieman päivittämisen jälkeen se toimii melko zippy. Kaikki kuvat siirretään suorana sarjakuvana, kun näet ne. Pidemmät animaatiot voidaan tallentaa ulkoiseen EEPROM-muistiin, kuten se tehdään eri pinnankorotuslevyillä.
Vaihe 10: Tallennettujen animaatioiden vuorovaikutteinen hallinta
Miksi antaa mikrokontrollerin pitää hauskaa? Arduinon kultti on fyysinen laskenta ja vuorovaikutus, joten lisää vain potentiometri ja ota hallinta haltuusi! Käyttämällä yhtä kahdeksasta analogisesta digitaaliseen muuntimen tuloon tekee siitä erittäin yksinkertaisen.
Vaihe 11: Live -videon näyttäminen
Perl -komentosarjan ja muutaman moduulin käyttäminen tekee melko helpoksi näyttää lähes live -videon X11 -järjestelmissä. Se koodattiin Linuxiin ja voi toimia myös MAC-laitteilla. Se toimii seuraavasti:- saat hiiren kohdistimen paikan- kaappaat NxN-pikselin laatikon, joka on kohdistimen keskellä- skaalaa kuva 8x8 pikseliin- lähetä se LED-levylle- toistaa
Vaihe 12: Lisää valoa lähes ilmaiseksi
Vain kahdella askeleella kirkkautta voidaan lisätä melko paljon. Vaihda 270Ω: n vastukset 169Ω: n vastuksiin ja säästä toinen 74HC595 -siirtorekisteri IC5: lle.