Fórum témák

» Több friss téma
Cikkek » Zenedoboz építése Arduino-val és EPROM-okkal
Zenedoboz építése Arduino-val és EPROM-okkal
Szerző: mLevi, idő: Jún 18, 2025, Olvasva: 1017, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   6 / 8

Ahogyan a kapcsolás, a programkód sem igazán bonyolult. A feladata a mikrovezérlőnek annyi, hogy végigléptesse a memóriarekeszeket az EPROM-ban, azok tartalmát pedig PWM jellé alakítsa. 

A legfontosabb dolog, amire ügyelni kell, az a program futásához szükséges idő. 8 kHz-es mintavételi frekvencián 12,5 μs-onként kell új mintáknak érkezniük. Ennél több időbe nem telhet egyetlen művelet sem. 

Bár az Arduino nyelve számos barátságos függvényt tartalmaz, ezeket nem használhatjuk. Helyettük az MCU regisztereit kell közvetlen elérnünk, pl:

  • digitalRead() függvény helyett használhatjuk az adatbuszhoz a PIND regisztert. Ennek tartalma a PORTD bitjeinek értéke. byte data = PIND;
  • digitalWrite() helyett OCR1A = readEPROM0(addr); Tehát az OCR1A regiszter (9-es arduino láb PWM funkció) közvetlenül kapja meg az EPROM felől érkező 8 adatbitet.
  • A memória kiválasztáshoz alacsonyra kell állítanunk a megfelelő ChipSelect és Output Enable biteket. Ez bitSet() függvénnyel gyorsabb. 
Ezek a parancsok csak néhány órajelciklust igényelnek a végrehajtáshoz. 
 
A program tehát ilyen, és ehhez hasonló parancsokból épül fel a szokásos Arduino függvények helyett.
A shift regisztereket lehetne szoftverből shiftOut() függvénnyel vezérelni, de ez is sok idő. Sokkal egyszerűbb a beépített SPI buszt használni hozzá.

A kód több részből ál:
  • EPROM címző függvény
  • EPROM olvasó függvény
  • Alvó mód beállító függvény (ha a program lefut, az MCU standby módba lép, hogy ne fogyasszon sok áramot)
  • Be- és kimenetek beállítása
  • Időzítő beállítása: 8 bit, nincs előosztó, gyors PWM (innen ered a 62.5 kHz-es PWM frekvencia)
  • Végezetül a ciklusok, amelyek végiglapozzák a memóriát és kiírják a PWM kimenetre a tartalmukat.

Az EPROM0 tartalma egyszer játszódik le, az EPROM1 tartalma pedig kétszer. Ez a saját dallamhoz beállított mód. Más dallamhoz értelemszerűen át kell írni a fő ciklusokat.

A lefutás után pedig alvó módba lép a mikrokontroller.

A teljes kód lefutási ideje ~4 μs, szóval a fő ciklusban még 121 μs-ot kell késleltetni a pontos mintavételi frekvencia elérése érdekében.


A cikk még nem ért véget, lapozz!
Következő: »»   6 / 8
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem