Taula de continguts:
- Pas 1: definició d'adreces de registre
- Pas 2: matrius i variables globals
- Pas 3: la funció "serial.begin"
- Pas 4: la funció "serial.available"
- Pas 5: la funció "serial.read"
- Pas 6: la funció "serial.write"
- Pas 7: la funció de configuració
- Pas 8: les funcions de bucle i ISR
- Pas 9: cablejat
- Pas 10: ajuntar-ho tot
Vídeo: Generador de tons Arduino sense biblioteca ni funcions de sèrie (amb interrupcions): 10 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Normalment, això no és una cosa que faci que sigui instructible, prefereixo la meva fusteria metàl·lica, però com que sóc estudiant d’enginyeria elèctrica i he de fer una classe sobre microcontroladors (Disseny de sistemes incrustats), vaig pensar que en faria un dels meus projectes. Quan originalment vaig fer el projecte i altres per a aquesta classe, vaig trobar que hi havia molt pocs o cap tutorial que no utilitzen les funcions de la biblioteca arduino ni les funcions en sèrie, que és un altre motiu pel qual vaig pensar que seria una bona instrucció.
Aquest codi està dissenyat per al microcontrolador Atmega 2560, de manera que si voleu implementar-lo en una altra placa haureu de canviar els registres d’adreces del codi en funció del manual d’usuari dels controladors. La idea bàsica darrere del codi és que cada vegada que introduïu una tecla al teclat al monitor sèrie, el mega arduino emetrà una freqüència determinada en funció de la tecla que premeu, i es restablirà "q". Ho he fet de manera que "a" emetrà la freqüència A plana i "A" emetrà la freqüència nítida A, "b" emetrà Si bemoll, "c" per a si bemoll, "C" per a nítid, etc. El codi complet es penja al final, però cada pas el desglossarà en trossos, de manera que és més fàcil d’explicar.
Pas 1: definició d'adreces de registre
Aquest pas és fàcil, si utilitzeu l'atmega 2560, només heu d'utilitzar les adreces que he fet servir, tot i que si feu servir una placa amb un xip diferent, haureu de trobar les adreces de cadascun d'aquests registres al vostre manual d’usuari de xips. Les definicions de la part superior són només constants que s’utilitzaran per a les nostres funcions més endavant. Especifiquem les adreces com a volàtils sense signar perquè no volem que el compilador s'emboliqui amb elles.
Pas 2: matrius i variables globals
Aquí volem definir la matriu de freqüència que contindrà totes les freqüències que hauria de generar cada tecla. Aquests valors es calculen a partir de les freqüències de notes reals i, sincerament, he oblidat com els he obtingut, però són els valors adequats en provar-los en un oscil·loscopi per assegurar-me. També estem definint la matriu de notes que conté totes les tecles que cal prémer per a cada to, així com les variables que necessitarem per a les nostres funcions posteriors.
Pas 3: la funció "serial.begin"
Anomenarem la nostra funció personalitzada que replica la funció "serial.begin" U0init (). Pren la velocitat de transmissió desitjada com a entrada i inicia el port sèrie a aquesta velocitat de transmissió.
Pas 4: la funció "serial.available"
Anomenarem la funció que imita "serial.available" U0kbhit (). No pren entrada, sinó que detecta si es fa un canvi al teclat mitjançant el bit d’estat RDA i torna cert quan es detecta un canvi.
Pas 5: la funció "serial.read"
Anomenarem a la funció que imita la funció "serial.read" U0getchar (), que no pren cap entrada i no dóna sortida al canvi que es faci al teclat, que s'emmagatzema al registre UDR0.
Pas 6: la funció "serial.write"
Anomenarem la funció que imita "serial.write" U0putchar (), que pren les dades del registre UDR0 mentre es detecta i emmagatzema un canvi, i les sortides que tornen al monitor sèrie.
Pas 7: la funció de configuració
Aquesta és la funció bàsica de configuració que utilitzarà la nostra imitació "serial.begin" per inicialitzar el port sèrie, i inicialitzarà la nostra configuració de bits per als registres del temporitzador i configurarà PB6 perquè emeti els nostres tons.
Pas 8: les funcions de bucle i ISR
El bucle funciona així: si es detecta un canvi amb la nostra funció "serial.available", la nostra funció "serial.read" emmagatzema aquest canvi i la nostra funció "serial.write" posa aquest canvi al monitor sèrie. Sempre que una variable i sigui inferior a la mida de la matriu de freqüències, configurarà la sortida com la posició de i en aquesta matriu, donant la freqüència en aquesta posició. L'ISR funciona com a restabliment, on si la posició de la matriu de freqüència no és igual a 0 (en altres paraules, si no es prem "q"), emetrà la freqüència, però quan es prem "q" es restablirà. Tingueu en compte que: aquest codi utilitza interrupcions, però es pot fer amb interrupcions desactivades. Publicaré el codi sense interrupcions si en tinc cap sol·licitud, només crec que la versió de la interrupció és més divertida.
Pas 9: cablejat
El cablejat d’aquest codi és extremadament senzill, simplement poseu un cable de sortida de PB6 a una placa de connexió, connecteu un timbre o un altaveu en sèrie amb això i torneu-lo a connectar a terra. Nota: si utilitzeu un altaveu, poseu-hi una resistència petita abans de l’altaveu. Si només voleu veure la sortida però no escoltar-la, connecteu PB6 al cable vermell d’un oscil·loscopi i el cable negre a terra.
Pas 10: ajuntar-ho tot
He afegit el codi complet a aquest pas, ja que he explicat totes les parts en passos anteriors. Només cal una entrada de teclat per a diferents freqüències i sortides que la freqüència a PB6. Espero que us hagi agradat llegir una forma diferent de codificar amb l'IDE.
A més, si us plau, voteu-ho al concurs de microcontroladors: D
Recomanat:
Generador de funcions: 12 passos (amb imatges)
Generador de funcions: aquest instructiu descriu el disseny del generador de funcions basat en el circuit integrat analògic de Maxims MAX038. El generador de funcions és una eina molt útil per als monstres electrònics. Es necessita per sintonitzar circuits de ressonància, provar aud
Generador de funcions de bricolatge amb STC MCU fàcilment: 7 passos (amb imatges)
Generador de funcions de bricolatge amb STC MCU fàcilment: es tracta d’un generador de funcions fet amb STC MCU. Només calen diversos components i el circuit és senzill. Sortida d’especificacions: Freqüència de forma d’ona quadrada d’un canal: 1Hz ~ 2MHz Freqüència de forma d’ona sinusoïdal: 1Hz ~ 10kHz Amplitud: VCC, capacitat de càrrega d’uns 5V
Sensor d'efecte Hall Arduino amb interrupcions: 4 passos
Sensor d'efecte Hall Arduino amb interrupcions: Hola a tothom, avui us mostraré com podeu connectar un sensor d'efecte hall a un Arduino i utilitzar-lo amb una interrupció. Eines i materials utilitzats al vídeo (enllaços d'afiliació): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zK Sensors d'efecte Hall: h
Generador de funcions portàtils a Arduino: 7 passos (amb imatges)
Generador de funcions portàtils a Arduino: el generador de funcions és una eina molt útil, sobretot quan ens plantegem provar la resposta del nostre circuit a un senyal determinat. En aquest instructiu, descriuré la seqüència constructiva d’un petit generador de funcions portàtils fàcils d’utilitzar. Característiques de
Refredador / suport per a portàtils de cost zero (sense cola, sense perforació, sense femelles i cargols, sense cargols): 3 passos
Refredador / suport per a portàtils de cost zero (sense cola, sense perforació, sense femelles i cargols, sense cargols): ACTUALITZACIÓ: SI US PLAU VOT PER EL MEU INSTRUCTABLE, GRÀCIES ^ _ ^ TAMBÉ POTS AGRADAR-ME ENTRADA A www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ O POTS VOTAR ELS MEUS MILLORS AMICS