Mündəricat:
- Təchizat
- Addım 1: Sirkulyasiya
- Addım 2: Zamanlama Diaqramı
- Addım 3: Proqramlaşdırma. Makrolar və təriflər
- Addım 4: Proqramlaşdırma. Əsas döngə
- Addım 5: Proqramlaşdırma. Köməkçi funksiyalar
- Addım 6: Proqramlaşdırma. Protothread Rutinləri
- Addım 7: Daxili işlər
Video: Çox rəngli gözlərlə Attiny85 eyni vaxtda proqramlaşdırma və ya balqabaq: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Müəllif tərəfindən daha çoxunu izləyin: jumbleviewJumbleview.info
Haqqında: Bay Area (California) şirkətlərindən birində proqram mühəndisi işləyirəm. Vaxtım olanda mikro idarəediciləri proqramlaşdırmağı, mexaniki oyuncaqlar qurmağı və bir neçə ev yaxşılaşdırma layihəsi etməyi sevirəm. Jumbleview haqqında daha çox »
Bu layihə, Attiny85 çipi ilə iki ədəd 10 mm-lik üç rəngli ümumi anod LED-lərinin (Balqabaq Halloween Parıltısının çox rəngli gözləri) necə idarə olunacağını göstərir. Layihənin məqsədi oxucunu eyni vaxtda proqramlaşdırma sənətinə və Adam Dunkels prototreads kitabxanasının istifadəsinə cəlb etməkdir. Bu layihə, oxucunun AVR 8 bit nəzarətçiləri haqqında bildiyini, bəzi C proqramı yaza biləcəyini və Atmel studiyası ilə müəyyən təcrübəyə malik olduğunu güman edir.
GitHub -da yayımlanan layihə kodu:
Təchizat
Proqramlaşdırmadan əvvəl hələ də dövrə qurmaq lazımdır. Budur komponentlər:
- Attiny85 nəzarətçi (hər hansı bir elektron təchizatçı).
- Ümumi anodlu iki üç rəngli 10 mm LED. Adafruit LEDləri
- Rezistorlar 100 Ohm, 120 Ohm, 150 Ohm 0.125 və ya 0.250 Wt (hər hansı bir elektron təchizatçı).
- AVR ISP interfeysi üçün altı pin başlıq. Bu Adafruit başlığından hazırlana bilər
- Bəzi çörək lövhəsi və ya çap edilmiş şablon lövhəsi. Bunu https://www.adafruit.com/product/589 istifadə etdim
- AVR ISP MKII interfeysi və Atmel Studio 6.1 (Sonrakı versiya da işləməlidir).
Addım 1: Sirkulyasiya
Dizayn beş çip pinindən istifadə edir:
- Anodları idarə etmək üçün iki sancaq istifadə olunur: hər bir LED anod xüsusi pinə bərkidilir.
- LED -lərin katotlarına üç rezin (rezistorlar vasitəsilə) bərkidilir (hər bir ledin eyni rəngli katodu eyni pinə bərkidilir)
Biri soruşacaq: niyə LED anodları +5 v -ə birbaşa bağlanacaq və hər bir katodun xüsusi pininə sahib olacaqsınız? Bu, proqramlaşdırmanı asanlaşdıracaq. Təəssüf ki, bir problem var: pin PB5 (RESET) ~ 2 mA cərəyan verməyə qadir olan zəif bir pindir.
Əlbəttə ki, bu zəif pin üçün tranzistor gücləndiricisi qurmaq olar, amma mən özüm problemi kod vasitəsilə həll etməyə üstünlük verirəm.
Addım 2: Zamanlama Diaqramı
Zamanlama diaqramı, proqramlaşdırmaq üçün nəyə ehtiyacımız olduğunu anlamağa kömək edir.
Diaqramdakı ilk iki sıra LED anodlarında gərginlik dəyişikliyini göstərir. LED anodlarına qoşulan sancaqlardakı gərginlik ~ 250 Hz tezliyi ilə salınır. Sol LED üçün bu gərginlik salınması sağ LED -in əksinədir. Anoddakı gərginlik yüksək olduqda müvafiq LED parlaq ola bilər. Aşağı olduqda müvafiq LED qaranlıqdır. Bu o deməkdir ki, hər bir LED 2 milisaniyə ərzində parlaq ola bilər və başqa 2 milisaniyə ərzində qaranlıqdır. İnsan gözündə müəyyən bir ətalət olduğu üçün müşahidəçi 250 Hz -lik yanıb -sönməsini fərq etmir. Diaqramdakı üç sıra LED, katodlara bağlı pinlərdəki gərginliyin dəyişməsini göstərir. Birinci diaqram sütununa baxaq. Sol LED qırmızı rəngdə, sağ LED isə yaşıl rəngdədir. Burada sol anod yüksək olarkən QIRMIZ katodlar aşağı, YAŞIL katot aşağı, sağ anod yüksək və MAVİ katod hər zaman aşağı qalır. Diaqramdakı digər sütunlar müxtəlif rənglər üçün katot və anod gərginliyinin birləşmələrini göstərir.
Gördüyümüz kimi sancaqlar vəziyyətində qarşılıqlı asılılıq var. Bəzi çərçivələr olmadan həll etmək asan olmayacaq. Və prototipli kitabxananın lazımlı olduğu yer budur.
Addım 3: Proqramlaşdırma. Makrolar və təriflər
Proqramlaşdırma addımlarında bir az sadələşdirilmiş versiyanı təmsil edir. Proqram qısaldılır və bəzi simvolik tərif açıq sabitlərlə əvəz olunur.
Gəlin əvvəldən başlayaq. Proqrama Atmel Studio ilə gələn fayllar, həmçinin prototeka kitabxana başlığı daxildir. Sonra pin səviyyələrini manipulyasiya etmək üçün iki makro və pin siqnallarına məntiqi adlar vermək üçün bəzi təriflər var. İndiyə qədər xüsusi bir şey yoxdur.
Addım 4: Proqramlaşdırma. Əsas döngə
Sonra əsas prosedurun nə olduğunu görmək üçün sona baxaq.
Bəzi başlatma etdikdən sonra əsas funksiya əbədi döngədə qalır. Bu dövrədə növbəti addımları atır:
- Sol LED üçün prototip işləmə rejimini çağırır. Bəzi sancaqlar gərginliyini dəyişir.
- İki milisaniyə gecikdirin. Pin gərginliyində heç bir dəyişiklik yoxdur.
- Doğru LED üçün prototip çağırır. Bəzi pin gərginliyini dəyişir.
- 2 MS gecikmə edin. Pin gərginliyində heç bir dəyişiklik yoxdur.
Addım 5: Proqramlaşdırma. Köməkçi funksiyalar
Prototipləri müzakirə etməyə başlamazdan əvvəl bəzi köməkçi funksiyalara baxmalıyıq. Əvvəlcə müəyyən bir rəng təyin etmək üçün funksiyalar var. Düzdürlər. Dəstəklənən rənglərin sayı (yeddi) və LED qaranlığını (NoColor) təyin etmək üçün daha bir funksiya kimi bir çox funksiya var.
Və birbaşa prototip rutini ilə çağırılacaq daha bir funksiya var. Adı DoAndCountdown () dur.
Texniki cəhətdən belə bir funksiyanın istifadəsi məcburi deyil, amma bunu əlverişli hesab etdim. Üç arqumenti var:
- LED rəngini təyin etmək üçün işarəçi (RedColor və ya GreenColor və s. Kimi)
- Tərs sayğacın ilkin dəyəri: xüsusi prototip mərhələsində bu funksiyanın neçə dəfə çağırılmasının sayı.
- Əks sayğac üçün göstərici. Rəngdə dəyişiklik olduqda, əks sayğac 0 -a bərabərdir, buna görə əvvəlcə iterasiya kodu həmin sayğaca ilkin dəyəri təyin edəcək. Hər təkrarlama sayğacının azaldılmasından sonra.
DoAndCountdown () funksiyası tərs sayğacın dəyərini qaytarır.
Addım 6: Proqramlaşdırma. Protothread Rutinləri
Və burada çərçivə nüvəsi var: prototip qaydası. Sadəlik naminə yalnız üç addımla məhdudlaşırıq: rəng dəyişikliyi QIRMIZI, YAŞIL və MAVİ.
Funksiya iki arqumentlə çağırılır:
- Prototip quruluşuna işarə. Bu quruluş, əsas döngə başlamazdan əvvəl main tərəfindən başlatıldı.
- Əks sayğac üçün göstərici. Əsas döngə başlamazdan əvvəl 0 tərəfindən əsas olaraq təyin edildi.
Sol LED -i aktiv etmək üçün funksiya gərginlikləri təyin edir və sonra prototip seqmentini işə salır. Bu seqment PT_BEGIN və PT_END makroları arasındadır. İçəridə bizim vəziyyətimizdə yalnız PT_WAIT_UNTIL makrolarını təkrarlayan bəzi kodlar var. Bu makrolar aşağıdakıları yerinə yetirir:
- DoAndCountdown funksiyasının çağırılması. Xüsusi rəng yaymaq üçün LED katodlarında gərginliyi təyin edir.
- 0 ilə müqayisədə nəticə qaytarılır. Şərt 'yalan' olarsa, prototip funksiyası dərhal geri qayıdır və əsas döngəyə nəzarət verir.
- Növbəti dəfə prototip işə salındıqda, kodu PT_BEGIN -dən əvvəl yenidən yerinə yetirir, sonra son dəfə geri qaytardığı PT_WAIT_UNTIL makroların içərisinə atlayır.
- DoAndCountdown nəticəsi 0 olana qədər bu cür hərəkətlər təkrarlanır. Bu halda geri dönüş yoxdur, proqram prototipdə qalır və kodun növbəti sətrini icra edir. Bizim vəziyyətimiz növbəti PT_WAIT_UNTIL -dır, amma ümumiyyətlə demək olar ki, hər hansı bir C kodu ola bilər.
- İkinci PT_WAIT_UNTIL tərs sayğacın ilkin icrasında 0 olur, buna görə DoAndCountdown () proseduru onu ilkin dəyərə qoyur. İkinci makrolar, əks sayaç 0 -a çatana qədər yenidən 250 dəfə icra olunacaq.
- Nəzarət PT_END makrolarına çatan kimi struktur pt vəziyyəti sıfırlanır. Növbəti dəfə prototip funksiyası işə salındıqda, PT_BEGIN -dən dərhal sonra kod sətri icra olunmağa başlayır.
Doğru LED üçün oxşar prototip rutini var. Nümunəmizdə, fərqli rəng sıralarını tətbiq edir, amma bunu tamamilə fərqli şəkildə edə bilsək: sol və sağ LED rejimi arasında sıx bir əlaqə yoxdur.
Addım 7: Daxili işlər
Bütün proqram 200 satırdan azdır (şərh və boş sətirlərlə) və Attiny85 kod yaddaşının 20% -dən azını tutur. Lazım gələrsə, burada daha bir neçə prototip qaydalarından istifadə etmək və onlara daha mürəkkəb məntiq təyin etmək mümkündür.
Protothreads kitabxanası kompüterin eyni vaxtda proqramlaşdırmasının ən sadə formasıdır. Eşzamanlı proqramlaşdırma, proqramı məntiqi hissələrə bölməyə imkan verən bir yanaşmadır: bəzən onlara koroutinlər, bəzən mövzu, bəzən vəzifələr deyilir. Prinsip budur ki, bu cür hər bir tapşırıq eyni az miqdarda xətti və digər hissələrdən asılı olmayaraq eyni prosessor gücünü paylaşa bilər. Məntiq baxımından tapşırıqlar eyni vaxtda icra oluna bilər.
İnkişaf etmiş sistemlər üçün bu cür vəzifələrin ya əməliyyat sistemi nüvəsi, ya da tərtibçi tərəfindən icra edilə bilən dilin iş vaxtı ilə yerinə yetirilməsi. Ancaq prototeklər tətbiq edildikdə proqramçı, vəzifə prosedurlarında prototeklər makro kitabxanasını istifadə edərək və bu cür rutinləri çağıraraq (adətən əsas döngədən kənarda) əl ilə idarə edir.
Yəqin ki, prototipin əslində necə işlədiyini bilmək istəyirsiniz? Sehr harada gizlidir? Prototeklər xüsusi C dil xüsusiyyətinə əsaslanır: C switch case ifadəsinin əgər və ya başqa bir bloka (zaman və ya kimi) daxil edilə biləcəyi faktı. Ətraflı məlumatı Adam Dunkels saytında tapa bilərsiniz
Bu layihənin elektronikası çox sadədir. Yuxarıdakı fotoşəkil sizə bir ipucu verir. Daha yaxşı edə biləcəyinizə əminəm.
Tövsiyə:
ATtiny85 Geyinilə bilən Titrəmə Aktivliyi İzləmə İzləmə və Proqramlaşdırma Arduino Uno ilə ATtiny85: 4 addım (şəkillərlə)
ATtiny85 Geyinilə bilən Titrəmə Aktivliyi İzləmə Saatı və Proqramlaşdırılması Arduino Uno ilə ATtiny85: Geyinilə bilən fəaliyyət izləmə saatı necə edilir? Bu, durğunluq algıladıqda titrəmək üçün hazırlanmış geyilə bilən bir gadgetdır. Vaxtınızın çoxunu mənim kimi kompüterdə keçirirsinizmi? Özünüz də bilmədən saatlarla oturursunuz? Sonra bu cihaz f
Təlimat: Arduino, TCA9548A I2C Multiplexer istifadə edərək birdən çox Eyni Ünvan Cihazına Necə Nəzarət Edir: 3 Addım
Təlimat: Arduino, TCA9548A I2C Multiplexer istifadə edərək Birdən çox Eyni Ünvan Cihazına Necə Nəzarət Edir: Təsvir: TCA9548A I2C Multiplexer Modulu eyni I2C ünvanlı (8 eyni ünvana qədər I2C) cihazları bir mikro nəzarətçiyə bağlamağı təmin etməkdir. Multiplexer, əmrləri seçilmiş dəstə bağlayaraq qapıçı kimi çıxış edir
Arduino eyni bordda birdən çox PI sensoru idarə edir: 3 addım
Arduino eyni bordda birdən çox PIR sensoru idarə edir: Bu gün sizə bir neçə PIR sensoru tək Arduino Bord ilə necə bağlayacağınızı söyləyəcəyəm; burada əlavə funksionallıq üçün 4 kanallı röle modulundan da istifadə etdim. (Yoxsa arduininizi bir çox pin istifadə edə bilərsiniz
Eyni Musiqini Çox Otaqda Çalın: 3 Addım
Eyni Musiqini Çox Otaqda Çalın: Hər kəsə salam, sizin haqqınızda məlumatım yoxdur, amma səsini çox yüksək səsə çevirmədən bütün mənzildə eyni musiqini dinləməyi sevirəm. Bu problemlə əlaqədar bir az araşdırma apardıqdan sonra, hamısı eyni ilə wifi ilə əlaqəli bir neçə dinamik qurmağa qərar verdim
Arduino əsaslı çox rəngli yüngül rəngli çubuq: 13 addım (şəkillərlə)
Arduino əsaslı çox rəngli işıq boyama çubuğu: İşıqlı rəsm, fotoqrafların istifadə etdiyi bir texnikadır, burada maraqlı nümunələr çəkmək üçün bir işıq mənbəyindən istifadə olunur və Kamera bunları bir araya gətirir. Nəticədə Şəkil, nəticədə bir görünüş verəcək işıq izlərini ehtiva edəcək