Mundarija:

Stm32 -ga tushish: uy media markazi uchun masofadan boshqarish pulti: 4 qadam (rasmlar bilan)
Stm32 -ga tushish: uy media markazi uchun masofadan boshqarish pulti: 4 qadam (rasmlar bilan)

Video: Stm32 -ga tushish: uy media markazi uchun masofadan boshqarish pulti: 4 qadam (rasmlar bilan)

Video: Stm32 -ga tushish: uy media markazi uchun masofadan boshqarish pulti: 4 qadam (rasmlar bilan)
Video: Flipper Zero Hacking In Public 2024, Noyabr
Anonim
Stm32 tushib: Uy media markazi uchun masofadan boshqarish
Stm32 tushib: Uy media markazi uchun masofadan boshqarish

Bu smt32 mikro -tekshirgichiga asoslangan stm32f103c8t6 "bluepill" taxtasi asosidagi uy media markazining masofadan boshqarish pultining to'liq prototipi. Aytaylik, siz uy media markazi uchun shaxsiy kompyuterdan foydalanayapsiz. Bu juda moslashuvchan yechim bo'lib, u sizga katta video kutubxonasini ichki qattiq diskka joylashtirishga imkon beradi, yoki siz tarmoqdan videoni o'ynata olasiz, masalan youtube yoki shunga o'xshash, sizda kodek yoki videoni ijro etish bilan hech qanday muammo yo'q, chunki bu juda dasturiy ta'minot pleyerini xohlagan vaqtda yangilash oson. Ushbu echimning asosiy kamchiligi shundaki, siz ijro etishni boshqarish uchun sichqoncha va klaviaturadan foydalanishingiz kerak. IQ masofadan boshqarish pulti bu uchun juda qulay rejim.

Ushbu maqolada men chipli taxtadan foydalanib, masofadan boshqarish pultini qanday yaratishni ko'rsataman.

1 -qadam: Fikr

Fikr
Fikr
Fikr
Fikr

Asosiy g'oya juda oddiy: chizma chizig'i usb portiga ega va USB HID klaviaturasi vazifasini bajarishi mumkin. Agar biz IQ qabul qilgichni taxtaga biriktirsak, u sizning masofadan boshqarish pultidagi buyruqni virtual klaviaturaning "tugmachalarini bosish" ga aylantirishi mumkin. Qo'shimcha haydovchilar talab qilinmaydi!

Bizni o'rab turgan dunyoda ko'plab IQ protokollari mavjud. VCS sotuvchisining har bir televizorining o'ziga xos IR protokoli mavjud. Ammo bu protokollarning umumiy jihatlari bor: ular signalni kodlash uchun impuls-modulyatsiyadan foydalanadilar. Odatda, kirish so'zlari bor: paketdagi birinchi bitdan oldin uzoq impuls. Keyin IQ boshqaruvi butun paketni 0 va 1 bilan uzatadi va uzatishni uzoq puls bilan yakunlaydi. Bitni dekodlash uchun biz pulsning uzunligini va cho'qqining uzunligini o'lchashimiz kerak. Odatda, 0 mantiq va 1 mantiqning cho'qqisi uzunligi bir xil, farq to'liq impuls uzunligidadir.

Stm32 mikrokontrollerlari PWM signalini olish uchun o'rnatilgan xususiyatga ega. Mikrokontrollerning har bir taymeri yaqinida "PWM signalini ko'proq ushlab turish" ni qo'yish mumkin, agar taymerning kanal o'zgaruvchilari pulsning umumiy uzunligini va uning tepalik uzunligini saqlasa. Bu erda men kichik tafsilotlarni ajratib ko'rsatishim kerak: IQ qabul qilgich signalni qabul qilganda, uning ishchi pimidagi kuchlanish 0 ga aylanadi va bo'sh holatda ishchi pimdagi kuchlanish IQ qabul qilgichining kuchlanishiga qarab 5 yoki 3,3 voltga teng bo'ladi. Ya'ni, qabul qiluvchi signalni teskari yo'naltiradi.

PWM ta'qib qilish rejimida stm32 mikro -tekshirgichini IQ masofadan boshqarish pultidan klaviatura kodlariga osongina IR masofali tarjimoniga aylantirish mumkin. Keyin siz o'zingiz yoqtirgan vizualizatsiya dasturini ishga tushirishingiz mumkin, masalan, VLC -ning Kodi media -markazida sevimli filmingizni ijro etish uchun.

2 -qadam: Tekshirgichni yaratish

Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish
Nazoratchini yaratish

Stm32 mikrokontrolerini dasturlash uchun STM -dan bepul dasturiy ta'minotni tavsiya qilmoqchiman: tizimli ishchi stol (aka a6) va cubeMX taxta konfiguratsiya vositasi. Dasturiy ta'minotni mikrokontrolerga yuklash uchun ST-Link V2 adapterining klon klonidan foydalanish mumkin. Ushbu bosqichga biriktirilgan tizim ishchi stolining loyiha fayllari, F1-IR_remote.zip fayli.

Kengash konfiguratsiya vositasi mikrokontrollerimizning dastlabki apparat konfiguratsiyasi jarayonini osonlashtiradi.

Agar siz tizim ishchi dastgohidan foydalansangiz, faqat yuklab olingan loyihadan foydalanishingiz mumkin. Ammo, agar siz loyihani batafsil o'rganishni xohlasangiz, cubeMX -da taxta konfiguratsiyasini yaratishingiz mumkin:

  • Yangi loyiha yarating va stm32f103c8 kartasini tanlang
  • RCC menyusidagi "Yuqori tezlikdagi soat (HSE)" bandi uchun "Kristal/Seramika rezonatori" ni tanlang.
  • SYS menyusidagi "disk raskadrovka" bandi uchun "Seriyali sim" ni tanlang.
  • Rasmda ko'rsatilgandek, PWM ta'qib qilish rejimida #2 taymerini (TIM2 menyusi) sozlang:

    • Qul rejimi -> Qayta tiklash rejimi
    • Trigger manbai -> TI1FP1
    • Soat manbai -> Ichki soat
    • Channel1 -> Input Capture to'g'ridan -to'g'ri rejimi
  • USB menyusida "Device (FS)" katakchasini belgilang
  • USB_DEVICE menyusidagi "FS IP klassi" bandidagi "Inson interfeysi qurilmasi sinfi (HID)" ochiladigan menyu elementini tanlang.
  • Soat konfiguratsiya panelida 2 -sonli taymerga 72 MGts chastotani taqdim etishga ishonch hosil qiling, chunki bizga har 1 mkda taymerlar soni kerak.
  • Konfiguratsiya panelida USB qurilmasini rasmda ko'rsatilgandek sozlang
  • Konfiguratsiya panelida 2 -taymerni quyidagicha sozlang:

    • Prescaller - 71 (0 dan 71 gacha) - 1 mikro soniya belgisi!
    • Hisoblagich rejimi - yuqoriga
    • Hisoblagich davri - 39999 (biz uzoq pulsni o'lchashimiz kerak)
    • Kirish ta'qib qilish kanali1 - Falling Edge (esda tutingki, IQ qabul qiluvchidan signal teskari)

PWM ta'qib qilish rejimida taymer#2 quyidagicha ishlaydi:

Yiqilib tushayotgan jabha aniqlanganda taymer hisoblagichi kanal1 registrida saqlanadi va taymer hisoblagichi 0 bilan tiklanadi. Keyin taymer yo'nalishni sanashda davom etadi. Shunday qilib, biz puls uzunligini mikro soniyalarda osongina o'lchay olamiz.

Odatiy bo'lib, STM32 USB HID klassi USB sichqonchasini taqlid qiladi. Bu erda siz tekshirgichni klaviaturaga aylantirish bo'yicha ko'rsatmalarni topishingiz mumkin.

3 -qadam: Tekshirgichni sozlash

Loyiha Panasonic masofadan boshqarish pulti va Kodi media markazi bilan ishlaydi. Loyihani o'z boshqaruvchisiga moslashtirish uchun, men panasonic masofadan boshqarish pultidagi kabi (panasonicCode) Inc/code.h sarlavhasiga masofadan boshqarish pultining kodlar qatorini qo'shishim kerak. Ko'rib turganingizdek, har bir buyruq o'ziga xos identifikatorga ega (IRcommmand enumda). Loyiha tomonidan tan olingan 24 ta buyruq (0-23) mavjud. Buyruqlar muvofiqligi bo'yicha saralanadi.

typedef enum {IR_play = 0, IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IR_chapter_next, IR_chapter_previous, IR_info, IR_subtitle, IR_nxt_subtitle, IR_pos_subtitle, IR_teletext, IR_zoom, IR_mark_watched, IR_playlist, IR_power, IR_unknown} IRcommand;

const uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L, (uint16_t (HID_LEFT_CTRL) << 8) | HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C};

0x100eced panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091 uint32_t const, 0x180a021, 0xd00bcb1};

Keyin addRemote () funktsiyasi bilan IR.cpp da init () usulida o'z masofadan boshqarish pultini qo'shishingiz kerak. Funktsiya argumentlari:

  • Paketdagi bitlar soni
  • Paket sarlavhasi uzunligi
  • "Nol" bit uzunligi
  • Bitta uzunlik
  • Kodlar qatoriga ko'rsatgich
  • Massivning raqamli elementlari

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Shuningdek, faylda buyruqlarni klaviatura kodlariga aylantirish uchun boshqa jadval mavjud. Kbdr_kodi qatorida Kodi media -markazi uchun kalit kodlar mavjud. Siz o'zingizning media -markazingiz dasturiga boshqa qator qo'shishingiz mumkin, masalan, vlc pleer. Agar siz boshqa media -markaz dastur jadvalini qo'shsangiz, siz boshqa KBD ob'ektini yaratasiz va uni main.cpp -da ishga tushirasiz.

4 -qadam: Tikuvchilikni soddalashtirish vositalari

Tikuvchilikni soddalashtirish vositalari
Tikuvchilikni soddalashtirish vositalari
Tikuvchilikni soddalashtirish vositalari
Tikuvchilikni soddalashtirish vositalari

Ma'lumotlar omborida yana ikkita loyiha bor

  • IR tekshiruvi - masofadan boshqarish pulti signallarining vaqt parametrlarini o'lchash imkonini beradi.
  • IR_capture - masofadan boshqarish pultining HEX kodlarini yozib olish imkonini beradi.

Faqat IQ tadqiqot loyihasini yuklang va kompyuterga USB portini ulang. Keyin virtual ketma -ket port qurilmasida stm32 kartasiga mos keladigan har qanday terminal dasturini ishga tushiring. Siz masofadan boshqarish pultidagi tugmachalarni bosganingizda, dastur qabul qilingan pulslarni o'lchaydi va har xil pulsning o'rtacha vaqtini bosib chiqaradi. Paket sarlavhasi, nol va bitta bit uchun zarba uzunligini aniqlashni soddalashtirish kerak.

IR tergov loyihasida 2 -taymer PWM ta'qib qilish rejimida ikkita kanal bilan ishlaydi: 1 -kanal butun puls uzunligini, 2 -kanal esa tepalik uzunligini oladi. Qachon tushayotgan signal chegarasi aniqlansa, taymer qiymati kanalga bitta registrga saqlanadi va taymer 0 bilan tiklanadi. Signalning ko'tarilish chekkasi aniqlanganda taymer hisoblagichi 2 -kanal registriga saqlanadi.

O'zingizning masofadan boshqarish pultingizning tugma kodlarini yozib olish uchun IR_capture loyihasidan foydalanishingiz mumkin. Main.c fayliga masofaviy ta'rifni quyidagicha qo'shish kerak:

IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - sarlavha uzunligi mks
  • .bits - paketdagi bitlar soni
  • .zero - nol bitning uzunligi
  • .biri - uzunligi bir bit
  • .dev - burilish (qabul qilinadigan vaqtlar farqi). Odatda bu eng kichik uzunlikning 1/10 qismidir.

Keyin masofadan boshqarish pultini qo'llab -quvvatlanadigan masofadan boshqarish pultlari ro'yxatiga qo'shing:

const IRcode* remote [2] = {& panasonic, & pioneer};

Tavsiya: