Innholdsfortegnelse:
- Trinn 1: Definere registeradresser
- Trinn 2: Matriser og globale variabler
- Trinn 3: Funksjonen "serial.begin"
- Trinn 4: Funksjonen "serial.available"
- Trinn 5: Funksjonen "serial.read"
- Trinn 6: Funksjonen "serial.write"
- Trinn 7: Oppsettfunksjonen
- Trinn 8: Loop- og ISR -funksjonene
- Trinn 9: Kabling
- Trinn 10: Sett alt sammen
Video: Arduino tonegenerator uten bibliotek eller serielle funksjoner (med avbrudd): 10 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Dette er ikke noe jeg normalt vil gjøre instruksjoner om, jeg foretrekker metallarbeidet mitt, men siden jeg er elektroteknikkstudent og må ta en klasse på mikrokontrollere (Embedded Systems Design), tenkte jeg at jeg skulle lage en instruks på et av prosjektene mine. Da jeg opprinnelig laget prosjektet og andre for denne klassen, fant jeg ut at det er svært få eller ingen opplæringsprogrammer som ikke bruker arduino -bibliotekets funksjoner eller serielle funksjoner, noe som er en annen grunn til at jeg trodde dette ville være en god instruks.
Denne koden er designet for Atmega 2560 mikrokontroller, så hvis du vil implementere den på et annet bord, må du endre adresseregistrene i koden basert på brukerhåndboken til kontrollerne. Den grunnleggende ideen bak koden er at når du skriver inn en tast på tastaturet i den serielle skjermen, vil arduino mega sende ut en viss frekvens basert på hvilken tast du trykker på, med "q" tilbakestille den. Jeg gjorde det slik at "a" sender ut A flat frekvens og "A" sender A skarp frekvens, "b" sender B flat, "c" for C flat, "C" for C sharp, og så videre. Hele koden lastes opp på slutten, men hvert trinn bryter koden i biter, så det er lettere å forklare.
Trinn 1: Definere registeradresser
Dette trinnet er enkelt, hvis du bruker atmega 2560, trenger du bare å bruke adressene jeg brukte, selv om du bruker et brett med en annen brikke, må du finne adressene for hvert av disse registerene på din chips brukerhåndbok. Definisjonene øverst er bare konstanter som vil bli brukt til funksjonene våre senere. Vi angir adressene som flyktige usignerte fordi vi ikke vil at kompilatoren skal rote med dem.
Trinn 2: Matriser og globale variabler
Her vil vi definere frekvensmatrisen som vil inneholde alle frekvensene som hver nøkkel skal sende ut. Disse verdiene er beregnet ut fra de faktiske notatfrekvensene, og ærlig talt glemte jeg hvordan jeg fikk dem, men de er de riktige verdiene da jeg testet dem på et oscilloskop for å være sikker. Vi definerer også notatmatrisen som inneholder alle tastene som skal trykkes for hver tone, samt variablene vi trenger for våre senere funksjoner.
Trinn 3: Funksjonen "serial.begin"
Vi kaller vår tilpassede funksjon som replikerer funksjonen "serial.begin" for U0init (). Den tar ønsket baudrate som inngang og starter den serielle porten på baudrate.
Trinn 4: Funksjonen "serial.available"
Vi kaller funksjonen som etterligner "serial.available" U0kbhit (). Det tar ikke input, men oppdager i stedet om det er gjort en endring på tastaturet ved hjelp av RDA -statusbiten og returnerer true når en endring oppdages.
Trinn 5: Funksjonen "serial.read"
Vi kaller funksjonen som etterligner "serial.read" -funksjonen U0getchar (), som ikke tar noen input og sender ut hvilken endring som er gjort på tastaturet, som er lagret i UDR0 -registeret.
Trinn 6: Funksjonen "serial.write"
Vi kaller funksjonen som etterligner "serial.write" U0putchar (), som tar dataene fra UDR0 -registeret mens en endring oppdages og lagres, og utganger som endres tilbake til den serielle skjermen.
Trinn 7: Oppsettfunksjonen
Dette er den grunnleggende oppsettfunksjonen som vil bruke vår "serial.begin" -imitasjon for å initialisere serieporten, og vil initialisere bitinnstillingene våre for timeregistrene og sette PB6 til å sende ut tonene våre.
Trinn 8: Loop- og ISR -funksjonene
Sløyfen fungerer slik: Hvis det oppdages en endring med vår "serial.available" -funksjon, lagrer vår "serial.read" -funksjon den endringen, og vår "serial.write" -funksjon setter den endringen i seriell monitor. Så lenge en variabel i er mindre enn størrelsen på frekvensmatrisen, vil den sette utgangen til å være posisjonen til i i den matrisen, og sende frekvensen på den posisjonen. ISR fungerer som tilbakestilling, der hvis frekvensmatriseposisjonen ikke er lik 0 (med andre ord hvis "q" ikke trykkes), vil den sende ut frekvensen, men når "q" trykkes vil den nullstilles. Vær oppmerksom på: denne koden bruker avbrudd, men det kan gjøres med avbrudd deaktivert. Jeg legger ut koden uten avbrudd hvis jeg får noen forespørsler om den, jeg synes bare avbruddsversjonen er morsommere.
Trinn 9: Kabling
Kablingene for denne koden er ekstremt enkle, bare sett en utgangskabel fra PB6 til et brødbrett, koble en summer eller høyttaler i serie med det, og koble den tilbake til bakken. Merk: Hvis du bruker en høyttaler, må du sette en liten motstand foran høyttaleren. Hvis du bare vil se utgangen, men ikke høre den, bare koble PB6 til den røde ledningen til et oscilloskop og den svarte ledningen til bakken.
Trinn 10: Sett alt sammen
Jeg la til hele koden til dette trinnet, siden jeg har forklart alle delene av den i tidligere trinn. Det tar bare et tastaturinngang for forskjellige frekvenser og sender ut denne frekvensen til PB6. Håper du likte å lese en annen måte å kode med IDE!
Vennligst også stem på dette i Microcontroller -konkurransen: D
Anbefalt:
Programmering av en Arduino ved hjelp av en annen Arduino for å vise rulletekst uten bibliotek: 5 trinn
Programmering av en Arduino ved hjelp av en annen Arduino for å vise rulletekst uten bibliotek: Sony Spresense eller Arduino Uno er ikke så dyre og krever ikke mye strøm. Men hvis prosjektet ditt har begrensninger på strøm, plass eller til og med budsjett, kan det være lurt å vurdere å bruke Arduino Pro Mini. I motsetning til Arduino Pro Micro, Arduino Pro Mi
RC5 fjernkontrollprotokolldekoder uten bibliotek: 4 trinn
RC5 fjernkontrollprotokolldekoder uten bibliotek: Før vi dekoder rc5, diskuterer vi først hva som er rc5 -kommando og hva som er strukturen til den. så i utgangspunktet rc5 -kommandoen som brukes i fjernkontroller som brukes på fjernsyn, cd -spillere, d2h, hjemmekinoanlegg etc. har 13 eller 14 biter arrangert i en
STM32CubeMX -knappen avsluttes med avbrudd: 5 trinn
STM32CubeMX Button Debounce With Interrupt: Hei, i denne opplæringen vil jeg prøve å gi min enkle løsning for å forhindre knappestopp som er et veldig alvorlig problem. På internett er det mange videoer som tilbyr løsning på dette problemet, men ikke noen av dem for ekstern avbrudd. I alle disse videoene knappen
Arduino Hall -effektsensor med avbrudd: 4 trinn
Arduino Hall Effect Sensor With Interrupts: Hei alle sammen, I dag skal jeg vise deg hvordan du kan koble en hall effect sensor til en Arduino og bruke den med en interrupt. Verktøy og materialer som brukes i videoen (tilknyttede lenker): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zKHall -effekt sensorer: h
Naviger robot med skosensorer, uten GPS, uten kart: 13 trinn (med bilder)
Naviger i roboten med skosensorer, uten GPS, uten kart: Roboten beveger seg i en forhåndsprogrammert bane og sender (over bluetooth) sin faktiske bevegelsesinformasjon til en telefon for sporing i sanntid. Arduino er forhåndsprogrammert med bane og oblu brukes til å registrere robotens bevegelse. oblu sender bevegelse til