Სარჩევი:

$ 1 LED განწყობის ნათურა ATtiny13 და WS2812: 7 ნაბიჯი
$ 1 LED განწყობის ნათურა ATtiny13 და WS2812: 7 ნაბიჯი

ვიდეო: $ 1 LED განწყობის ნათურა ATtiny13 და WS2812: 7 ნაბიჯი

ვიდეო: $ 1 LED განწყობის ნათურა ATtiny13 და WS2812: 7 ნაბიჯი
ვიდეო: როგორ დავამატოთ Z-Wave LED ნათურა "ჭკუის კოლოფში" 2024, ნოემბერი
Anonim
$ 1 LED განწყობის ნათურა ATtiny13 და WS2812
$ 1 LED განწყობის ნათურა ATtiny13 და WS2812

ავტორი: arduinocelentano

პერსონალური CalDAV სერვერი ერთ დაფაზე კომპიუტერზე
პერსონალური CalDAV სერვერი ერთ დაფაზე კომპიუტერზე
პერსონალური CalDAV სერვერი ერთ დაფაზე კომპიუტერზე
პერსონალური CalDAV სერვერი ერთ დაფაზე კომპიუტერზე
LCD Invaders: Space Invaders Like Game 16x2 LCD პერსონაჟების ჩვენებაზე
LCD Invaders: Space Invaders Like Game 16x2 LCD პერსონაჟების ჩვენებაზე
LCD Invaders: Space Invaders Like Game 16x2 LCD პერსონაჟების ჩვენებაზე
LCD Invaders: Space Invaders Like Game 16x2 LCD პერსონაჟების ჩვენებაზე
ოქტარინი: ფერის შესატყვისი თამაში WS2812 RGB LED- ებით
ოქტარინი: ფერის შესატყვისი თამაში WS2812 RGB LED- ებით
ოქტარინი: ფერის შესატყვისი თამაში WS2812 RGB LED- ებით
ოქტარინი: ფერის შესატყვისი თამაში WS2812 RGB LED- ებით

ეს არის დაბალი განწყობის ნათურა ოთხი რეჟიმით.

1. ცისარტყელას ნაპერწკალი. სინათლის ნაპერწკალი დროდადრო მაღლა მოძრაობს და თანდათან ცვლის ფერს.

2. ცისარტყელის ბრწყინვალება. სტაბილური ბზინვარება, რომელიც თანდათან ცვლის ფერს.

3. სანთლის ცეცხლის სიმულაცია.

4. გამორთულია.

თქვენ შეგიძლიათ შეცვალოთ რეჟიმი ზევით შეხების ღილაკზე დაჭერით. მიმდინარე რეჟიმი ინახება EEPROM მეხსიერებაში გამორთვის შემდეგ.

რამდენად პატარაა ATtiny13?

იდეა იყო მინიმალური აღჭურვილობის მაქსიმალური მახასიათებლების მიღება, რაც უფრო რთული იყო ვიდრე ავტომატური გადამრთველი ან თერმომეტრი, პროექტი ამ პატარა მიკროკონტროლერის პირას. ყოველივე ამის შემდეგ, შეზღუდვები გიბიძგებთ შემოქმედებითად იფიქროთ, არა? ისე, თავიდან ასე გამოიყურებოდა.

ამ პროექტში ყველაზე რთული იყო ყველა კოდის შეტანა ATtiny13– ში. მიკროკონტროლერს აქვს 1K ბაიტიანი ფლეშ და მხოლოდ 64 ბაიტიანი ოპერატიული მეხსიერება. დიახ, როდესაც ვამბობ "ბაიტს", ვგულისხმობ მათ, ვინც რვა ბიტისგან შედგება. 64 ბაიტი ყველა თქვენი ადგილობრივი ცვლადისთვის და ზარის დასტისთვის. გასაგებად რომ ვთქვათ, ჩვენ უნდა გავაკონტროლოთ 8 RGB LED. თითოეული მათგანი განისაზღვრება 3 ბაიტით (ერთი შესაბამისად წითელი, მწვანე და ლურჯი არხებისთვის). ამრიგად, მხოლოდ 8 LED- ის მდგომარეობის შესანახად, ჩვენ დაგვჭირდება 8 სტრუქტურის მასივის დანერგვა, თითოეული 3 ბაიტი და ამ მასივის დასაწყისის მაჩვენებელი კიდევ ერთ ბაიტს მიიღებს. ამრიგად, 64 ბაიტიდან 25 გამოდის. ჩვენ ახლახან გამოვიყენეთ ოპერატიული მეხსიერების 39% და ჯერ არ დავიწყეთ. გარდა ამისა, ცისარტყელას შვიდი ძირითადი ფერის შესანახად დაგჭირდებათ 7 × 3 = 21 ბაიტი, ასე რომ ოპერატიული მეხსიერების 72% ამოიწურება. რაც შეეხება ძირითად ფერებს, მე ვაჭარბებ: ჩვენ არ გვჭირდება ყველა მათგანი ერთდროულად RAM– ში და ისინი არასოდეს იცვლება, ამიტომ ისინი შეიძლება განხორციელდეს როგორც მუდმივი მასივი, რომელიც ინახება ფლეშში RAM– ის ნაცვლად. ყოველ შემთხვევაში, ის საერთო შთაბეჭდილებას ტოვებს გამოყენებული ტექნიკის შესახებ.

გავიხსენე კნუთის განცხადება ნაადრევი ოპტიმიზაციის შესახებ, დავიწყე სამი ნათურის რეჟიმის პროტოტიპირება ცალკე იმის სანახავად, რა ხდება. მე ისინი ცალკე გამოვცადე, რათა დავრწმუნდე, რომ ისინი სწორად მუშაობენ და თითოეული მათგანი შეესაბამება ჩემს მიკროკონტროლერს. რამდენიმე საღამო დასჭირდა მის შესასრულებლად და ყველაფერი კარგად წავიდა… სანამ არ შევეცადე მათი გაერთიანება გადამრთველის განცხადებაში. avr-size უტილიტა აცხადებდა 1.5 Kb ტექსტის მონაკვეთის ზომას (avr-gcc –s დროშით). იმ მომენტში ჩემი პირველადი განზრახვა იყო ავიღო რაღაც ATtiny25 2 კბ სიჩქარით და ეს შეიძლებოდა ყოფილიყო ამ ამბის ბედნიერი დასასრული.

მაგრამ რატომღაც ვიგრძენი, რომ მნიშვნელოვანი ოპტიმიზაციის შემდეგ შემეძლო შემემცირებინა ეს უაზრო კოდი 1 კბ. თუმცა, კიდევ ერთი კვირა დასჭირდა იმის გააზრებას, რომ შეუძლებელია და კიდევ ერთი კვირა მაინც. ცისარტყელა ხუთ ძირითად ფერს მომიწია (მნიშვნელოვანი ვიზუალური განსხვავების გარეშე). მოვიშორე შემთხვევის განცხადებები და ორობითი კოდის ზომის შესამცირებლად გამოვიყენე if-then-if- ის ჯაჭვი. ცეცხლის ანიმაციას სჭირდება ფსევდო შემთხვევითი რიცხვების გენერატორი, რომელიც საკმაოდ მოცულობითია, ამიტომ მე განვახორციელე LFSR– ის გამარტივებული ვერსია მუდმივი საწყისი მნიშვნელობით. მე არ მაინტერესებს PRNG სრული ციკლის ხანგრძლივობა და უბრალოდ ვეძებ დაბალანსებას კოდის ზომასა და "რეალისტური ცეცხლის ანიმაციას" შორის. მე ასევე განვახორციელე ბევრი უმნიშვნელო ოპტიმიზაცია, რომელიც ახლა არ მახსოვს და კიდევ შევძელი ჩიპში ცეცხლის გარდა ყველა რეჟიმის ჩაქრობა. როდესაც იდეები დამთავრდა, ჩემი საერთო კოდი იყო დაახლოებით 1200 ბაიტი.

მე დრო გავიდა და ბევრს ვკითხულობდი AVR კოდის ოპტიმიზაციის შესახებ. ახლოს ვიყავი დანებებაზე და ყველაფერი ასამბლეის ენაზე გადამეწერა, მაგრამ ბოლო შანსი მივეცი. ოპტიმიზაციის საბოლოო მსვლელობისას მე ცისარტყელა დავჭრა სამ ძირითად ფერში და სხვებიც გამოთვალეთ ფრენის დროს, მე ყველაფერი გადავამოწმე და AVR– ის ოპტიმიზაციის რეკომენდაციებს მივყევი და ბოლოს…

avrdude: წერის ფლეშ (1004 ბაიტი):

წერა | #################################################### | 100% 0.90 წ

არ არის საჭირო იმის თქმა, რომ მე გამოვიყენე თითქმის მთელი ოპერატიული მეხსიერება და მხოლოდ ერთი ბაიტი EEPROM მიმდინარე რეჟიმის შესანახად. მე არ ვგულისხმობ, რომ ეს არის იდეალური და საბოლოო განხორციელება. ის უბრალოდ მუშაობს და ჯდება მიკროკონტროლერთან. დარწმუნებული ვარ, შენ შეგიძლია ამის გაკეთება უკეთესად. მე ნამდვილად ვარ. მე უბრალოდ მინდა გაგიზიაროთ ერთი შეხედვით არაპრაქტიკული პრობლემის გადაჭრის გართობა, რომელსაც თავიდან თითქმის შეუძლებლად თვლით.”ამრიგად, ჰაკერი ნიშნავს შესაძლებლობის საზღვრების შესწავლას…” -რიჩარდ სტოლმანი.

მასალები:

1x ATtiny13 MCU ($ 0.28 = $ 0.24 MCU– სთვის SOP-8 პაკეტში და $ 0.04 DIP8 ადაპტერისთვის)

8x WS2812 RGB LED- ები (გირჩევთ დაფა ან LED ზოლის ნაჭერი) ($ 0.42)

1x TTP223 სენსორული ღილაკი ($ 0.10)

1x Micro USB to DIP ადაპტერი ($ 0.14)

1x 10kΩ რეზისტორი (<$ 0.01)

1x 100nF კერამიკული კონდენსატორი (<$ 0.01)

1x 10–47µF ელექტროლიტური კონდენსატორი (<$ 0,01)

სულ <$ 0.97

ნაბიჯი 1: პროგრამული უზრუნველყოფის დაყენება

პროგრამული უზრუნველყოფის დაყენება
პროგრამული უზრუნველყოფის დაყენება

თქვენ დაგჭირდებათ avr-gcc ინსტრუმენტთა ქსელი წყაროს კოდის შესადგენად და avrdude კომუნალური მიკროკონტროლერის ROM ატვირთვისთვის. ინსტალაციის პროცესი საკმაოდ მარტივი და პირდაპირია, მაგრამ ეს დამოკიდებულია თქვენს ოპერაციულ სისტემაზე. თუ იყენებთ რაიმე სახის GNU/Linux– ს, თქვენ ალბათ უკვე გაქვთ შესაბამისი პაკეტები თქვენს საცავში. ამ პროექტის კოდის გადმოწერა შესაძლებელია აქ:

github.com/arduinocelentano/t13_ws2812_lamp

თქვენ ასევე დაგჭირდებათ light_ws2812 ბიბლიოთეკა:

github.com/cpldcpu/light_ws2812

მას შემდეგ რაც მიიღებთ avr-gcc ინსტრუმენტთა ქსელს და პროექტის წყაროს, გაუშვით თქვენი ტერმინალი და ჩაწერეთ შემდეგი კოდი:

cd ბილიკი/პროექტამდე

გააკეთოს

ნაბიჯი 2: მიკროკონტროლერის დაპროგრამება

მიკროკონტროლერის დაპროგრამება
მიკროკონტროლერის დაპროგრამება
მიკროკონტროლერის დაპროგრამება
მიკროკონტროლერის დაპროგრამება
მიკროკონტროლერის დაპროგრამება
მიკროკონტროლერის დაპროგრამება

თუ თქვენ გაქვთ რაიმე სახის USBASP პროგრამისტი, უბრალოდ დაუკავშირეთ იგი Attiny– ს მისი პინუტის მიხედვით. ჩვეულებრივ, ასე გამოიყურება, მაგრამ მე გირჩევთ შეამოწმოთ თქვენი რეალური პინუტი!

გარდა ამისა, თქვენ შეგიძლიათ გამოიყენოთ Arduino დაფა, როგორც პროგრამისტი. გახსენით Arduino IDE და იპოვეთ Arduino ISP მაგალითი "ფაილი amples მაგალითები" მენიუში. ესკიზის ატვირთვის შემდეგ, თქვენი Arduino დაფა მოქმედებს როგორც პროგრამისტი. ესკიზის კოდში მოცემული კომენტარები მოგცემთ მინიშნებას დასადგენად.

ახლა გაიქეცი

გააკეთე ფლეშ

ააფეთქოს MCU და

დაუკრა

დაუკრავენ ბიტების დაყენებას.

გირჩევთ: