Мазмуну:

Zybo тактасындагы лазердик арфа синтезатору: 10 кадам (сүрөттөр менен)
Zybo тактасындагы лазердик арфа синтезатору: 10 кадам (сүрөттөр менен)

Video: Zybo тактасындагы лазердик арфа синтезатору: 10 кадам (сүрөттөр менен)

Video: Zybo тактасындагы лазердик арфа синтезатору: 10 кадам (сүрөттөр менен)
Video: part 1 getting started zybo vivado 2024, Июль
Anonim
Zybo тактасында лазердик арфа синтезатору
Zybo тактасында лазердик арфа синтезатору

Бул окуу куралында биз колдонуучунун инструментти жана обонун өзгөртүүгө мүмкүндүк бере турган сериялык интерфейси бар IR сенсорлорун колдонуп, толугу менен иштей турган лазер арфасын түзөбүз. Бул арфа 21 -кылымдагы эски аспаптын ремейки болот. Система Vivado Design Suites менен бирге Xilinx Zybo өнүктүрүү тактасын колдонуу менен түзүлгөн. Долбоорду аягына чыгаруу үчүн сизге эмне керек:

  • 12 IR сенсорлору жана эмитенттери (көп же аз саптардын санына жараша колдонулушу мүмкүн)
  • Zybo Zynq-7000 өнүктүрүү тактасы
  • Акысыз RTOS
  • Vivado Design Suite
  • Зым (сенсорлорду тактага туташтыруу үчүн)
  • 3 даана PVC түтүк ((2) 18 дюйм жана (1) 8 дюйм)
  • 2 PVC чыканак

1 -кадам: Digilentтин Zybo DMA аудио демосун алыңыз

Бул долбоордун FPGA жагы негизинен бул жерден табылган демо долбоорго негизделген. Ал түздөн -түз эс тутумга кирүүнү колдонот, бул процессор AXI Stream аркылуу I2S аудио блогуна жаза турган маалыматты эс тутумунан түз жөнөтүү үчүн. Төмөнкү кадамдар DMA аудио демо долбоорун ишке киргизүүгө жардам берет:

  1. Zybo тактасы үчүн такта файлынын жаңы версиясы керек болушу мүмкүн. Vivado үчүн жаңы доска файлдарын алуу үчүн бул көрсөтмөлөрдү аткарыңыз.
  2. Vivado'до демо -долбоорду ачуу үчүн бул беттеги көрсөтмөлөрдөгү 1 жана 2 -кадамдарды аткарыңыз. SDK аппараттык өткөрүп берүүнү эмес, Vivado ыкмасын колдонуңуз.
  3. Сиз кээ бир IP блокторуңуз жаңыртылышы керек деген билдирүү аласыз. Андай болсо, "IP статусун көрсөтүү" дегенди тандап, андан кийин IP статусу өтмөгүндө эскирген бардык IPди тандап, "Тандалганды жаңыртууну" чыкылдатыңыз. Ал бүткөндө жана терезе пайда болот, эгер сиз өндүрүм өндүрүүнү кааласаңыз, улантыңыз жана "Түзүү" баскычын басыңыз. Эгер сизге олуттуу эскертүүчү билдирүү келсе, аны этибарга албаңыз.
  4. Булак файлдарын көрүү үчүн дизайндан Vivado'догу булактар өтмөгүнө өтүңүз. "Design_1" блогунун дизайнын оң баскыч менен чыкылдатып, "HDL орогучун түзүү" тандаңыз. Сунуш болгондо "Колдонуучунун түзөтүүлөрүнө уруксат берүү үчүн түзүлгөн ороону көчүрүү" дегенди тандаңыз. Долбоор үчүн ороочу файл түзүлөт.
  5. Эми кандайдыр бир жол менен башка окуу куралында калтырылган ошол маанилүү кадамдар бүткөндөн кийин, сиз мурда шилтемеленген үйрөткүчкө кайтып келип, 4 -кадамдан аягына чейин улантып, демо долбоордун туура иштеп жатканына ынансаңыз болот. Эгерде сизде аудио жаздырууга мүмкүнчүлүк жок болсо, анда жөн эле гарнитураңызды жаздырып, ойнотуу баскычын басканыңызда 5-10 секунддук бүдөмүк үндү угуңуз. Ойнотуу баскычын басканыңызда гарнитуранын уячасынан бир нерсе чыкса, ал туура иштеп жаткандыр.

2 -кадам: Vivadoдо айрым өзгөрүүлөрдү жасаңыз

Vivado'до кээ бир өзгөрүүлөрдү жасаңыз
Vivado'до кээ бир өзгөрүүлөрдү жасаңыз

Эми сизде Digilentтин DMA аудио демосу иштеп жатат, бирок бул жерде түпкү максат эмес. Ошентип, биз Vivado'го кайтып келип, сенсорлорубузду PMOD аталыштарына туташтырып, алардын баасын программалык камсыздоо жагында колдоно ала тургандай кылып кээ бир өзгөртүүлөрдү киргизишибиз керек.

  1. Vivadoдогу блок -схеманы ачыңыз
  2. Блок-схемада бош орунду оң баскыч менен чыкылдатып, менюдан "IP кошуу" тандоо менен GPIO блогун түзүңүз. "AXI GPIO" табыңыз жана тандаңыз.
  3. Жаңы IP блогун эки жолу чыкылдатыңыз жана IP терезесин кайра конфигурациялоодо IP конфигурация өтмөгүнө өтүңүз. Бардык киргизүүлөрдү тандап, туурасын он эки кылып коюңуз, анткени бизде арфада 12 "кыл" болот, ошондуктан 12 сенсорго муктажбыз. Эгерде сиз азыраак же көбүрөөк сенсорлорду колдонууну кааласаңыз, анда бул санды туура тууралаңыз. Ошондой эле үзгүлтүккө учуроону иштетүү.
  4. Жаңы GPIO IP блогун оң баскыч менен чыкылдатып, "Байланышты автоматташтырууну" тандаңыз. AXI кутучасын белгилеп, OK бас. Бул AXI интерфейсин автоматтык түрдө туташтырышы керек, бирок блоктун чыгууларын туташпай калтыруу.
  5. Кошумча үзгүлтүккө учуроо үчүн, xlconcat_0 IP блогун эки жолу чыкылдатыңыз жана порттордун санын 4төн 5ке чейин өзгөртүңүз. Андан кийин ip2intc_irpt пинин жаңы GPIO блогунан xlconcat блогундагы жаңы колдонулбаган портко туташтыра аласыз.
  6. Жаңы GPIO IP блогунун "GPIO" чыгарылышын оң баскыч менен чыкылдатып, "тышкы кылуу" тандаңыз. Сызык кайда кеткенин таап, кичине беш бурчтукту чыкылдатыңыз жана сол жакта атын өзгөртө турган терезе ачылышы керек. Атын "SENSORS" деп өзгөртүңүз. Эгерде биз берген чектөөлөр файлынын иштешин кааласаңыз, ошол эле атты колдонуу маанилүү, антпесе сиз чектөөлөр файлындагы атын өзгөртүшүңүз керек болот.
  7. Кайра булактар өтмөгүнөн чектөөлөр файлын таап, аны биз бергенге алмаштырыңыз. Сиз файлды алмаштырууну же чектөөлөр файлыбыздын мазмунун көчүрүп, эскисинин мазмунунун үстүнө чаптоону тандай аласыз. Биздин чектөөлөр файлынын маанилүү нерселеринин бири PMOD аталыштарындагы тартуу резисторлорун иштетүү. Бул биз колдонгон сенсорлор үчүн керек, бирок бардык сенсорлор бирдей эмес. Эгерде сенсорлоруңузга резисторлор керек болсо, анда "set_property PULLUP true" дегендин ар бир мисалын "set_property PULLDOWN true" менен өзгөртө аласыз. Эгерде алар тактадагыга караганда башка резистордун маанисин талап кылса, анда сиз бул линияларды алып салып, тышкы резисторлорду колдоно аласыз. Пиндин аттары чектөөлөр файлында комментарийлерде жана алар Zybo Schematicsтин биринчи диаграммасындагы энбелгилерге туура келет. баракчаны бул жерден тапса болот. Эгерде сиз башка pmod казыктарын колдонууну кааласаңыз, чектөө файлындагы аталыштарды схемадагы энбелгилерге дал келтириңиз. Биз PMOD header JE жана JDди колдонобуз жана 1 жана 7 -казыктарды калтырбай, ар биринде алты маалымат казыгын колдонобуз. Бул маалымат сенсорлорду туташтырууда маанилүү. Схемада көрсөтүлгөндөй, PMODSтеги 6 жана 12 -казыктар VCC, 5 жана 11 -казыктар болсо жер.
  8. Мурдагыдай эле HDL орогучту калыбына келтирип, эскисин көчүрүп жазыңыз. Бул бүткөндөн кийин, битстримди түзүңүз жана мурдагыдай жабдыктарды экспорттоңуз жана SDKти кайра иштетиңиз. Эгер сиз эски жабдык файлын алмаштыргыңыз келеби деп сурасаңыз, жооп ооба. Түзмөктү экспорттогондо SDK жабылышы эң жакшы, ал туура алмаштырылат.
  9. SDK иштетүү.

