Mündəricat:

Stm32 -də Düşmək: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə: 4 Addım (Şəkillərlə)
Stm32 -də Düşmək: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə: 4 Addım (Şəkillərlə)

Video: Stm32 -də Düşmək: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə: 4 Addım (Şəkillərlə)

Video: Stm32 -də Düşmək: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə: 4 Addım (Şəkillərlə)
Video: Изучаю STM32! 2024, Dekabr
Anonim
Stm32 düşdü: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə
Stm32 düşdü: Ev Media Mərkəzi üçün Uzaqdan İdarəetmə

Bu, 'bluepill' lövhəsi olaraq bilinən smt32 mikro nəzarətçi, stm32f103c8t6 əsasında ev media mərkəzi uzaqdan idarəetmə üçün tam bir prototipdir. Tutaq ki, ev media mərkəzi üçün bir PC istifadə edirsiniz. Böyük bir video kitabxanasını daxili sabit diskə yerləşdirməyə və ya şəbəkədən video oynatmağa imkan verən çox çevik bir həlldir, məsələn, youtube və s., Kodeklər və ya video oynatmaqla heç bir probleminiz yoxdur, çünki bu çox proqram pleyerini istənilən vaxt yeniləmək asandır. Bu həllin əsas çatışmazlığı, çalma prosesini idarə etmək üçün siçan və klaviatura istifadə etməyinizdir. IR uzaqdan idarəetmə cihazı bunun üçün çox əlverişlidir.

Bu yazıda çip planlı lövhədən istifadə edərək öz uzaqdan idarə etməyinizi göstərəcəyəm.

Addım 1: Fikir

Fikir
Fikir
Fikir
Fikir

Əsas fikir çox sadədir: plan lövhəsi quraşdırılmış usb portuna malikdir və USB HID klaviatura kimi çıxış edə bilər. IR qəbuledicisini lövhəyə bağlasaq, IR uzaqdan idarəetmə əmrini virtual klaviaturanın 'düyməsini basmağa' çevirə bilər. Əlavə sürücü tələb olunmur!

Ətrafımızda dünyada bir çox IR protokolları var. VCS satıcısının hər bir TV -nin öz IR protokolu var. Ancaq bütün bu protokolların ortaq bir xüsusiyyəti var: siqnalı kodlaşdırmaq üçün nəbz modulyasiyasından istifadə edirlər. Adətən, bəzi müqəddimələr var: paketin ilk bitindən əvvəl uzun impuls. Sonra IR nəzarəti bütün paketi 0 və 1 ilə ötürür və uzun nəbzlə ötürməni tamamlayır. Biti deşifr etmək üçün zirvənin uzunluğunun nəbzini və uzunluğunu ölçməliyik. Adətən məntiq 0 və məntiq 1 -in pik uzunluğu eynidir, fərq tam nəbz uzunluğundadır.

Stm32 mikro nəzarətçiləri PWM siqnalını tutmaq üçün quraşdırılmış xüsusiyyətə malikdir. Taymerin kanal dəyişənləri nəbzin ümumi uzunluğunu və pik uzunluğunu saxladıqda, mikro nəzarətçinin hər bir taymeri yaxınlığında 'PWM siqnalını daha çox çəkmək' yerləşdirilə bilər. Burada kiçik bir detalı vurğulamalıyam: İR qəbuledicisi siqnalı tutduqda işçi pinindəki gərginlik 0 olur və boş vəziyyətdə işləyən pindəki gərginlik İQ qəbuledicisinin təchizatı gərginliyindən asılı olaraq 5 və ya 3,3 voltdur. Yəni, alıcı siqnalı 'ters çevirir'.

PWM ələ keçirmə rejimi ilə stm32 mikro nəzarətçi asanlıqla IR uzaqdan klaviatura kodlarına qədər IR uzaqdan tərcüməçiyə çevrilə bilər. Sonra sevdiyiniz filmi media mərkəzində oynamaq üçün ən çox sevdiyiniz vizual proqrama başlaya bilərsiniz, məsələn VLC Kodi.

Addım 2: Nəzarətçi yaradın

Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması
Nəzarətçinin yaradılması

Stm32 mikro nəzarətçisini proqramlaşdırmaq üçün STM -dən pulsuz bir proqram təmin etmək istərdim: sistem iş masası (aka ac6) və lövhənin konfiqurasiya vasitəsi cubeMX. Proqramı mikro nəzarətçiyə yükləmək üçün ST-Link V2 adapterinin çip klonundan istifadə etmək olar. Bu addıma əlavə edilmiş sistem iş masası layihə faylları, F1-IR_remote.zip faylı.

Lövhə konfiqurasiya vasitəsi mikro nəzarətçimizin ilkin hardware konfiqurasiya prosesini asanlaşdırır.

Sistem iş masası alətindən istifadə edirsinizsə, yüklənmiş layihədən istifadə edə bilərsiniz. Ancaq layihəni daha ətraflı araşdırmaq istəyirsinizsə, cubeMX -də lövhə konfiqurasiyasını yarada bilərsiniz:

  • Yeni bir layihə yaradın və stm32f103c8 lövhəsini seçin
  • RCC menyusundakı 'Yüksək Sürətli Saat (HSE)' maddəsi üçün 'Kristal/Seramik Rezonator' seçin.
  • SYS menyusundakı 'Debug' maddəsi üçün 'Serial Wire' seçin.
  • Şəkildə göstərildiyi kimi PWM çəkmə rejimində #2 sayğacını (TIM2 menyusu) konfiqurasiya edin:

    • Qul rejimi -> Sıfırlama rejimi
    • Tetik mənbəyi -> TI1FP1
    • Saat mənbəyi -> Daxili saat
    • Kanal1 -> Giriş Capture birbaşa rejimi
  • USB menyusunda "Cihaz (FS)" onay qutusunu seçin
  • USB_DEVICE menyusundakı 'FS IP Sınıfı' maddəsində 'İnsan Arayüzü Cihazı Sınıfı (HID)' açılan menyu elementini seçin.
  • Saat konfiqurasiya panelində, 2 saylı taymerə 72 MHz verdiyinizə əmin olun, çünki hər 1 mks -də taymer sayına ehtiyacımız var.
  • Konfiqurasiya panelində USB cihazını şəkildə göstərildiyi kimi konfiqurasiya edin
  • Konfiqurasiya panelində 2 sayğacını aşağıdakı kimi konfiqurasiya edin:

    • Prescaller - 71 (0 -dan 71 -ə qədər) - 1 mikro saniyəlik gənə!
    • Sayaç rejimi - yuxarı
    • Sayaç Dövrü - 39999 (uzun nəbzi ölçməyi bacarmalıyıq)
    • Giriş tutma kanalı1 - Düşən Kenar (IR qəbuledicisindən gələn siqnalın ters çevrildiyini unutmayın)

PWM çəkmə rejimində, 2 saylı zamanlayıcı aşağıdakıları işləyəcəkdir:

Düşən cəbhə aşkar edildikdə, taymer sayğacı kanal1 reyestrində saxlanılacaq və taymer sayğacı 0 ilə sıfırlanacaq. Sonra taymer istiqamətini saymağa davam edəcək. Beləliklə, nəbz uzunluğunu mikro saniyələrdə asanlıqla ölçə bilərik.

Varsayılan olaraq STM32 USB HID sinfi USB siçanını simulyasiya edir. Burada nəzarətçini klaviaturaya çevirmək üçün təlimat tapa bilərsiniz.

Addım 3: Nəzarətçiyə uyğunlaşdırma

Layihə Panasonic uzaqdan idarəetmə və Kodi media mərkəzi ilə işləyir. Layihəni öz nəzarətçinizə uyğunlaşdırmaq üçün, panasonic uzaqdan idarə etmə (panasonicCode) üçün Inc/code.h başlığına etdiyim kimi, uzaqdan idarə etmə kodunuzu əlavə etməlisiniz. Gördüyünüz kimi, hər bir əmrin özünəməxsus identifikatoru var (IRcommmand qeydində). Layihə tərəfindən tanınan 24 əmr (0-23) var. Əmr uyğunluğa görə sıralanır.

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};

Sonra addRemote () funksiyası ilə IR.cpp -də init () metoduna öz uzaqdan idarə etmənizi əlavə etməlisiniz. Funksiya arqumentləri bunlardır:

  • Paketdəki bitlərin sayı
  • Paket başlığının uzunluğu
  • 'Sıfır' bit uzunluğu
  • 'Bir' bit uzunluğu
  • Kod dizisinə işarəçi
  • Dizinin ədəd elementləri

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

}

Ayrıca fayl, əmrləri klaviatura kodlarına çevirmək üçün başqa bir cədvəl ehtiva edir. Kbdr_kodi serialında Kodi media mərkəzi üçün açar kodları var. Öz media mərkəzi proqramınız üçün başqa bir sıra əlavə edə bilərsiniz, məsələn, vlc player. Başqa bir media mərkəzi tətbiq cədvəli əlavə etsəniz, başqa bir KBD obyekti yaradacaq və onu main.cpp -də işə salacaqsınız.

Addım 4: Dərzilik işini asanlaşdırmaq üçün vasitələr

Dərzi tikməyi asanlaşdıran vasitələr
Dərzi tikməyi asanlaşdıran vasitələr
Dərzi tikməyi asanlaşdıran vasitələr
Dərzi tikməyi asanlaşdıran vasitələr

Anbarda daha iki layihə var

  • IR araşdırması - pultunuzun siqnallarının vaxt parametrlərini ölçməyə imkan verir.
  • IR_capture - pultunuzun HEX kodlarını çəkməyə imkan verir.

Sadəcə İR araşdırma layihəsini yükləyin və iş planının USB portunu kompüterinizə qoşun. Sonra virtual serial port cihazında stm32 lövhəsinə uyğun olan hər hansı bir terminal proqramını işə salın. Uzaqdan idarəetmə düymələrinə basdığınız zaman, proqram alınan nəbzləri ölçür və fərqli nəbzlərin orta vaxtlarını yazır. Paket başlığı, sıfır və bir bit üçün nəbz uzunluğunun aşkarlanmasını asanlaşdırmalıdır.

IR araşdırma layihəsində, 2 saylı taymer PWM çəkmə rejimində iki kanalla işləyir: birinci kanal bütün nəbz uzunluğunu, ikinci kanal isə pik uzunluğunu tutur. Düşən siqnal kənarı aşkar edildikdə, taymer dəyəri bir qeyddə qeyd olunur və taymer 0 ilə sıfırlanır. Siqnalın yüksələn kənarı aşkar edildikdə, taymer sayğacı kanal 2 qeydinə qeyd olunur.

Öz uzaqdan idarəetmə düymələrinizin kodlarını çəkmək üçün IR_capture layihəsi istifadə edilə bilər. Main.c faylına belə bir uzaq tərifi əlavə etməlisiniz:

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

  • .hdr - başlıq uzunluğu mks
  • .bits - paketdəki bitlərin sayı
  • .zero - sıfır bitin uzunluğu
  • .biri - uzunluğu bir az
  • .dev - sapma (qəbul edilə bilən vaxt fərqi). Adətən ən kiçik uzunluğun 1/10 hissəsidir.

Sonra uzaqdan idarə olunan uzaqdan idarə olunanların siyahısına əlavə edin:

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

Tövsiyə: