INHOUDSOPGAWE:
- Stap 1: Definieer registeradresse
- Stap 2: Skikkings en globale veranderlikes
- Stap 3: Die funksie "serial.begin"
- Stap 4: Die funksie "serial.available"
- Stap 5: Die funksie "serial.read"
- Stap 6: Die funksie "serial.write"
- Stap 7: Die opstelfunksie
- Stap 8: Die lus- en ISR -funksies
- Stap 9: Bedrading
- Stap 10: Alles saamvoeg
Video: Arduino -toonopwekker sonder biblioteek of seriefunksies (met onderbrekings): 10 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Dit is nie iets waaroor ek normaalweg 'n instruksie kan gee nie, maar ek verkies my metaalwerk, maar aangesien ek 'n elektriese ingenieurstudent is en 'n klas oor mikrobeheerders (Embedded Systems Design) moet volg, het ek gedink ek sou 'n instruksie maak een van my projekte. Toe ek oorspronklik die projek en ander vir hierdie klas gemaak het, het ek gevind dat daar baie min of geen tutoriale is wat nie die arduino -biblioteekfunksies of reeksfunksies gebruik nie, en dit is nog 'n rede waarom ek gedink het dat dit 'n goeie instruksie sou wees.
Hierdie kode is ontwerp vir die Atmega 2560 -mikrobeheerder, dus as u dit op 'n ander bord wil implementeer, moet u die adresregisters in die kode verander volgens die gebruikershandleiding van u beheerders. Die basiese idee agter die kode is dat elke keer as u 'n sleutel op die sleutelbord in die seriële monitor invoer, die arduino mega 'n sekere frekwensie sal lewer, gebaseer op die toets wat u druk, met 'q'. Ek het dit so gemaak dat "a" die A -plat frekwensie sal uitvoer en "A" die A skerp frekwensie, "b" B flat, "c" vir C flat, "C" vir C skerp, ensovoorts. Die volledige kode word aan die einde opgelaai, maar elke stap verdeel die kode in stukke, sodat dit makliker is om te verduidelik.
Stap 1: Definieer registeradresse
Hierdie stap is maklik; as u die atmega 2560 gebruik, hoef u net die adresse te gebruik wat ek gebruik het, maar as u 'n bord met 'n ander chip gebruik, moet u die adresse vir elk van hierdie registers op u chips se gebruikershandleiding. Die definisies bo -aan is slegs konstantes wat later vir ons funksies gebruik sal word. Ons spesifiseer die adresse as onbestendig sonder teken, omdat ons nie wil hê dat die samesteller daarmee moet mors nie.
Stap 2: Skikkings en globale veranderlikes
Hier wil ons die frekwensie -skikking definieer wat al die frekwensies bevat wat elke sleutel moet uitvoer. Hierdie waardes word bereken uit die werklike nootfrekwensies, en ek het eerlikwaar vergeet hoe ek dit gekry het, maar dit is die regte waardes terwyl ek dit op 'n ossilloskoop getoets het om seker te maak. Ons definieer ook die note -reeks wat al die sleutels bevat om vir elke toon te druk, sowel as die veranderlikes wat ons benodig vir ons latere funksies.
Stap 3: Die funksie "serial.begin"
Ons noem ons persoonlike funksie wat die funksie "serial.begin" herhaal U0init (). Dit neem die gewenste baudrate as invoer en begin die seriële poort by die baudrate.
Stap 4: Die funksie "serial.available"
Ons noem die funksie wat 'seriële.beskikbaar' naboots, U0kbhit (). Dit neem nie insette nie, maar ontdek in plaas daarvan of daar 'n verandering op die sleutelbord aangebring is met behulp van die RDA -statusbit en word waar as 'n verandering opgespoor word.
Stap 5: Die funksie "serial.read"
Ons noem die funksie wat die funksie "serial.read" naboots, U0getchar (), wat geen invoer en uitsette neem nie, ongeag die verandering op die sleutelbord wat in die UDR0 -register gestoor word.
Stap 6: Die funksie "serial.write"
Ons noem die funksie wat 'serial.write' naboots U0putchar (), wat die data uit die UDR0 -register neem terwyl 'n verandering opgespoor en gestoor word, en uitsette wat na die seriële monitor terugkeer.
Stap 7: Die opstelfunksie
Dit is die basiese opstelfunksie wat ons 'serial.begin' nabootsing sal gebruik om die seriële poort te initialiseer, en ons bit -instellings vir die timerregisters sal initialiseer en PB6 sal instel om ons kleure uit te voer.
Stap 8: Die lus- en ISR -funksies
Die lus funksioneer so: as 'n verandering met ons funksie "serial.available" opgespoor word, stoor ons "serial.read" -funksie die verandering, en ons "serial.write" -funksie plaas die verandering in die seriële monitor. Solank 'n veranderlike i kleiner is as die grootte van die frekwensie -skikking, stel dit die uitset op die posisie van i in die skikking, en gee die frekwensie op daardie posisie uit. Die ISR funksioneer as die reset, waar as die frekwensie skikking posisie nie gelyk is aan 0 nie (met ander woorde as "q" nie ingedruk word nie), sal dit die frekwensie uitvoer, maar as "q" ingedruk word, sal dit herstel word. hierdie kode gebruik onderbrekings, maar dit kan gedoen word as onderbrekings gedeaktiveer is. Ek sal die kode sonder onderbrekings plaas as ek versoeke daarvoor kry, ek dink net die onderbrekingsweergawe is lekkerder.
Stap 9: Bedrading
Die bedrading vir hierdie kode is uiters maklik. Plaas eenvoudig 'n uitsetdraad van PB6 na 'n broodbord, koppel 'n gonser of luidspreker in serie daarmee en koppel dit weer aan die grond. Let wel: as u 'n luidspreker gebruik, plaas 'n klein weerstand voor die luidspreker. As u net die uitset wil sien, maar dit nie wil hoor nie, moet u slegs PB6 aan die rooi leiding van 'n ossilloskoop koppel en die swart aan die grond.
Stap 10: Alles saamvoeg
Ek het die volledige kode by hierdie stap gevoeg, aangesien ek al die dele daarvan in die vorige stappe verduidelik het. Dit neem net 'n sleutelbordinvoer vir verskillende frekwensies en voer die frekwensie uit na PB6. Hoop u het dit geniet om 'n ander manier te lees om met die IDE te kodeer!
Stem ook hiervoor in die Microcontroller -wedstryd: D
Aanbeveel:
N Arduino programmeer met 'n ander Arduino om 'n rolteks sonder 'n biblioteek te vertoon: 5 stappe
N Arduino programmeer deur 'n ander Arduino te gebruik om 'n roltekst sonder 'n biblioteek te vertoon: Sony Spresense of Arduino Uno is nie so duur nie en benodig nie veel krag nie. As u projek egter beperkte krag, ruimte of selfs begroting het, wil u dit oorweeg om Arduino Pro Mini te gebruik. Anders as Arduino Pro Micro, is Arduino Pro Mi
RC5 afstandsbediening -protokol -dekodeerder sonder biblioteek: 4 stappe
RC5 afstandsbediening -protokol -dekodeerder sonder biblioteek: voordat ons rc5 dekodeer, bespreek ons eers wat rc5 -opdrag is en wat die struktuur daarvan is. dus basies rc5 -opdrag wat gebruik word in afstandsbedienings wat gebruik word in televisies, cd -spelers, d2h, huisteaterstelsels, ens., Dit bevat 13 of 14 bisse in 'n
Arduino Hall -effek sensor met onderbrekings: 4 stappe
Arduino Hall -effek sensor met onderbrekings: Hallo almal, vandag sal ek u wys hoe u 'n saal effek sensor aan 'n Arduino kan koppel en dit met 'n interrupt kan gebruik. : //s.click.aliexpress.com/e/biNyW0zKHall -effek sensors: h
Navigeer deur robot met skoonsensors, sonder GPS, sonder kaart: 13 stappe (met foto's)
Navigeer deur die robot met skoonsensors, sonder GPS, sonder kaart: die robot beweeg op 'n vooraf geprogrammeerde pad en stuur (oor bluetooth) sy werklike bewegingsinligting na 'n telefoon vir intydse opsporing. Arduino is vooraf geprogrammeer met pad en oblu word gebruik vir die waarneming van die beweging van die robot. oblu stuur beweging na
Die klein suurlemoenbattery en ander ontwerpe vir elektrisiteit sonder koste en ledlig sonder batterye: 18 stappe (met foto's)
Die klein suurlemoenbattery en ander ontwerpe vir elektrisiteit sonder koste en ledlig sonder batterye: Hallo, u weet waarskynlik reeds van suurlemoenbatterye of bio-batterye. Hulle word normaalweg vir opvoedkundige doeleindes gebruik, en hulle gebruik elektrochemiese reaksies wat lae spannings genereer, gewoonlik in die vorm van 'n gloeilamp of gloeilamp. Hierdie