3 -кадам: FreeRTOS иштетип алыңыз

Кийинки кадам FreeRTOSту Zybo тактасында иштетүү.

  1. Эгерде сизде көчүрмөсү жок болсо, FreeRTOSту бул жерден жүктөп алып, файлдарды чыгарыңыз.
  2. FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo дарегинде жайгашкан FreeRTOS Zynq демосун импорттоо. Импорттоо процесси башка демо -долбоорго окшош, бирок FreeRTOS Zynq демосу FreeRTOS папкасындагы башка файлдарга таянгандыктан, файлдарды жумуш мейкиндигине көчүрбөшүңүз керек. Анын ордуна, сиз бүт FreeRTOS папкасын долбоор папкаңыздын ичине салышыңыз керек.
  3. "Файл" -> "жаңы" -> "тактаны колдоо пакетине" өтүп, жаңы доска пакетин түзүңүз. Өз алдынча тандалганын текшерип, аягына чыкылдатыңыз. Бир аздан кийин терезе ачылат, lwip141дин жанындагы кутучаны белгилеңиз (бул FreeRTOSтун демосунун бирин компиляциялоону токтотот) жана OK баскычын басыңыз. Бул аяктагандан кийин, RTOSdemo долбоорун оң баскыч менен чыкылдатып, "касиеттерге" өтүңүз, "долбоорго шилтемелер" өтмөгүнө өтүңүз жана сиз түзгөн жаңы bspтин жанындагы кутучаны белгилеңиз. Бул таанылат деп үмүттөнөбүз, бирок кээде Xilinx SDK мындай нерсеге кызыктай болушу мүмкүн. Бул кадамдан кийин дагы эле ката кетсе, анда xparameters.h жок же ушул сыяктуу болсо, анда бул кадамды кайталап көрүңүз, балким, SDKден чыгып, кайра ишке киргизиңиз.

4 -кадам: Лазердик арфа кодун кошуу

Эми FreeRTOS импорттолуп жаткандыктан, сиз лазердик арфа долбоорунан файлдарды FreeRTOS демо режимине киргизе аласыз.

  1. FreeRTOS демонстрациясында src папкасынын астында жаңы папка түзүңүз жана main.cден башка берилген c файлдарынын бардыгын бул папкага көчүрүп чаптаңыз.
  2. RTOSDemo main.c'ти берилген main.c.га алмаштырыңыз.
  3. Эгерде баары туура жасалган болсо, бул учурда лазердик арфа кодун иштете билишиңиз керек. Тестирлөө максатында, DMA демо -долбоорунда колдонулган баскычты киргизүү азыр сенсорлор тиркелбеген үндөрдү ойнотуу үчүн колдонулат (төрт негизги баскычтын кайсынысы болбосун иштейт). Ал ар бир басканыңызда жипти ойнотот жана тутумдагы бардык саптарды бир нече жолу басуу аркылуу айлантат. Zybo тактасындагы гарнитуранын уячасына кээ бир гарнитураны же динамиктерди сайыңыз жана баскычты басканыңызда жиптердин үнүн угуп жатканыңызды текшериңиз.

5 -кадам: Кодекс жөнүндө

Бул окуу куралын окуп жатканыңыздын көбү аудиону кантип орнотууну же DMAны башка нерсени жасоо үчүн же башка музыкалык аспапты түзүүнү үйрөнүү үчүн бул жерде болушу мүмкүн. Ушул себептен улам, кийинки бир нече бөлүмдөр DMA аркылуу иштеп жаткан аудио чыгарууну алуу үчүн берилген код мурун кандай сүрөттөлгөнү менен бирге кандай иштээрин сүрөттөөгө арналган. Эгерде сиз коддун бөлүктөрү эмне үчүн бар экенин түшүнсөңүз, анда сиз каалаган нерсени түзө аласыз.

Үзгүлтүктөр

Биринчиден, мен бул долбоордо үзгүлтүктөр кантип түзүлгөнүн айтып берейин. Биз муну биринчи жолу ID, үзгүлтүк иштетүүчү жана ар бир үзүлүш үчүн түзмөккө шилтемени көзөмөлдөгөн үзгүлтүксүз вектордук структураны түзүү аркылуу жасадык. Үзгүлтүк IDлери xparameters.hден келет. Үзгүлтүк иштетүүчү - биз DMA жана GPIO үчүн жазган функция, ал эми I2C үзгүлтүк Xlic I2C драйверинен келет. Түзмөктүн шилтемеси биз башка жерде инициализациялаган ар бир түзмөктүн мисалдарын көрсөтөт. _Init_audio функциясынын аягына жакын үзгүлтүктүү вектордук таблицанын ар бир пункту аркылуу бир цикл өтөт жана үзгүлтүктөрдү туташтыруу жана иштетүү үчүн XScuGic_Connect () жана XScuGic_Enable () деген эки функцияны чакырат. Алар демейки боюнча FreeRTOS main.cде түзүлгөн үзгүлтүккө учуроочу контролер xInterruptControllerге шилтеме кылышат. Ошентип, негизинен, биз ар бир үзгүлтүгүбүздү FreeRTOS тарабынан биз үчүн буга чейин түзүлгөн бул үзгүлтүк контроллерине тиркеп коёбуз.

DMA

DMA инициализация коду lh_main.cде башталат. Алгач XAxiDma структурасынын статикалык мисалы жарыяланат. Андан кийин _init_audio () функциясында ал конфигурацияланат. Биринчиден, демо долбоордун конфигурациялоо функциясы чакырылат, ал dma.c.де. Бул абдан жакшы документтештирилген жана демо түздөн -түз келет. Андан кийин үзгүлтүккө туташып, иштетилет. Бул долбоор үчүн мастерден кулга чейин үзгүлтүк талап кылынат, анткени бардык маалыматтар DMA тарабынан I2S контроллерине жөнөтүлүп жатат. Эгерде сиз аудио жаздырууну кааласаңыз, анда кулга-мастердин үзүлүшү керек болот. Мастер-кулга үзгүлтүк DMA сиз айткан бардык маалыматты жөнөтүүнү аяктаганда чакырылат. Бул үзгүлтүк биздин долбоор үчүн абдан маанилүү, анткени DMA аудио үлгүлөрдүн бир буферин жөнөтүүнү аяктаган сайын, ал кийинки буферди дароо жөнөтө башташы керек, антпесе жөнөтүүлөрдүн ортосунда үн угулушу мүмкүн. Dma_mm2s_ISR () функциясынын ичинде биз үзгүлтүккө кандай мамиле кыларыбызды көрө аласыз. Маанилүү бөлүгү аягына жакындап калды, анда биз xSemaphoreGiveFromISR () жана portYIELD_FROM_ISR () колдонуп, _audio_task () кийинки DMA которууну баштай тургандыгын билдиребиз. Туруктуу аудио маалыматтарды жөнөтүүнүн жолу - бул эки буферди алмаштыруу. Бир буфер I2C блогуна өткөрүлүп берилгенде, башка буфердин мааниси эсептелип, сакталат. Андан кийин, үзгүлтүк DMAдан келгенде, активдүү буфер которулат жана мурунку которулган буфер жаңы маалыматтар менен жазыла баштайт, ал эми жакында жазылган буфер өткөрүлүп берилет. _Audio_task функциясынын негизги бөлүгү fnAudioPlay () деп аталат. fnAudioPlay () DMA мисалын, буфердин узундугун жана маалыматтар өткөрүлө турган буферге көрсөткүчтү алат. Дагы көптөгөн үлгүлөр келе жаткандыгын билүү үчүн I2S реестрине бир нече баалуулуктар жөнөтүлөт. Андан кийин XAxiDma_SimpleTransfer () которууну баштоо үчүн чакырылат.

I2S аудио

audio.c жана audio.h I2S инициализациясы ишке ашат. I2S инициализация коду - бул бир топ жерлерде айланып жүргөн коддун абдан кеңири таралган бөлүгү, башка булактардан бир аз айырмачылыктарды таба аласыз, бирок бул иштеши керек. Бул абдан жакшы документтештирилген жана арфа проектиси үчүн өзгөртүүнүн кажети жок. Ал келген DMA аудио демо микрофонго же линия киришине өтүү үчүн функцияларды камтыйт, андыктан бул функцияга муктаж болсоңуз, ошолорду колдоно аласыз.

Үн синтези

Үн синтези кантип иштээрин сүрөттөө үчүн, мен иштеп чыгууда колдонулган ар бир үн моделин тизмектеп берейин, бул акыркы ыкмага алып келди, анткени ал эмне үчүн мындай кылынганын түшүнүүгө жардам берет.

Метод 1: Синустук маанилердин бир мезгили ар бир сап үчүн ошол жонун музыкалык нотасынын тиешелүү жыштыгында эсептелет жана массивде сакталат. Мисалы, массивдин узундугу үлгүлөрдөгү синус толкунунун мезгили болот, ал # үлгү / циклге барабар болот. Эгерде тандоо ылдамдыгы 48 кГц жана нота жыштыгы 100 Гц болсо, анда 48 000 үлгү/секунда жана 100 цикл/секунда 4800 үлгүгө алып келет, ал эми массивдин узундугу 4800 үлгү болот жана бир бүтүндүн маанилерин камтыйт синус толкун мезгили. Сап ойнотулганда, аудио үлгү буфери синус толкунунун массивинен маанини алуу жана аны аудио буферге үлгү катары коюу менен толтурулат, андан кийин индексти синус толкунунун массивине көбөйтүп, биздин мурунку мисалды колдонуу үчүн. 4800 үлгүдөгү синус толкундарынын бир цикли аудио буферине киргизилет. Модулдук операция массивдин индексинде колдонулат, ошондуктан ал дайыма 0 менен узундуктун ортосуна түшөт жана массивдин индекси белгилүү бир босогодон өткөндө (мисалы, 2 секунддук үлгүлөр сыяктуу) сап өчүрүлөт. Бир эле учурда бир нече саптарды ойнотуу үчүн, ар бир саптын массивинин индексин өзүнчө көзөмөлдөп, ар бир үлгүнү алуу үчүн ар бир саптын синус толкунунун маанисин кошуңуз.

2 -ыкма: Көбүрөөк музыкалык обон жаратуу үчүн, биз мурунку моделден баштайбыз жана ар бир негизги жыштыкка гармониканы кошобуз. Гармоникалык жыштыктар - бул негизги жыштыктын бүтүн эсеби болгон жыштыктар. Карама -каршы келген эки жыштык чогулуп, натыйжада бир эле убакта эки башка үн чыгат, гармоника кошулганда, ал бир эле үндө угулат, бирок башка обондо. Бул үчүн, биз синус толкунунун маанисин аудио үлгүгө кошкон сайын (массивдин индекси % массивдин узундугу), биз дагы (2 * массивдин индекси % массивдин узундугу) жана (3 * массивдин индекси % массивинин узундугун) кошобуз.), жана башка көптөгөн гармоникалар үчүн. Бул көбөйтүлгөн индекстер синус толкунду баштапкы жыштыктын бүтүн эселенген жыштыктары аркылуу өтөт. Тонду көбүрөөк көзөмөлдөөгө мүмкүнчүлүк берүү үчүн, ар бир гармониктин мааниси жалпы үндөгү ошол гармониктин суммасын билдирген өзгөрмөгө көбөйтүлөт. Мисалы, негизги синус толкунунун мааниси 6га көбөйтүлүп, жалпы үндүн факторуна айланышы мүмкүн, ал эми 5 -гармониктин 1 мультипликатору болушу мүмкүн, башкача айтканда, анын мааниси жалпы үндүн үнүнө азыраак салым кошот.

3 -ыкма: Макул, азыр бизде ноталарда абдан жакшы обон бар, бирок дагы эле абдан маанилүү көйгөй бар: алар белгилүү бир убакытка чейин белгиленген көлөмдө ойношот. Чыныгы инструмент сыяктуу үн чыгаруу үчүн ойнолуучу кылдын көлөмү убакыттын өтүшү менен бир калыпта бузулушу керек. Муну ишке ашыруу үчүн, массив экспоненциалдык ажыроо функциясынын баалуулуктары менен толтурулат. Эми аудио үлгүлөрү түзүлүп жатканда, ар бир саптан чыккан үн мурунку ыкмадагыдай эсептелет, бирок аудио үлгүгө кошулганга чейин экспоненциалдык ажыроо функциясы массивиндеги ошол саптардын массивинин индексиндеги мааниге көбөйтүлөт. Бул үндүн убакыттын өтүшү менен жай таралышына шарт түзөт. Массив индекси ажыроо массивинин аягына жеткенде, сап токтотулат.

4 -ыкма: Бул акыркы кадам чынында жипке реалдуу сап үнүн берет. Алар жагымдуу угулганга чейин, бирок ачык синтезделген. Чыныгы дүйнөлүк арфанын саптарын жакшыраак тууроо үчүн, ар бир гармоникке ар кандай ажыроо ылдамдыгы берилет. Чыныгы саптарда, сап биринчи соккондо жогорку жыштыктагы гармониканын жогорку мазмуну болот, ал биз саптан күткөн үзүлүүчү үндү түзөт. Бул жогорку жыштыктагы гармоникалар кыскача үндүн негизги бөлүгү, урулган жиптин үнү, бирок жайыраак гармоникалар пайда болгондо абдан тез бузулат. А ажыроо массиви үн синтезинде колдонулган ар бир гармоникалык сан үчүн түзүлөт, алардын ар бири өзүнүн ажыроо ылдамдыгына ээ. Эми ар бир гармоникти саптын массивинин индекси боюнча тиешелүү ажыроо массивине өз алдынча көбөйтүп, үнгө кошууга болот.

Жалпысынан үн синтези интуитивдүү, бирок эсептөө оор. Бүт сап үнүн дароо эстутумда сактоо өтө көп эс тутумду талап кылат, бирок синус толкунун жана ар бир кадрдын ортосундагы экспоненциалдык функцияны эсептөө аудио ойнотуу ылдамдыгына жетүү үчүн өтө көп убакытты талап кылат. Эсептөөнү тездетүү үчүн коддо бир катар амалдар колдонулат. Синус жана экспоненциалдык ажыроо таблицаларынын алгачкы түзүлүшүнөн башка бардык математика бүтүндөй форматта жүргүзүлөт, бул 24 бит аудио өндүрүштөгү сандык мейкиндикти жайылтууну талап кылат. Мисалы, синус үстөлү 150 амплитудага ээ, ошондуктан ал жылмакай, бирок анча чоң эмес, анткени чогуу ойнолгон көптөгөн кылдар 24 биттен ашык болушу мүмкүн. Ошо сыяктуу эле, экспоненциалдык таблицанын мааниси бүтүн сандарга тегеректелүүдөн жана сактоодон мурун 80ге көбөйтүлөт. Гармоникалык салмактар 0 менен 10дун ортосунда дискреттик мааниге ээ болушу мүмкүн. Ошондой эле бардык үлгүлөр эки эсе көбөйөт жана синус толкундары 2 менен индекстелет, натыйжалуу тандоо ылдамдыгын эки эсе кыскартат. Бул ойнотула турган максималдуу жыштыкты чектейт, бирок саптардын жана гармоникалардын учурдагы саны тез арада эсептелиши үчүн зарыл болгон.

Бул үн моделин түзүү жана аны иштетүү процессор тарабында бир топ күч -аракетти талап кылды жана бул долбоордун убагында fpga тараптан нөлдөн баштап иштөө өтө кыйын болмок (элестетүү керек: үндү текшерүү үчүн верилогдун бир бөлүгү өзгөртүлгөн). Бирок, fpgaда жасоо, балким, үлгүлөрдү тез арада эсептей албоо жана башка саптарга, гармоникага, ал тургай аудио эффекттерге же башка тапшырмаларды аткарууга мүмкүндүк бербөө маселесин жок кылып, муну кылуунун жакшы жолу болушу мүмкүн. процессор тарабы.

6 -кадам: сенсорлорду туташтыруу

Сенсорлорду туташтыруу
Сенсорлорду туташтыруу

Саптарды түзүү үчүн биз ИР үзүлүү нурларынын сенсорлорун колдонгонбуз, алар сап ойнолуп жатканда аныкталат. Биз сенсорлорубузду төмөнкү шилтемеден заказ кылдык. Сенсорлордо күч, жерге жана маалымат зымы бар, ал эми эмитенттерде күч жана жерге зым гана бар. Биз эмитенттерди да, сенсорлорду да кубаттоо үчүн PMOD аталыштарынан 3.3 В жана жер казыктарын колдондук. Бардык сенсорлорду жана эмитенттерди иштетүү үчүн бардык сенсорлорду жана эмитенттерди параллель туташтыруу керек. Сенсорлордун маалымат зымдары ар бири өзүнүн pmod пинине барышы керек.

7 -кадам: Скелетти куруу

Скелетти куруу
Скелетти куруу

Арфанын формасын түзүү үчүн үч бөлүк скелет катары датчиктерди жана эмитенттерди коюу үчүн колдонулат. ПВХ түтүгүнүн 18 дюймдук эки бөлүгүнүн биринде сенсорлорду жана эмитенттерди бири -биринен 1,5 дюймга кезектештирип, анан түтүккө скотч менен чаптаңыз. Башка 18 дюймдук ПВХ түтүктөрү сенсорлорду жана эмитенттерди кезектешип тегиздеп, бирок ордун алмаштырууну унутпаңыз (б.а. эгер биринчи түтүктө биринчи сенсор болсо, экинчисинде эмитент болушу керек жана тескерисинче). Тактага жетүүнү камсыз кылуу үчүн маалыматка, электрге жана жерге зымдарга узунураак зымдарды ширетүү керек болот.

8 -кадам: жыгачтын сыртын куруу

Жыгачтын сыртын куруу
Жыгачтын сыртын куруу

Бул кадам милдеттүү эмес, бирок абдан сунушталат. Жыгачтын сырты арфаны кооз кылып көрсөтпөстөн, сенсорлорду жана зымдарды бузуудан коргойт. Жыгач алкак жыгачтан жасалган тик бурчтуу шакек менен түзүлүшү мүмкүн. Тик бурчтуктун ичинде түтүккө жана сенсордун скелетине туура келгендей 1-1/2 дюймдан кем эмес тешиги болушу керек. Рамка курулгандан кийин, сенсордун зымдарын жана эмитенттерди тактайга туташтыруу үчүн эки тешикти бургулаңыз.

*Эскертүү: Оңдоп -түзөө же кичине тууралоо керек болгон учурда чоордун скелетин алып салуу жана киргизүү үчүн кирүү чекиттерин кошуу сунушталат.

9 -кадам: Бардык бөлүктөрдү бириктирүү

Бардык бөлүктөрдү бириктирүү
Бардык бөлүктөрдү бириктирүү

Бардык мурунку кадамдар бүткөндөн кийин, арфаны жасоого убакыт келип жетти. Адегенде чоордун скелетин жыгач сырткы ичине коюңуз. Андан кийин сенсорлордун жана эмитенттердин зымдарын тактадагы туура жерге туташтырыңыз. Андан кийин SDKны ачыңыз жана тактаны программалоо үчүн мүчүлүштүктөрдү оңдоо баскычын чыкылдатыңыз. Такта программалангандан кийин гарнитураны же динамикти сайыңыз. Кайсы сенсор кайсы pmod портунда бүтөөрүнө жараша, арфанын кылдары башталбай калышы мүмкүн. Көптөгөн зымдар тартылганда кайсы зым кайсы сенсорго өтөөрүн айтыш кыйын болгондуктан, биз программалык камсыздоонун бит позициясын үзгүлтүккө учуратуу үчүн сап сандарын картага түшүрүү ыкмасын киргиздик. "Static int sensor_map [NUM_STRINGS]" табыңыз жана саптар эң төмөнкүдөн эң жогоруга чейин ирети менен ойногонго чейин массивдеги маанилерди тууралаңыз.

Менюну сериялык терминалды (мис. RealTerm) ачуу менен колдонсо болот жана байдын ылдамдыгын 115200гө, дисплейди ANSIге коюуга болот. Менюну өйдө жана ылдый жылдыруу үчүн w жана s баскычтарын, ал эми маанилерди өзгөртүү үчүн a жана d баскычтарын колдонуу менен өтүүгө болот.

10 -кадам: ROCK OUT

Арфа толугу менен иштей баштаганда. Арфаны өздөштүрүңүз жана өз музыкаңыздын жагымдуу үнүн угуңуз!

Сунушталууда: