Мазмұны:
- 1 -қадам: Тіркеу мекенжайларын анықтау
- 2 -қадам: Массивтер мен жаһандық айнымалылар
- 3 -қадам: «serial.begin» функциясы
- 4 -қадам: «serial.available» функциясы
- 5 -қадам: «serial.read» функциясы
- 6 -қадам: «serial.write» функциясы
- 7 -қадам: Орнату функциясы
- 8 -қадам: Loop және ISR функциялары
- 9 -қадам: Сымдарды жалғау
- 10 -қадам: Барлығын біріктіру
Бейне: Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзіліссіз): 10 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бұл әдетте мен үйрететін нәрсе емес, мен металмен жұмыс жасағанды жақсы көремін, бірақ мен электротехника мамандығының студенті болғандықтан және микроконтроллерлерден сабақ алуым керек (енгізілген жүйелердің дизайны), мен инструктаж жасаймын деп ойладым. менің жобаларымның бірі. Мен бастапқыда осы сыныпқа арналған жобаны және басқаларды жасаған кезде, мен arduino кітапханасының функцияларын немесе сериялық функцияларды қолданбайтын оқулықтардың өте аз екенін білдім, бұл менің жақсы нұсқаулық болар деп ойлаудың тағы бір себебі.
Бұл код Atmega 2560 микроконтроллеріне арналған, сондықтан егер сіз оны басқа тақтаға енгізгіңіз келсе, контроллерлердің пайдаланушы нұсқаулығының негізінде кодтағы мекенжай регистрлерін өзгертуіңіз қажет. Кодтың негізгі идеясы - пернетақтадағы пернені сериялық мониторға енгізген кезде, arduino mega сіз басқан перне негізінде белгілі бір жиілікті шығарады, оны «q» қалпына келтіреді. Мен «а» A жазықтық жиілігін шығарады, ал «А» - A өткір жиілікті шығарады, «b» - В жазықтығы, «жазық» - «с», «өткір» - «С» және т.б. Толық код соңында жүктеледі, бірақ әр қадам кодты бөліктерге бөледі, сондықтан түсіндіру оңайырақ.
1 -қадам: Тіркеу мекенжайларын анықтау
Бұл қадам оңай, егер сіз atmega 2560 қолдансаңыз, мен қолданған адрестерді пайдалану қажет, бірақ егер сіз басқа чипі бар тақтаны қолдансаңыз, осы регистрлердің әрқайсысының адрестерін өзіңізден табуға болады. чиптердің қолданушы нұсқаулығы. Жоғарғы жағындағы анықтамалар - бұл тұрақтылар, олар кейінірек біздің функцияларымыз үшін қолданылады. Біз мекенжайларды белгісіз деп белгілейміз, себебі біз компилятордың олармен араласуын қаламаймыз.
2 -қадам: Массивтер мен жаһандық айнымалылар
Мұнда біз әр кілт шығаратын барлық жиіліктерді қамтитын жиілік жиынын анықтағымыз келеді. Бұл мәндер нақты нота жиіліктерінен есептеледі, және мен оларды қалай алғанымды ұмытып кеттім, бірақ олар осциллографта тексергенде дұрыс мән. Біз сондай -ақ әр тонға басылатын барлық пернелерді қамтитын ноталар жиынын анықтаймыз, сонымен қатар біздің кейінгі функцияларымыз үшін қажет айнымалылар.
3 -қадам: «serial.begin» функциясы
Біз U0init () «serial.begin» функциясын қайталайтын реттелетін функцияны шақырамыз. Ол кіріс ретінде қажетті жылдамдықты қабылдайды және сол жылдамдықтағы сериялық портты бастайды.
4 -қадам: «serial.available» функциясы
Біз «serial.available» U0kbhit () имитациялайтын функцияны шақырамыз. Ол енгізуді қажет етпейді, керісінше, RDA мәртебелік коды арқылы пернетақтада өзгеріс бар -жоғын анықтайды және өзгеріс анықталған кезде шын мәнін қайтарады.
5 -қадам: «serial.read» функциясы
Біз UDR0 регистрінде сақталатын пернетақтада қандай өзгеріс енгізілмесе де, шығуды қабылдамайтын U0getchar () «serial.read» функциясына еліктейтін функцияны шақырамыз.
6 -қадам: «serial.write» функциясы
Біз «serial.write» U0putchar () имитациялайтын функцияны шақырамыз, ол UDR0 регистрінен деректерді қабылдайды және өзгеріс анықталады және сақталады, ал сериялық мониторға ауысады.
7 -қадам: Орнату функциясы
Бұл сериялық портты инициализациялау үшін біздің «serial.begin» имитациясын қолданатын негізгі баптау функциясы және таймер регистрлері үшін біздің бит параметрлерін инициализациялайды және біздің дыбыстарды шығаратын PB6 орнатады.
8 -қадам: Loop және ISR функциялары
Цикл осылай жұмыс істейді: егер біздің «serial.available» функциясымен өзгеріс анықталса, біздің «serial.read» функциясы бұл өзгерісті сақтайды, ал біздің «serial.write» функциясы бұл өзгерісті сериялық мониторға енгізеді. Егер айнымалы жиілік жиымының өлшемінен кіші болса, ол жиілікті сол позицияда шығаратын i жиымның орнын белгілейді. ISR қалпына келтіру функциясын орындайды, егер жиілік массивінің позициясы 0 -ге тең болмаса (басқаша айтқанда «q» басылмаса), ол жиілікті шығарады, бірақ «q» басылғанда ол қалпына келтіріледі. бұл код үзілістерді қолданады, бірақ оны ажыратылған ажыратулармен жасауға болады. Егер мен оған сұраныс алсам, кодты үзіліссіз жіберемін, үзіліс нұсқасы қызықты деп ойлаймын.
9 -қадам: Сымдарды жалғау
Бұл кодтың сымдары өте қарапайым, PB6 -дан шығатын сымды нан тақтасына салыңыз, дыбыстық сигналды немесе динамикті осымен тізбектей қосыңыз және оны жерге қосыңыз. Ескерту: егер сіз динамикті қолдансаңыз, динамиктің алдына кішкене резистор қойыңыз. Егер сіз жай ғана шығуды көргіңіз келсе, бірақ естімесеңіз, PB6 -ны осциллографтың қызыл сымына, ал қара жерге жерге қосыңыз.
10 -қадам: Барлығын біріктіру
Мен бұл қадамға толық кодты қостым, себебі мен оның барлық бөліктерін алдыңғы қадамдарда түсіндірдім. Ол үшін әр түрлі жиіліктер үшін пернетақта кірісі қажет және PB6 жиілігін шығарады. Сізге IDE арқылы кодтаудың басқа әдісін оқу ұнады деп үміттенемін!
Сонымен қатар, бұл үшін микроконтроллер байқауында дауыс беруіңізді сұраймыз: D
Ұсынылған:
Ауа райына негізделген музыка генераторы (ESP8266 негізіндегі Midi генераторы): 4 қадам (суреттермен)
Ауа -райына негізделген музыкалық генератор (ESP8266 негізіндегі Midi генераторы): Сәлеметсіз бе, мен бүгін ауа -райына негізделген музыкалық генераторды қалай жасау керектігін түсіндіремін, ол ESP8266 негізінде жасалған, ол Arduino сияқты, ол температураға, жаңбырға жауап береді. және жарық қарқындылығы.Ол бүкіл әндер мен аккордтар жасайды деп күтпеңіз
Қарапайым тон генераторы: 7 қадам (суреттермен)
Қарапайым тон генераторы: Arduino Tone Generator - бұл жалпы терминалды GND -мен бөлісетін қосқыштар жиынтығы, ал қалған түйреуіштер 2, 3, 4, 5, 6, 7, 8 және 9 Arduino цифрлық түйреуіштеріне және динамикке қосылады. GND мен Arduino Uno 11 цифрлық пині арасында орнатылған
Тұрақты ток генераторы, конденсаторы немесе аккумуляторы жоқ генераторды өздігінен қоздыру: 5 қадам (суреттермен)
Тұрақты ток генераторы, конденсаторлық банкі немесе аккумуляторсыз альтернативті өздігінен қозғау: Сәлеметсіз бе! 12 вольтты аккумуляторы бар генератор, бірақ оның орнына ол өздігінен қосылады
Arduino Pro Mini қолданатын «Джимикки Каммал» тон генераторы: 5 қадам
Arduino Pro Mini -ді қолданатын «Джимикки Каммал» тон генераторы: Бұл Arduino Pro Mini -ді қолданатын қарапайым тонусты генератор. &Quot; Джимикки Каммал " супер хит әнінің бөлігі. " Велипадинте Пуштакам " фильмінің монотоникалық түрде дамиды. Музыкалық ноталар табиғатта тегіс және айналмалы синусо түрінде кездеседі
Микроконтроллер мата тон генераторы C-кодта: 8 қадам (суреттермен)
Микроконтроллер мата тонының генераторы C-кодта: Өткен жылдың қазан айының соңында carmitsu қолданушысы маған түскі ас қорабының синтезін көргеннен кейін маған хабарлама жіберді. Оның хабарламасынан: Мен бастауыш мектепте музыка пәнінен сабақ беремін. Бізде диктофон музыкасы көп ойнайды. яғни балалар кішкентай флейта ойнайды …… Менде