Мазмұны:

Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзіліссіз): 10 қадам
Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзіліссіз): 10 қадам

Бейне: Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзіліссіз): 10 қадам

Бейне: Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзіліссіз): 10 қадам
Бейне: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Қараша
Anonim
Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзілістермен)
Кітапханасы жоқ немесе сериялық функциялары жоқ Arduino тон генераторы (үзілістермен)

Бұл әдетте мен үйрететін нәрсе емес, мен металмен жұмыс жасағанды жақсы көремін, бірақ мен электротехника мамандығының студенті болғандықтан және микроконтроллерлерден сабақ алуым керек (енгізілген жүйелердің дизайны), мен инструктаж жасаймын деп ойладым. менің жобаларымның бірі. Мен бастапқыда осы сыныпқа арналған жобаны және басқаларды жасаған кезде, мен arduino кітапханасының функцияларын немесе сериялық функцияларды қолданбайтын оқулықтардың өте аз екенін білдім, бұл менің жақсы нұсқаулық болар деп ойлаудың тағы бір себебі.

Бұл код Atmega 2560 микроконтроллеріне арналған, сондықтан егер сіз оны басқа тақтаға енгізгіңіз келсе, контроллерлердің пайдаланушы нұсқаулығының негізінде кодтағы мекенжай регистрлерін өзгертуіңіз қажет. Кодтың негізгі идеясы - пернетақтадағы пернені сериялық мониторға енгізген кезде, arduino mega сіз басқан перне негізінде белгілі бір жиілікті шығарады, оны «q» қалпына келтіреді. Мен «а» A жазықтық жиілігін шығарады, ал «А» - A өткір жиілікті шығарады, «b» - В жазықтығы, «жазық» - «с», «өткір» - «С» және т.б. Толық код соңында жүктеледі, бірақ әр қадам кодты бөліктерге бөледі, сондықтан түсіндіру оңайырақ.

1 -қадам: Тіркеу мекенжайларын анықтау

Регистр адрестерін анықтау
Регистр адрестерін анықтау

Бұл қадам оңай, егер сіз atmega 2560 қолдансаңыз, мен қолданған адрестерді пайдалану қажет, бірақ егер сіз басқа чипі бар тақтаны қолдансаңыз, осы регистрлердің әрқайсысының адрестерін өзіңізден табуға болады. чиптердің қолданушы нұсқаулығы. Жоғарғы жағындағы анықтамалар - бұл тұрақтылар, олар кейінірек біздің функцияларымыз үшін қолданылады. Біз мекенжайларды белгісіз деп белгілейміз, себебі біз компилятордың олармен араласуын қаламаймыз.

2 -қадам: Массивтер мен жаһандық айнымалылар

Массивтер мен жаһандық айнымалылар
Массивтер мен жаһандық айнымалылар
Массивтер мен жаһандық айнымалылар
Массивтер мен жаһандық айнымалылар
Массивтер мен жаһандық айнымалылар
Массивтер мен жаһандық айнымалылар

Мұнда біз әр кілт шығаратын барлық жиіліктерді қамтитын жиілік жиынын анықтағымыз келеді. Бұл мәндер нақты нота жиіліктерінен есептеледі, және мен оларды қалай алғанымды ұмытып кеттім, бірақ олар осциллографта тексергенде дұрыс мән. Біз сондай -ақ әр тонға басылатын барлық пернелерді қамтитын ноталар жиынын анықтаймыз, сонымен қатар біздің кейінгі функцияларымыз үшін қажет айнымалылар.

3 -қадам: «serial.begin» функциясы

The
The

Біз U0init () «serial.begin» функциясын қайталайтын реттелетін функцияны шақырамыз. Ол кіріс ретінде қажетті жылдамдықты қабылдайды және сол жылдамдықтағы сериялық портты бастайды.

4 -қадам: «serial.available» функциясы

The
The

Біз «serial.available» U0kbhit () имитациялайтын функцияны шақырамыз. Ол енгізуді қажет етпейді, керісінше, RDA мәртебелік коды арқылы пернетақтада өзгеріс бар -жоғын анықтайды және өзгеріс анықталған кезде шын мәнін қайтарады.

5 -қадам: «serial.read» функциясы

The
The

Біз UDR0 регистрінде сақталатын пернетақтада қандай өзгеріс енгізілмесе де, шығуды қабылдамайтын U0getchar () «serial.read» функциясына еліктейтін функцияны шақырамыз.

6 -қадам: «serial.write» функциясы

The
The

Біз «serial.write» U0putchar () имитациялайтын функцияны шақырамыз, ол UDR0 регистрінен деректерді қабылдайды және өзгеріс анықталады және сақталады, ал сериялық мониторға ауысады.

7 -қадам: Орнату функциясы

Орнату функциясы
Орнату функциясы

Бұл сериялық портты инициализациялау үшін біздің «serial.begin» имитациясын қолданатын негізгі баптау функциясы және таймер регистрлері үшін біздің бит параметрлерін инициализациялайды және біздің дыбыстарды шығаратын PB6 орнатады.

8 -қадам: Loop және ISR функциялары

Цикл мен ISR функциялары
Цикл мен ISR функциялары

Цикл осылай жұмыс істейді: егер біздің «serial.available» функциясымен өзгеріс анықталса, біздің «serial.read» функциясы бұл өзгерісті сақтайды, ал біздің «serial.write» функциясы бұл өзгерісті сериялық мониторға енгізеді. Егер айнымалы жиілік жиымының өлшемінен кіші болса, ол жиілікті сол позицияда шығаратын i жиымның орнын белгілейді. ISR қалпына келтіру функциясын орындайды, егер жиілік массивінің позициясы 0 -ге тең болмаса (басқаша айтқанда «q» басылмаса), ол жиілікті шығарады, бірақ «q» басылғанда ол қалпына келтіріледі. бұл код үзілістерді қолданады, бірақ оны ажыратылған ажыратулармен жасауға болады. Егер мен оған сұраныс алсам, кодты үзіліссіз жіберемін, үзіліс нұсқасы қызықты деп ойлаймын.

9 -қадам: Сымдарды жалғау

Сымдар
Сымдар

Бұл кодтың сымдары өте қарапайым, PB6 -дан шығатын сымды нан тақтасына салыңыз, дыбыстық сигналды немесе динамикті осымен тізбектей қосыңыз және оны жерге қосыңыз. Ескерту: егер сіз динамикті қолдансаңыз, динамиктің алдына кішкене резистор қойыңыз. Егер сіз жай ғана шығуды көргіңіз келсе, бірақ естімесеңіз, PB6 -ны осциллографтың қызыл сымына, ал қара жерге жерге қосыңыз.

10 -қадам: Барлығын біріктіру

Мен бұл қадамға толық кодты қостым, себебі мен оның барлық бөліктерін алдыңғы қадамдарда түсіндірдім. Ол үшін әр түрлі жиіліктер үшін пернетақта кірісі қажет және PB6 жиілігін шығарады. Сізге IDE арқылы кодтаудың басқа әдісін оқу ұнады деп үміттенемін!

Сонымен қатар, бұл үшін микроконтроллер байқауында дауыс беруіңізді сұраймыз: D

Ұсынылған: