მე დავწერე პროგრამული მოდული, რომელიც საშუალებას გაძლევთ დაამატოთ მელოდიების ან ბგერების თანმიმდევრობის დაკვრის ფუნქცია AVR მიკროკონტროლერზე თითქმის ნებისმიერ პროექტში.
მოდულის მახასიათებლები:
მარტივი ინტეგრაცია მზა პროექტთან
გამოიყენება მხოლოდ 8-ბიტიანი ტაიმერი t2, ხოლო მისი გამოყენება შესაძლებელია კენჭისყრის ან დროის ინტერვალების ფორმირებისთვის.
მოდული რეგულირდება თითქმის ნებისმიერი საათის გენერატორის სიხშირეზე
ნოტების სიმაღლე მითითებულია როგორც სიმბოლური მუდმივები (C0, A2 და ა.შ.) ან ჰერცში.
ხანგრძლივობა მითითებულია სტანდარტული ფორმით (კვარტლები, მერვედები და ა.შ.) ან მილიწამებში
შესაძლებელია მელოდიის დაკვრის ტემპის და მისი გამეორებების რაოდენობის დაყენება
დაკვრის დროს მელოდიის შეჩერება შესაძლებელია
1. დააკოპირეთ ყველა მოდულის ფაილი (tone.h, sound.h, sound.c) პროექტის საქაღალდეში.
2. შეაერთეთ sound.c ფაილი პროექტთან.
IAR `a-სთვის – დააწკაპუნეთ მაუსის მარჯვენა ღილაკით სამუშაო სივრცის ფანჯარაში და აირჩიეთ დამატება > ფაილების დამატება…
WINAVR-სთვის ეს დაახლოებით იგივეა, მხოლოდ sound.c უნდა დაემატოს მაკიაფილს:
SRC = $(TARGET).c ხმა.გ
3. ჩართეთ სათაურის ფაილი sound.h შესაბამის მოდულში. მაგალითად, ძირითადში.გ
#include "sound.h"
4. დააყენეთ მოდულის პარამეტრები sound.h ფაილში
//თუ კომენტარს გააკეთებთ, შენიშვნების ხანგრძლივობა იქნება
//გამოითვლება მელოდიაში მითითებული BPM-დან
//თუ დარჩა, მაშინ ქვემოთ მითითებული მნიშვნელობიდან
//#define SOUND_BPM 24
//საათის სიხშირე μ
#define SOUND_F_CPU 16U
//მიკროკონტროლერის გამომავალი, რომელზედაც წარმოიქმნება ხმა
#define PORT_SOUND PORTB
#define PINX_SOUND 0
//მითითებული მელოდიების რაოდენობა.
#define SOUND_AMOUNT_MELODY 4
5. დაამატეთ თქვენი მელოდიები sound.c-ს და ჩაწერეთ მელოდიების სახელები მელოდიურ მასივში.
მელოდია არის 16-ბიტიანი რიცხვების მასივი და აქვს შემდეგი სტრუქტურა
BPM (წუთში ნოტები)არის მუდმივი, რომელიც გამოიყენება ნოტების ხანგრძლივობის გამოსათვლელად და განსაზღვრავს მელოდიის დაკვრის სიჩქარეს.
BPM შეიძლება მერყეობდეს 1-დან 24-მდე, რაც შეესაბამება 10 და 240 კვარტალ ნოტს წუთში, შესაბამისად.
თუ ნოტების/ხმების ხანგრძლივობა მითითებულია მილიწამებში, მაშინ მასივში ჩაწერილი BPM უნდა იყოს 1-ის ტოლი.
თუ SOUND_BPM მუდმივი კომენტირებულია სათაურის ფაილში sound.h, მაშინ შენიშვნების ხანგრძლივობა გამოითვლება პროგრამის შესრულებისას მასივში მითითებული BPM-ის მიხედვით. თუ SOUND_BPM კომენტარი არ არის, ნოტების ხანგრძლივობა გამოითვლება კომპილაციის ეტაპზე, ამ მუდმივის მნიშვნელობიდან გამომდინარე, და ყველა მელოდია ითამაშებს იმავე ტემპით. ეს ზღუდავს ფუნქციონირებას, მაგრამ დაზოგავს რამდენიმე ბაიტს კოდს.
გამეორებების რაოდენობა.შეუძლია მიიღოს მნიშვნელობები 1 ... 254 და LOOP (255). LOOP - ნიშნავს, რომ მელოდია გაუთავებლად განმეორდება SOUND_STOP ან SOUND_PAUSE ბრძანების გაცემამდე.
შენიშვნის ხანგრძლივობა– დრო, რომლის დროსაც წარმოიქმნება მოცემული ბგერის ტონი ან შენარჩუნებულია პაუზა. შეიძლება მითითებული იყოს ms-ში, ms(x) მაკროს გამოყენებით, ან როგორც სტანდარტული ნოტების მნიშვნელობები - მერვე ნოტები, მეთექვსმეტე ნოტები და ა.შ. ქვემოთ მოცემულია მხარდაჭერილი ხანგრძლივობების სია. თუ არსებობს გარკვეული ეგზოტიკური ხანგრძლივობის საჭიროება, ყოველთვის შეგიძლიათ დაამატოთ ისინი tone.h ფაილში
n1 - მთელი შენიშვნა
n2 - ნახევარი შენიშვნა
n4 - მეოთხედი
N8 - მერვე
n3 - მერვე სამეული
n16 - მეთექვსმეტე
n6 - სექსტოლი
n32 - ოცდათორმეტი
შენიშვნა მოედანზემითითებულია tone.h ფაილში აღწერილი სიმბოლური მუდმივების გამოყენებით, მაგალითად C2, A1 და ა.შ. ასევე, ნოტების სიმაღლე შეიძლება განისაზღვროს ჰერცში f(x) მაკროს გამოყენებით.
პროგრამას აქვს შეზღუდვები ხმის მინიმალურ და მაქსიმალურ სიხშირეზე!
მელოდიის დასასრულის მარკერი.მასივის ბოლო ელემენტის მნიშვნელობა უნდა იყოს ნული.
მთავარის დასაწყისში, თქვენ უნდა გამოიძახოთ SOUND_Init() ფუნქცია. ეს ფუნქცია ადგენს მიკროკონტროლერის გამომავალ პინს, აკონფიგურირებს ტაიმერს T2 და ახდენს მოდულის ცვლადების ინიციალიზებას.
შემდეგ თქვენ უნდა დააყენოთ შეფერხების ჩართვის დროშა - __enable_interrupt(), რადგან მოდული იყენებს T2 ტაიმერის გადინებას და დამთხვევის შეფერხებებს.
ამის შემდეგ შეგიძლიათ დაიწყოთ მელოდიების დაკვრა.
მაგალითად, ასე:
SOUND_SetSong(2);
SOUND_Com(SOUND_PLAY); //მელოდიის დაკვრა
//დააყენეთ მაჩვენებელი მე-2 მელოდიაზე
//და დაიწყე დაკვრა
SOUND_PlaySong(2);
მელოდიის დაკვრა ნებისმიერ დროს შეიძლება შეწყდეს SOUND_STOP ბრძანების გაცემით.
თქვენ ასევე შეგიძლიათ შეაჩეროთ მელოდია SOUND_PAUSE ბრძანების გამოყენებით. SOUND_PLAY ბრძანების შემდგომი გაცემა განაახლებს მელოდიის დაკვრას იმ წერტილიდან, სადაც ის შეჩერდა.
პრინციპში, ეს ფუნქციონალობა განსაკუთრებით არ არის საჭირო (მე ახლახან შევადგინე) და მოდულთან მუშაობისას საკმარისია SOUND_PlaySong(unsigned char numSong) ფუნქცია;
ხმის მოდულის გამოყენების მაგალითები შეგიძლიათ ჩამოტვირთოთ ქვემოთ მოცემული ბმულებიდან. მე არ დავხატე დიაგრამა, რადგან იქ ყველაფერი მარტივია. დაკავშირებულია PB0-თან, მელოდიების დაწყების ღილაკი დაკავშირებულია პინ PD3-თან. პროექტებში 4 მელოდიაა განსაზღვრული. ღილაკზე დაჭერით ყოველ ჯერზე იწყება ახალი მელოდია. გამოიყენება atmega8535 მიკროკონტროლერი. თავიდან მინდოდა შემეწუხებინა პროექტი ოთხი ღილაკით - PLAY, STOP, PAUSE და NEXT, მაგრამ შემდეგ ვფიქრობდი, რომ ეს ზედმეტი იყო.
PS: მოდულს არ გაუვლია ვრცელი ტესტირება და მოწოდებულია „როგორც არის“. თუ არის რაიმე რაციონალური წინადადება, მოდი დავასრულოთ.
ამ სტატიაში განვიხილავთ ტონების დაკვრას და ვისწავლით მონოფონიური მელოდიის დაკვრას.
პროგრამა აცხადებს ორ მასივს. მასივი შენიშვნებით შენიშვნებიშეიცავს შენიშვნების მარტივ ჩამონათვალს. ეს შენიშვნები ემთხვევა მასივში ხმის ხანგრძლივობას სცემს. მუსიკაში ხანგრძლივობა განისაზღვრება ნოტის გამყოფით მთელ ნოტთან მიმართებაში. მთლიანი შენიშვნის სახით აღებული მნიშვნელობა არის 255
. ამ რიცხვის გაყოფით მიიღება ნახევარები, მეოთხედები, მერვედები.
გთხოვთ გაითვალისწინოთ, რომ პირველი ნოტის ხანგრძლივობა არ მიიღება 255-ის 2-ის ხარისხზე გაყოფით. აქ მოგიწევთ მუსიკის თეორიაზე გადასვლა. ორიგინალური მელოდიის ნოტები შეგიძლიათ ნახოთ. ეს ნოტები გაერთიანებულია სამეულებად. ამ გზით შერწყმისას სამი მერვე ნოტი ჟღერს ისევე, როგორც ერთი მეოთხედი ნოტი. ამიტომ მათი შედარებითი ხანგრძლივობაა 21.
მომხმარებელმა ასევე მკაფიოდ უნდა მიუთითოს შენიშვნების რაოდენობა დირექტივის თანმიმდევრობით:
მთავარ პროგრამაში, უპირველეს ყოვლისა, ხდება სიხშირის მასივების ხელახალი გამოთვლა და ხანგრძლივობა სიგნალების პერიოდებად და შენიშვნების ხანგრძლივობა.
სიგნალის პერიოდებით (მასივი სიგნალის_პერიოდი) ყველაფერი მარტივია. იმისთვის, რომ მიიღოთ პერიოდის ხანგრძლივობა მიკროწამებში, უბრალოდ გაყავით 1,000,000 სიგნალის სიხშირეზე.
ნოტების ხმის აბსოლუტური ხანგრძლივობის გამოსათვლელად აუცილებელია მუსიკალური ნაწარმოების ტემპის მითითება. ეს კეთდება დირექტივით
მუსიკაში ტემპი არის მეოთხედი ნოტების რაოდენობა წუთში. რიგში
# განსაზღვრეთ WHOLE_NOTE_DUR 240000 / TEMPOმთელი ნოტის ხანგრძლივობა გამოითვლება მილიწამებში. ახლა საკმარისია შედარებითი მნიშვნელობების ხელახლა გამოთვლა მასივიდან ფორმულის გამოყენებით სცემსაბსოლუტურ მასივამდე შენიშვნა_ხანგრძლივობა.
მთავარ მარყუჟში, ცვლადი გასული_დროგათამაშებული სიგნალის ყოველი პერიოდის შემდეგ იზრდება ამ პერიოდის ხანგრძლივობით, სანამ არ გადააჭარბებს ნოტის ხანგრძლივობას. ღირს ყურადღება მიაქციოთ ამ ჩანაწერს:
ცვლადი გასული_დრო 32-ბიტიანი და მასივის ელემენტები შენიშვნები_ხანგრძლივობა 16 ბიტიანი. თუ 16-ბიტიანი რიცხვი გამრავლებულია 1000-ზე, მაშინ გადინება გარანტირებულია და ცვლადი გასული_დრონაგავს შეადარებენ. მოდიფიკატორი (uint32_t)გარდაქმნის მასივის ელემენტს ნოტების_ხანგრძლივობა[i] 32-ბიტიან ნომერში არ არის გადინება.
თქვენ შეგიძლიათ ნახოთ სხვა ფუნქცია აუდიო ციკლში. ფუნქციის გამოყენება შეუძლებელი იქნება _ დაგვიანებით_ჩვენ(), ვინაიდან მისი არგუმენტი არ შეიძლება იყოს ცვლადი.
ასეთი შეფერხებების შესაქმნელად გამოიყენეთ ფუნქცია VarDelay_us(). მასში 1 μs დაგვიანებით მარყუჟი გადახვევა განსაზღვრული რაოდენობის ჯერ.
მელოდიის დაკვრისას გამოიყენება კიდევ ორი დაყოვნება. თუ ნოტები შესრულებულია პაუზების გარეშე, ისინი გაერთიანდებიან ერთში. ამისათვის მათ შორის ჩასმულია 1 ms დაყოვნება, რომელიც მითითებულია დირექტივით:
# განსაზღვრეთ NOTES_PAUSE 1მელოდიის დაკვრის ყოველი სრული ციკლის შემდეგ, პროგრამა ჩერდება 1 წამით და კვლავ იწყებს დაკვრას.
შედეგად მივიღეთ კოდი, რომელშიც ადვილია ტემპის შეცვლა, ხანგრძლივობის კორექტირება ან მელოდიის მთლიანად გადაწერა. ამისათვის საკმარისი იქნება მხოლოდ პროგრამის მხოლოდ ნაწილის გარდაქმნა დირექტივებითა და ცვლადი დეკლარაციებით.
მოდული მუშაობს FAT16-ში ფორმატირებული SD ბარათებით, არაუმეტეს 2 GB ტევადობით და აწარმოებს ხმის ფრაგმენტებს .ad4 ან .wav ფორმატებში ნებისმიერი თანმიმდევრობით. მოდულის შიდა სქემები იკვებება ჩაშენებული 3.3 ვ სტაბილიზატორით, რაც ძალიან მოსახერხებელია, რადგან ის საშუალებას აძლევს თავად მოდულს მიეწოდოს ძაბვა 5 ვ. (ამისთვის საჭიროა დახუროთ „5V“ ” ბალიშით შუა ბალიშით მოდულის დაფაზე, პირველად რომ გახსენით შედუღების ჯუმპერი ბალიშით „3.3V“, როგორც ნაჩვენებია სურათზე 2).
მოდულის მართვა შესაძლებელია ხელით ან მიკროკონტროლერის გამოყენებით. "ხელით" რეჟიმში საკმარისია ღილაკების დაკავშირება მოწყობილობასთან ნახაზი 3-ზე წარმოდგენილი სქემის მიხედვით. WTV020 მოდულის ტექნიკურ აღწერილობაში შეგიძლიათ იპოვოთ კავშირის სხვა ვარიანტები, რომლებიც ფუნქციონალურობით დიდად არ განსხვავდება მოდულისგან. შემოთავაზებული დიაგრამა.
დინამიკი უერთდება PWM გამოსავალს ან ჩაშენებულ 16-ბიტიან DAC-ს. ამ უკანასკნელ შემთხვევაში, თქვენ უნდა დააკავშიროთ გარე ოპ-გამაძლიერებელი და გამაძლიერებელი (სურათი 4). PWM არხთან დაკავშირებისას შესაძლებელია დინამიკების დაკავშირება 8 Ohms წინააღმდეგობის და 0.5 W-მდე სიმძლავრით.
WTV020 მოდულის ქინძისთავები ნაჩვენებია ცხრილში 1. ორსადენიანი საკომუნიკაციო ინტერფეისის არხები შეიძლება გამოყენებულ იქნას როგორც ღილაკების დასაკავშირებლად, ასევე გარე მიკროკონტროლერისთვის.
ცხრილი 1. | ||||||||||||||||||||||||||||||||||
|
ვიზუალური შემოწმებისთვის გამოვიყენეთ LCD დისპლეი 2x16 და შესაბამისი კონტროლერი. ზოგადი სქემაპლეერი ნაჩვენებია სურათზე 5. მიკროკონტროლერი და მოდული იკვებება 3.3 ვ ძაბვით, დისპლეი - 4 ვ, ვინაიდან 3.3 ვ არ იყო საკმარისი არჩეული LCD-ისთვის. ძაბვის ეს განსხვავება არანაირად არ მოქმედებს MK-დან მონაცემების მიღებაზე. ავტორმა გადაწყვიტა არ გაეაქტიურებინა WTV020 მოდულის შიდა სტაბილიზატორი.
CLK და DI ხაზები გამოიყენება WTV020 მოდულზე მონაცემების გადასაცემად. მიხედვით ტექნიკური აღწერა(სურათი 6a), 16 ბიტი მონაცემები უნდა გადაიცეს 200 μs სიხშირით, მაგრამ პრაქტიკაში ეს მნიშვნელობა უნდა გაიზარდოს 2 ms-მდე (სურათი 6b).
დოკუმენტაციის საფუძველზე, დენის გამოყენების შემდეგ, რეკომენდებულია უარყოფითი პულსის გამოყენება 5 ms ხანგრძლივობის მოდულის "გადატვირთვის" გამოსავალზე და ბრძანებების გაგზავნა 300 ms-ის შემდეგ. მაგრამ ეს აშკარა შეცდომაა, რადგან WTV020 მოდულის ინიციალიზაციის დრო დაახლოებით 600 ms. თუ თქვენ გაგზავნით ბრძანებებს გადატვირთვის შემდეგ 600 ms-ზე ადრე, მოდული უბრალოდ არ იღებს მათ.
მოდულის მიერ მიღებული ძირითადი ბრძანებების სია წარმოდგენილია ცხრილში 2. ცხრილიდან ჩანს, რომ დაკვრადი აუდიო ფაილების მაქსიმალური რაოდენობაა 512, მაგრამ ავტორი შემოიფარგლა ოცდაათამდე. ხმის რეგულირება შესაძლებელია 7 დიაპაზონში. პრაქტიკაში, ხმის დამახინჯება შეინიშნება FFF0-დან FFF3-მდე მისამართებიდან, როგორც PWM გამომავალიდან, ასევე DAC-დან. FFFE (დაკვრა/პაუზა) და FFFF (Stop/Play) ბრძანებები გამომწვევია.
ჩართულია LCD ეკრანიდასაკრავი ფაილის რაოდენობა და მოცულობა ნაჩვენებია 7 შევსებული მართკუთხედის მასშტაბის სახით. ფოტო დასრულებული მოწყობილობანაჩვენებია სურათზე 8.
დემო ვიდეო:
MK პროგრამული უზრუნველყოფა, ვირტუალური მოდელი Proteus და აუდიო ფაილი .ad4 ფორმატში -
აუდიო ჩანაწერების .ad4 ფორმატში გადაყვანის პროგრამა -
გაკვეთილის გაგრძელებას დიდი დრო დასჭირდა, რაც გასაგებია მეხსიერების ბარათებთან და FAT ფაილურ სისტემასთან მუშაობის დაუფლება. მაგრამ მაინც მოხდა, გაკვეთილი მზად არის - ფაქტობრივად, საახალწლო სასწაული.
იმისათვის, რომ სტატია არ გადატვირთოს ინფორმაცია, მე არ აღვწერ wav ფაილის ფორმატის სტრუქტურას, საძიებო სისტემებში საკმარისზე მეტი ინფორმაციაა. საკმარისია ითქვას, რომ თუ ფაილს ხსნით რაიმე სახის Hex რედაქტორით, მაშინ პირველი 44 ბაიტი შეიცავს ყველა ინფორმაციას ფაილის ტიპის, შერჩევის სიჩქარის, არხების რაოდენობის შესახებ და ა.შ. თუ ფაილის ანალიზი გჭირდებათ, წაიკითხეთ ეს. სათაური და ბედნიერი იქნები.
დატვირთვის მონაცემები იწყება 44 ბაიტიდან, არსებითად შეიცავს ძაბვის დონეებს, რომლებიც ქმნიან ხმას. ძაბვის დონეებზე უკვე ვისაუბრეთ გაკვეთილის ბოლო ნაწილში. ამრიგად, ყველაფერი მარტივია, თქვენ უნდა მიაწოდოთ ეს ნაბიჯები სპიკერზე ფაილის შერჩევის სიხშირით.
როგორ უნდა აიძულოთ დინამიკი ფიზიკურად შეირყა? თქვენ უნდა გამოიყვანოთ ეს ძაბვის დონეები PWM გამოყენებით, ან გამოიყენოთ R2R. ნებისმიერ შემთხვევაში, მისი გამოყენება ძალიან მარტივია, წაიკითხეთ ნომერი, ჩადეთ იგი OCR-ში ან PORTx-ში. შემდეგ, გარკვეული დროის შემდეგ, მე შევცვალე შემდეგი მნიშვნელობა და ასე გავაგრძელე ფაილის ბოლომდე.
მაგალითად, გარკვეული wav ფაილი, მონაცემები მოდის ბაიტიდან 44=0x2C, იქ იწერება რიცხვი 0x80, ვაწარმოებთ ხმას, მაგალითად, პირველი ტაიმერის PWM-ით, ჩაწერეთ OCR1A=0x80; ვთქვათ, ნიმუშის აღების სიხშირე არის 8 kHz, ამიტომ შეფერხება უნდა დაყენდეს იმავე სიხშირეზე. შეფერხებისას, ჩაანაცვლეთ შემდეგი მნიშვნელობა 0x85 1/8000 = 125 μs-ის შემდეგ.
როგორ დავაყენოთ შეფერხება 8 kHz-ზე? გავიხსენოთ, რომ თუ ტაიმერი მუშაობს 250 კჰც სიხშირეზე, მაშინ შეფერხების შედარების რეგისტრი უნდა შეიცვალოს (250/8)-1=31-1 ან 0x1E. PWM-ით, ყველაფერი ასევე მარტივია, რაც უფრო მაღალია ის, რომლითაც ის მუშაობს, მით უკეთესი.
იმისთვის, რომ პროგრამული უზრუნველყოფა იმუშაოს, ჩვენ შევთანხმდებით, რომ ფლეშ დრაივი დაფორმატებულია FAT32-ში, PetitFat lib-ის გამოყენებით 23.2 გაკვეთილიდან. ფაილი არის wav ფორმატში, ან 8kHz ან 22.050kHz, მონო. ფაილის სახელი 1.wav. მოდით გავაანალიზოთ firmware.
#შეიცავს |
//შემდეგ ვკითხულობთ ინფორმაციას ფლეშ დრაივიდან ბუფერის პირველ ნახევარში
შესამოწმებლად, ჩვენ ვუერთებთ დინამიკს OCR1A პინს 100uF კონდენსატორის საშუალებით, „+“ მიკროკონტროლერის პინთან, „-“ დინამიკთან. "-" დინამიკი მიწასთან, "+" კონდენსატორთან.
არ ელოდოთ ხმამაღალ სიგნალს გამომავალზე, თქვენ გჭირდებათ გამაძლიერებელი ხმამაღლა ჟღერადობისთვის. ეს აშკარად ჩანს ვიდეოში. გამოცდისთვის მამლი დავტვირთე 8 კჰც სიხშირით და ტრეკი 22 კჰც.
მსურველებს შეუძლიათ უსაფრთხოდ გაზარდონ ტაიმერის სიხშირე 44 kHz ფაილების დასაკრავად, ექსპერიმენტები აჩვენებს, რომ საკმაოდ კარგი ხმის ხარისხია შესაძლებელი. ვიდეოში ხმა სუსტია და ხარისხიც ცუდი, მაგრამ სინამდვილეში ეს იმის გამოა, რომ კამერით გადავიღე.
მე ასევე ვაქვეყნებ მასალებს, რომლებიც მოწოდებულია Apparatchik-ის მიერ - GCC-ის წყაროს კოდი, საიდანაც დაიწერა CAVR-ის firmware.
და ვიდეო 44kHz დაკვრით.
ვისარგებლებ შემთხვევით და ყველას გილოცავთ ახალ წელს, ვისურვებ, რომ ყველა firmware და მოწყობილობა მუშაობდეს თქვენთვის :)
wav player პროექტი Atmega8-ზე
მეორე დღეს ვიჯექი და ვფიქრობდი, რისი დამატება შემეძლო ჩემს სკუტერს: არის მუსიკა, არის განათება, მაგრამ რაღაც მაკლია და მერე გამახსენდა სიგნალიზაცია, აუცილებლად! ბოლოს და ბოლოს, ეს არის ზუსტად ის, რაც მე არ მაქვს! მე გთავაზობთ, რომ თქვენ ასევე მოაწყოთ სიგნალიზაცია თქვენი ორბორბლისთვის - მაგალითად, ველოსიპედი, ან შესაძლოა ოთხბორბლიანი მეგობარი. განგაშის სისტემა აწყობილია AVR ATmega8 მიკროკონტროლერზე, პროექტი ასევე მეორდება Attiny2313 მიკროკონტროლერზე. Atmega8 მიკროსქემის ვარიანტებისთვის მე დავწერე პროგრამული უზრუნველყოფის სამი ვერსია, ერთი პროგრამული უზრუნველყოფა იმეორებს ხმას, რომელიც მოგვაგონებს მანქანის სიგნალიზაციას, ხოლო მეორე მსგავსია უსაფრთხოების განგაშის სირენის, რომელიც მდებარეობს შენობაში (უფრო სწრაფი და მკვეთრი მელოდია). ყველა ფირმვერი ხელმოწერილია და განთავსებულია ქვემოთ მოცემულ არქივში, ვფიქრობ, მათ გაიგებთ. გარდა ამისა, არქივი შეიცავს პროტეუსში სქემების სიმულაციას, ასე რომ თქვენ შეგიძლიათ მოუსმინოთ ხმებს და აირჩიოთ ის ვარიანტი, რომელიც მოგწონთ საუკეთესოდ.
სქემა Atmega8-ზე:
როგორც ხედავთ, არაფერი განსაკუთრებული, მიკროკონტროლერი, სამი რეზისტორი და ორი LED დინამიკით. დიაგრამაში ღილაკის ნაცვლად, შეგიძლიათ გამოიყენოთ, მაგალითად, ლერწმის შეცვლა ან სხვა კონტაქტი. წრე მუშაობს შემდეგნაირად: დენის ჩართვის შემთხვევაში LED D3 ანათებს (ან ციმციმებს, მიკროსქემის ვერსიიდან გამომდინარე), თუ სენსორს არ შეეხება, სირენა ჩუმდება. სენსორის ამოქმედებისთანავე გაისმა განგაში და ამავდროულად ციმციმებს LED D2. პირადად მე ტრანზისტორის გადამრთველის საშუალებით დავაკავშირე პინი 24 PC1 რელეზე, რელე კი სკუტერის წინა ფარასთან სერიით, რომ განგაშის ატეხვისას სკუტერის ფარი მოციმციმეს. სირენის გასაჩერებლად, თქვენ უნდა გამორთოთ და ჩართოთ წრე ან დააჭიროთ ღილაკს ხელახლა. მინდა აღვნიშნო, რომ კონტროლერიდან სიგნალი შეიძლება გაძლიერდეს რამდენიმე ტრანზისტორით მცირე გამაძლიერებლის შეკრებით - რაც ძირითადად გავაკეთე, თუმცა დიაგრამაზე არ გამოვხატე ეს წრე. მიკროკონტროლერი მუშაობს შიდა 8 მეგაჰერციანი ოსცილატორიდან, შესაბამისად ვაყენებთ ფუჟერებს.
PCB Atmega8-ისთვის ასე გამოიყურება:
ჩართვა Attiny2313-ზე დიდად არ განსხვავდება პირველი ვარიანტისგან, უბრალოდ აქვს სხვადასხვა გამომავალი პორტები.
სქემა Attiny2313-ზე:
მიკროსქემის ამ ვერსიისთვის, მე დავწერე მხოლოდ ერთი პროგრამული უზრუნველყოფა, ერთი სიგნალის ვარიანტით, ყოველი შემთხვევისთვის, ავაწყე წრე დამაგრებული ინსტალაციის გამოყენებით და შევამოწმე მისი ფუნქციონირება. მიკროკონტროლერი მუშაობს შიდა 4 MHz ოსცილატორიდან (შეიძლება ციმციმება 1 MHz-მდე), პროგრამირების დროს საკრავები დაყენებულია შემდეგზე:
ვინაიდან ხელთ არ მქონდა ცოცხალი Atmega8 კონტროლერი, ავაწყე წრე Attiny2313-ზე, წრე მაშინვე იმუშავა, ჩართვა ავაწყე ზედაპირზე დამონტაჟებული ინსტალაციის გამოყენებით, ქვემოთ მოცემულია ფოტო:
ისე, აქ არის მიკროსქემის მუშაობის ვიდეო, ვიდეო ნამდვილად არ არის საუკეთესო ხარისხის და თქვენ ვერ ხედავთ მასზე მოციმციმე LED-ს, რადგან კადრების სიხშირე დაბალია.
ჩამოტვირთვა პროექტები შეგიძლიათ იხილოთ ქვემოთ მოცემულ პროგრამულ უზრუნველყოფაში და PCB ფაილებში
აღნიშვნა | ტიპი | დასახელება | რაოდენობა | შენიშვნა | მაღაზია | ჩემი ბლოკნოტი | |
---|---|---|---|---|---|---|---|
U1 | MK AVR 8 ბიტიანი | ATmega8-16PU | 1 | რვეულში | |||
R1 | რეზისტორი | 47 Ohm | 1 | რვეულში | |||
R2, R3 | რეზისტორი | 270 Ohm | 2 | რვეულში | |||
სქემა Attiny2313-ზე | |||||||
U1 | MK AVR 8 ბიტიანი |