Indholdsfortegnelse:
- Trin 1: Definition af registeradresser
- Trin 2: Arrays og globale variabler
- Trin 3: Funktionen "serial.begin"
- Trin 4: Funktionen "serial.available"
- Trin 5: Funktionen "serial.read"
- Trin 6: Funktionen "serial.write"
- Trin 7: Opsætningsfunktionen
- Trin 8: Loop- og ISR -funktionerne
- Trin 9: Ledningsføring
- Trin 10: Sæt det hele sammen
Video: Arduino -tonegenerator uden bibliotek eller serielle funktioner (med afbrydelser): 10 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette er ikke noget, jeg normalt ville lave en instruktion om, jeg foretrækker mit metalarbejde, men da jeg er el -ingeniørstuderende og skal tage en klasse om mikrokontrollere (Embedded Systems Design), tænkte jeg, at jeg ville lave en instruerbar om et af mine projekter. Da jeg oprindeligt lavede projektet og andre til denne klasse, fandt jeg ud af, at der er meget få eller ingen selvstudier, der ikke bruger arduino -bibliotekets funktioner eller serielle funktioner, hvilket er en anden grund til, at jeg troede, at dette ville være en god instruerbar.
Denne kode er designet til Atmega 2560 mikrokontroller, så hvis du vil implementere den på et andet bord, skal du ændre adresseregistrene i koden baseret på din controllers brugermanual. Den grundlæggende idé bag koden er, at når du indtaster en tast på tastaturet i den serielle skærm, vil arduino mega udsende en bestemt frekvens baseret på hvilken tast du trykker på, med "q" nulstiller den. Jeg gjorde det sådan, at "a" udsender A -fladfrekvensen, og "A" udsender A -skarp frekvens, "b" udsender B -flad, "c" for C -flad, "C" for C -skarp osv. Den fulde kode uploades i slutningen, men hvert trin vil opdele koden i stykker, så det er lettere at forklare.
Trin 1: Definition af registeradresser
Dette trin er let, hvis du bruger atmega 2560, skal du bare bruge de adresser, jeg brugte, selvom hvis du bruger et bræt med en anden chip, skal du finde adresserne til hvert af disse registre på din chips 'brugermanual. Definitionerne øverst er bare konstanter, der senere vil blive brugt til vores funktioner. Vi angiver adresserne som flygtige usignerede, fordi vi ikke ønsker, at kompilatoren skal rode med dem.
Trin 2: Arrays og globale variabler
Her vil vi definere frekvensmatrixet, som vil indeholde alle de frekvenser, som hver nøgle skal udsende. Disse værdier beregnes ud fra de faktiske notefrekvenser, og ærligt talt glemte jeg, hvordan jeg fik dem, men de er de rigtige værdier, da jeg testede dem på et oscilloskop for at sikre mig. Vi definerer også notearrayet, der indeholder alle de taster, der skal trykkes på for hver tone, samt de variabler, vi skal bruge til vores senere funktioner.
Trin 3: Funktionen "serial.begin"
Vi kalder vores brugerdefinerede funktion, der replikerer funktionen "serial.begin" U0init (). Den tager den ønskede baudrate som input og starter den serielle port ved denne baudrate.
Trin 4: Funktionen "serial.available"
Vi kalder den funktion, der efterligner "serial.available" U0kbhit (). Det tager ikke input, men registrerer i stedet, om der er foretaget en ændring på tastaturet ved hjælp af RDA -statusbit og returnerer sandt, når en ændring opdages.
Trin 5: Funktionen "serial.read"
Vi kalder den funktion, der efterligner "serial.read" -funktionen U0getchar (), som ikke tager input og udsender den ændring, der foretages på tastaturet, som er gemt i UDR0 -registret.
Trin 6: Funktionen "serial.write"
Vi kalder den funktion, der efterligner "serial.write" U0putchar (), som tager dataene fra UDR0 -registret, mens en ændring registreres og gemmes, og output, der ændres tilbage til den serielle skærm.
Trin 7: Opsætningsfunktionen
Dette er den grundlæggende opsætningsfunktion, der vil bruge vores "serial.begin" -imitation til at initialisere den serielle port og vil initialisere vores bitindstillinger for timeregistrene og indstille PB6 til at udsende vores toner.
Trin 8: Loop- og ISR -funktionerne
Sløjfen fungerer som sådan: Hvis der registreres en ændring med vores "seriel.tilgængelig" -funktion, gemmer vores "seriel. Læs" -funktion den ændring, og vores "seriel.skrive" -funktion sætter denne ændring i den serielle skærm. Så længe en variabel i er mindre end størrelsen på frekvensarrayet, vil den indstille outputtet til at være positionen for i i det array og udsende frekvensen på den position. ISR fungerer som nulstilling, hvor hvis frekvensmatrixpositionen ikke er 0 (med andre ord, hvis der ikke trykkes på "q"), udsender den frekvensen, men når der trykkes på "q", nulstilles den. Bemærk: denne kode bruger afbrydelser, men det kan gøres med afbrydelser deaktiveret. Jeg sender koden uden afbrydelser, hvis jeg får anmodninger om den, jeg synes bare, at afbrydelsesversionen er sjovere.
Trin 9: Ledningsføring
Kabelføringen til denne kode er ekstremt let. Du skal blot sætte en outputledning fra PB6 til et brødbræt, tilslutte en summer eller højttaler i serie med det, og slut den tilbage til jorden. Bemærk: Hvis du bruger en højttaler, skal du sætte en lille modstand i før højttaleren. Hvis du bare vil se output, men ikke høre det, skal du bare tilslutte PB6 til et oscilloskops røde ledning og det sorte kabel til jorden.
Trin 10: Sæt det hele sammen
Jeg tilføjede den fulde kode til dette trin, da jeg har forklaret alle delene af det i tidligere trin. Det tager bare et tastaturindgang til forskellige frekvenser og udsender denne frekvens til PB6. Håber du nød at læse en anden måde at kode med IDE på!
Stem også for dette i Microcontroller -konkurrencen: D
Anbefalede:
DIY håndfri desinfektionsdispenser uden kontakt uden en Arduino eller en mikrokontroller: 17 trin (med billeder)
DIY Non Contact Hand Sanitizer Dispenser Uden en Arduino eller en mikrokontroller: Som vi alle ved, ramte COVID-19-udbruddet verden og ændrede vores livsstil. I denne tilstand er alkohol og hånddesinfektionsmidler vitale væsker, men de skal bruges korrekt. Berøring af alkoholbeholdere eller håndsprit med inficerede hænder
Programmering af en Arduino Brug af en anden Arduino til at vise en rulletekst uden et bibliotek: 5 trin
Programmering af en Arduino Brug af en anden Arduino til at vise en rulletekst uden et bibliotek: Sony Spresense eller Arduino Uno er ikke så dyre og kræver ikke meget strøm. Men hvis dit projekt har en begrænsning på strøm, plads eller endda budget, kan du overveje at bruge Arduino Pro Mini. I modsætning til Arduino Pro Micro, Arduino Pro Mi
RC5 fjernbetjeningsprotokoldekoder uden bibliotek: 4 trin
RC5 fjernbetjeningsprotokoldekoder uden bibliotek: Før afkodning af rc5 diskuterer vi først, hvad der er rc5 -kommando, og hvad er strukturen i den. så grundlæggende rc5 -kommando, der bruges i fjernbetjeninger, der bruges i fjernsyn, cd -afspillere, d2h, hjemmebiografsystemer osv., den har 13 eller 14 bit arrangeret i en
Arduino Hall -effektsensor med afbrydelser: 4 trin
Arduino Hall Effect Sensor With Interrupts: Hej alle sammen, I dag viser jeg dig, hvordan du kan forbinde en hall effect sensor til en Arduino og bruge den med en interrupt.Værktøjer og materialer, der bruges i videoen (tilknyttede links): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zKHall -effekt sensorer: h
Naviger robot med skosensorer, Uden GPS, Uden kort: 13 trin (med billeder)
Naviger robot med skosensorer, Uden GPS, Uden kort: Robotten bevæger sig i en forudprogrammeret sti og sender (over bluetooth) sine faktiske bevægelsesoplysninger til en telefon til sporing i realtid. Arduino er forprogrammeret med sti og oblu bruges til at registrere robottens bevægelse. oblu sender bevægelse til