Სარჩევი:

მოციმციმე, სიმღერა, მარიომანი: 5 ნაბიჯი
მოციმციმე, სიმღერა, მარიომანი: 5 ნაბიჯი

ვიდეო: მოციმციმე, სიმღერა, მარიომანი: 5 ნაბიჯი

ვიდეო: მოციმციმე, სიმღერა, მარიომანი: 5 ნაბიჯი
ვიდეო: #აკუსტიკა ნათია თოდუა - მაგნოლია 2024, ნოემბერი
Anonim
მოციმციმე, მღერიან, მარიომან
მოციმციმე, მღერიან, მარიომან

გამოიყენეთ attiny13a, ორი LED- ები და მისალოცი ბარათის სპიკერი, რომ შექმნათ მოციმციმე Marioman, რომელიც უკრავს სუპერ მარიო ძმების თემატიკურ სიმღერას. ეს შეიძლება იყოს მარტივი დაბალბიუჯეტიანი პროექტი მათთვის, ვინც ეძებს გართობის გზას AVR პროგრამირების შესვენების მიზნით! სიმღერების ნოტები წარმოიქმნება AVR მიკროკონტროლის ერთ პინზე გამომავალი კვადრატული ტალღის მიერ. LED- ები, რომლებიც ალტერნატიულია თითოეულ ნოტზე, დაკავშირებულია 2 ქინძისთავთან, თითოეული ერთი და იგივე ჩიპით.

ნაბიჯი 1: მასალები და კონსტრუქცია

მასალები და კონსტრუქცია
მასალები და კონსტრუქცია

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3d ფასი: $ 1.40

  • 2 LED- ები - ნებისმიერი LED- ები გააკეთებს
  • 1 ლითიუმის მონეტის ბატარეა

www.sparkfun.com/commerce/product_info.php?products_id=338 ღირებულება: $ 2.00

1 მონეტის უჯრედის მფლობელი

www.sparkfun.com/commerce/product_info.php?products_id=8822 ღირებულება: $ 1.25

1 პატარა სპიკერი მუსიკალური მისალოცი ბარათიდან

მასალების საერთო ღირებულება ~ 5 აშშ დოლარი ორი LED იყო მიმაგრებული პირდაპირ ორ ქინძისთავზე თითოეული attiny13A. თითოეული შუქდიოდისთვის გამოიყენება ორი ქინძისთავები, მეორე პინი დაბალ დონეზეა გამოსაყენებელი, როგორც სახმელეთო კავშირი. AVR- ზე I/O ქინძისთავების ამჟამინდელი ლიმიტი ხელს შეუშლის LED- ებს ძალიან ბევრი ხატვისგან, ამიტომ რეზისტორი არ არის საჭირო სერია. გამოყენებული სპიკერი ტიპიურია მუსიკალური მისალოცი ბარათში ნაპოვნი, ნებისმიერი პატარა სპიკერი ამას გააკეთებს, იმის გათვალისწინებით, რომ ეს გამოსცემს კვადრატულ ტალღას, არც ისე მნიშვნელოვანია ფიქრი დინამიკის მართვის ან ხმის ხარისხის შესახებ.

ნაბიჯი 2: AVR- ის შედუღება LED- ებზე და დინამიკზე

AVR- ის მიერთება LED- ებზე და დინამიკზე
AVR- ის მიერთება LED- ებზე და დინამიკზე
AVR- ის მიერთება LED- ებზე და დინამიკზე
AVR- ის მიერთება LED- ებზე და დინამიკზე

იმისათვის, რომ შუქდიოდური შუშები მკლავების მსგავსად მიაღწიოს, ერთი პინდი მოხრილია AVR თითოეულ მხარეს. AVR– ის ორიენტაცია ამ გზით აადვილებს დინამიკთან დაკავშირებას (მეორე სურათი), ვინაიდან კავშირები ორ ქვედა ქინძისთავზეა. ესთეტიკისთვის თქვენ გინდათ ჩიპის წინა მხარე მოპირკეთებული, ასე რომ დარწმუნდით, რომ სპიკერი ერთნაირად დგას, როდესაც იგი მიმაგრებულია

ნაბიჯი 3: პროგრამირება Attiny13a

პროგრამირება Attiny13a
პროგრამირება Attiny13a

AVR– ის დასაპროგრამებლად უამრავი სხვადასხვა ვარიანტია. ამ პროექტისათვის გამოიყენეს USB ტინი, რომელიც ხელმისაწვდომია როგორც კომპლექტი ქალბატონის საიტიდან https://www.ladyada.net/make/usbtinyisp/index.html AVR პროგრამისტთან დასაკავშირებლად შეგიძლიათ ან მიამაგრეთ მავთულები ქალის სოკეტში და შეაერთეთ ისინი პურის დაფაზე, ან უკეთესად მიიღეთ იაფი AVR პროგრამირების ადაპტერი, როგორიცაა ეს რა

ნაბიჯი 4: შექმნა firmware for Marioman

პროგრამული უზრუნველყოფის შექმნა მარიომანისთვის
პროგრამული უზრუნველყოფის შექმნა მარიომანისთვის

Attiny13A– ს აქვს 1K პროგრამირებადი ფლეშ და 64bytes SRAM. თანდართულ ტარ ფაილს აქვს საწყისი ფაილი, ასევე ჩამოთვლილი პროგრამული უზრუნველყოფა. C კოდში სამი მასივი გამოიყენებოდა მუსიკის შესაქმნელად

  • freq - თითოეული ნოტის სიხშირე
  • სიგრძე - თითოეული ნოტის სიგრძე
  • დაგვიანებით - პაუზა თითოეულ ნოტს შორის

სიხშირის მასივს არ გააჩნია ფაქტობრივი სიხშირეები, არამედ მნიშვნელობა TTCROB რეგისტრში ჩასასმელად PB0 პინიდან კვადრატული ტალღის შესაქმნელად. აქ არის კვადრატული ტალღის წარმოქმნის გამოთვლებისა და პინ კონფიგურაციის მოკლე შინაარსი:

  • Attiny13A– ს აქვს შიდა ოსცილატორი 9.6 MHz– ზე
  • შიდა საათის IO არის oscillator იყოფა 8 ან 1.2MHz
  • შიდა ქრონომეტრი დაყენებულია 8 ბიტიან რეგისტრში, რომ დაითვალოს ყოველი საათის ციკლი 8 – ის წინასწარი მასშტაბით.
  • ეს იწვევს 1 ტკიპის ტოლფასი 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A არის კონფიგურირებული, რომ შეადაროს ის, რაც არის 8 ბიტიანი TCCR0B რეგისტრში ტაიმერთან და შეცვალოს პინი, როდესაც ისინი ემთხვევა.
  • მაგალითად, კვადრატული ტალღის წარმოქმნის მიზნით 524Hz (ერთი ოქტავა შუა C- ზე ზემოთ), რომლის პერიოდია 1.908ms.

1.908ms = 286 საათის ტკიპები (1.908/.0067) გაყავით 286 2 -ზე, რომ გადართოთ pin t/2 (286/2 = 143) ჩადეთ 143 TTCR0B რეგისტრში ამ შენიშვნის შესაქმნელად. ეს არის ყველა საჭირო კოდი ტაიმერის დასაყენებლად შეადარეთ და გამოუშვით კვადრატული ტალღა:

TCCR0A | = (1 << WGM01); // ტაიმერის 1 კონფიგურაცია CTC რეჟიმში TCCR0A | = (1 << COM0A0); // გადართვა OC0A შედარების მატჩზე TCCR0B | = (1 << CS01); // clk/8 prescale TTCR0B = 143; // წარმოქმნის კვადრატულ ტალღას 524 ჰც -ზებგერების და მათ შორის პაუზების გადადების მიზნით გამოიყენება მარტივი დაყოვნების ფუნქცია

ბათილი ძილი (int ms) {int cnt; for (cnt = 0; cnt <(ms); cnt ++) {int i = 150; ხოლო (i--) {_asm ("NOP"); }}}ეს ითვლის 150 -დან, სადაც თითოეული NOP ციკლი არის დაახლოებით.006667ms. ბოლო რასაც კოდი აკეთებს არის მასივების მარყუჟი, მუსიკის გენერირება და ორი LED- ის დახუჭვა. ეს კეთდება მარყუჟის უწყვეტად შემდეგი კოდით

const uint8_t freq PROGMEM = {… data}; const uint8_t სიგრძე PROGMEM = {… data}; const uint8_t დაგვიანებით PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); ძილი (pgm_read_byte (& სიგრძე [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // ტაიმერის გაჩერება TCCR0B = 0; ძილი (pgm_read_word (& დაგვიანება [cnt])); // დაწყების ტაიმერი TCCR0B | = (1 << CS01); // clk/8 წინასწარი ზომა}}სიხშირის/სიგრძის/დაგვიანების მასივებში არის 156 ელემენტი, ეს მარყუჟი მათ კვეთს. PIN PB3 და PB4 არის თითოეული გადართული, ასე რომ ისინი შეიცვლება თითოეულ ნოტთან ერთად პირველი ძილი არის ნოტის სიგრძე, რომელსაც ჩვენ ვთამაშობთ OCR0A რეგისტრის შესაბამისი მნიშვნელობის დაყენების შემდეგ. მეორე ძილი არის პაუზა ნოტებს შორის, რომელსაც ჩვენ ვთამაშობთ. ზემოთ მოყვანილ კოდში თქვენ შეიძლება შეამჩნიოთ ორი ფუნქცია pgm_read_byte () და pgm_read_word (), ასევე საკვანძო სიტყვა PROGMEM. ჩამონტაჟებული ჩიპით, როგორიცაა attiny, SRAM– ის რაოდენობა ძალიან შეზღუდულია, ამ შემთხვევაში მხოლოდ 64 ბაიტი. მასივები, რომელსაც ჩვენ ვიყენებთ სიხშირის/შეფერხების/სიგრძის ყველა მონაცემისთვის, გაცილებით დიდია ვიდრე 64 ბაიტი და, შესაბამისად, შეუძლებელია მათი მეხსიერებაში ჩატვირთვა. სპეციალური PROGMEM avr-gcc დირექტივის გამოყენებით ეს დიდი მონაცემთა მასივები ხელს უშლის მეხსიერებაში ჩატვირთვას, სამაგიეროდ იკითხება ფლეშიდან.

ნაბიჯი 5: მარიომანის გაშვება

ზემოთ მოყვანილი ვიდეო აჩვენებს მარიომანს მოქმედებაში. საშუალო ენერგომოხმარება არის დაახლოებით 25mA, ასე რომ მას შეუძლია დახუჭოს და ხმაური გაუწიოს ლითიუმის მონეტის უჯრედის გაშრობამდე დაახლოებით 10 საათის განმავლობაში. ერთადერთი გზა მისი ჩართვისა და გამორთვისთვის არის მონეტის უჯრედის ბატარეის ამოღება, მასალებში ჩამოთვლილი მყარია კარგად შეეფერება ამას. გადართვა შეიძლება დაემატოს, მაგრამ არის რაღაც სათქმელი მისი სიმარტივის შესანარჩუნებლად.

გირჩევთ: