Sommario:
- Passaggio 1: materiali e costruzione
- Passaggio 2: saldatura dell'AVR ai LED e all'altoparlante
- Passaggio 3: Programmazione di Attiny13a
- Passaggio 4: creazione del firmware per Marioman
- Passaggio 5: lasciare libero il Marioman
Video: Sbattere le palpebre, cantare, Marioman: 5 passi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:06
Usa un attiny13a, due LED e un altoparlante per biglietti di auguri per creare un Marioman lampeggiante che riproduce la sigla di Super Mario Brothers. Questo può essere un progetto facile a basso costo per chiunque sia alla ricerca di un modo divertente per entrare nella programmazione AVR! le note delle canzoni sono generate da un'onda quadra emessa su un singolo pin del microcontrollore AVR. I LED che si alternano su ogni nota sono collegati a 2 pin ciascuno dello stesso chip.
Passaggio 1: materiali e costruzione
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCosto: $1.40
- 2 LED: qualsiasi LED va bene
- 1 batteria a bottone al litio
www.sparkfun.com/commerce/product_info.php?products_id=338Costo: $2.00
1 portacellulare
www.sparkfun.com/commerce/product_info.php?products_id=8822Costo: $ 1,25
1 piccolo altoparlante da un biglietto di auguri musicale
Costo totale dei materiali ~ $ 5 I due LED sono stati collegati direttamente a due pin ciascuno dell'attiny13A. Vengono utilizzati due pin per ciascun LED, il secondo pin è impostato su un valore basso per essere utilizzato come connessione a terra. Il limite di corrente dei pin I/O sull'AVR impedirà ai LED di assorbire troppo, quindi non è necessario collegare un resistore serie. L'altoparlante utilizzato è tipico di uno che si trova in un biglietto di auguri musicale, qualsiasi piccolo altoparlante andrà bene, dato che emette un tono ad onda quadra, non è troppo importante preoccuparsi del pilotaggio dell'altoparlante o della qualità del suono.
Passaggio 2: saldatura dell'AVR ai LED e all'altoparlante
Affinché i LED si allunghino come braccia, un perno è piegato sopra l'AVR su ciascun lato. Orientare l'AVR in questo modo facilita il collegamento all'altoparlante (seconda immagine) poiché le connessioni sono sui due pin inferiori. Per l'estetica si desidera che la parte anteriore del chip sia rivolta verso l'esterno, quindi assicurarsi che l'altoparlante sia rivolto allo stesso modo quando è allegato.
Passaggio 3: Programmazione di Attiny13a
Ci sono molte opzioni diverse per programmare gli AVR. per questo progetto è stato utilizzato l'USBtiny che è disponibile come kit dal sito di ladyada https://www.ladyada.net/make/usbtinyisp/index.html Per collegare l'AVR al programmatore è possibile collegare i cavi alla presa femmina e collegarli a una breadboard o, meglio ancora, ottenere un adattatore di programmazione AVR economico come questo https://www.sparkfun.com/commerce/product_info.php?products_id=8508 insieme a intestazioni maschio 3x2 per collegare la spina.
Passaggio 4: creazione del firmware per Marioman
L'attiny13A ha 1K di flash programmabile e 64 byte di SRAM. Il file tar allegato ha il file sorgente e il firmware compilato per il download. Tre array nel codice c sono stati utilizzati per generare la musica
- freq - frequenze di ogni nota
- length - lunghezza di ogni nota
- delay - pausa tra ogni nota
L'array di frequenza non ha le frequenze effettive ma piuttosto il valore da inserire nel registro TTCROB per generare l'onda quadra dal pin PB0. Ecco un breve riepilogo dei calcoli e della configurazione dei pin per la generazione dell'onda quadra:
- Attiny13A ha un oscillatore interno impostato su 9.6MHz
- Il clock interno per IO è l'oscillatore diviso per 8 o 1.2MHz
- Un timer interno è impostato in un registro a 8 bit per contare ogni ciclo di clock con prescala di 8.
- Ciò si traduce in un tick pari a 1 / (1,2 MHz / 8) =.006667 ms
- Attiny13A è configurato per confrontare ciò che è nel registro TCCR0B a 8 bit con il timer e attivare un pin quando corrispondono.
- Ad esempio, per generare un'onda quadra a 524Hz (un'ottava sopra il Do centrale) che ha un periodo di 1.908ms.
1.908ms = 286 tick di clock (1.908/.0067)Dividi 286 per 2 per commutare il pin a t/2 (286/2 = 143)Metti 143 nel registro TTCR0B per generare questa nota. Questo è tutto il codice necessario per impostare il timer, fai il confronto e genera un'onda quadra:
TCCR0A |= (1<<WGM01); // configura il timer 1 per la modalità CTC TCCR0A |= (1<<COM0A0); // attiva OC0A sulla corrispondenza di confronto TCCR0B |= (1<<CS01); // clk/8 prescala TTCR0B = 143; // genera un'onda quadra a 524HzPer ritardare i toni e le pause tra di essi è stata utilizzata una semplice funzione di ritardo
void sleep(int ms) { int cnt; for (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { _asm("NOP"); } }}Questo conto alla rovescia da 150 in cui ogni ciclo NOP è di circa.006667 ms. L'ultima cosa che il codice fa è scorrere gli array, generare la musica e far lampeggiare i due LED. Questo viene fatto in un ciclo for continuo con il seguente codice
const uint8_t freq PROGMEM = { … data };const uint8_t length PROGMEM = { … data };const uint8_t delay PROGMEM = { … data };…while (1) { for (cnt=0; cnt< 156; cnt++) { OCR0A=pgm_read_byte(&freq[cnt]); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); sleep(pgm_read_byte(&length[cnt])); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); // ferma il timer TCCR0B = 0; sleep (pgm_read_word(&delay[cnt])); // avvia il timer TCCR0B |= (1<<CS01); // clk/8 prescala }}Ci sono 156 elementi negli array frequenze/lunghezze/ritardo, questo ciclo li attraversa. I pin PB3 e PB4 sono ciascuno commutati in modo che si alterneranno con ogni nota La prima sospensione è la lunghezza della nota che suoniamo dopo aver impostato il registro OCR0A sul valore appropriato. Il secondo sonno è la pausa tra le note che suoniamo. Nel codice sopra potresti aver notato le due funzioni pgm_read_byte() e pgm_read_word() e la parola chiave PROGMEM. Con un chip integrato come l'attiny la quantità di SRAM è molto limitata, in questo caso solo 64 byte. Gli array che stiamo usando per tutti i dati di frequenza/ritardo/lunghezza sono molto più grandi di 64 byte e quindi non possono essere caricati in memoria. Usando la speciale direttiva PROGMEM avr-gcc questi grandi array di dati non vengono caricati in memoria, ma vengono letti dalla flash.
Passaggio 5: lasciare libero il Marioman
Il video qui sopra mostra Marioman in azione. Il consumo medio di energia è di circa 25 mA, quindi può lampeggiare e fare rumori per circa 10 ore prima di scaricare la batteria a bottone al litio. L'unico modo per accenderlo e spegnerlo è rimuovere la batteria a bottone, quella robusta elencata nei materiali è adatto per questo. È possibile aggiungere un interruttore, ma c'è qualcosa da dire per mantenerlo semplice.
Consigliato:
Orologio di posizione "Weasley" con 4 lancette: 11 passi (con immagini)
Orologio di posizione "Weasley" a 4 lancette: quindi, con un Raspberry Pi che funzionava da un po', volevo trovare un bel progetto che mi permettesse di sfruttarlo al meglio. Mi sono imbattuto in questo fantastico Instructable Build Your Own Weasley Location Clock di ppeters0502 e ho pensato che
Orologio meccanico con display a sette segmenti: 7 passi (con immagini)
Orologio meccanico con display a sette segmenti: un paio di mesi fa ho costruito un display meccanico a 7 segmenti a due cifre che ho trasformato in un timer per il conto alla rovescia. È uscito abbastanza bene e un certo numero di persone ha suggerito di raddoppiare il display per creare un orologio. Il problema era che ero già scappato
Cantare Arduino Nutcracker: 8 passaggi
Cantando Arduino Nutcracker: questo schiaccianoci apre la bocca in base all'audio in ingresso. Può essere fatto facilmente in meno di 3 ore per un principiante per passare da una pila di parti a uno schiaccianoci che canta. Per questo progetto, avrai bisogno di uno Schiaccianoci con una bocca mobile, un prototipo
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: 3 Passi
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: Cosa ti servirà - foglio di stagnola 1 batteria AA (alcune batterie AAA funzioneranno) 1 mini lampadina (lampadine utilizzate per la maggior parte delle torce elettriche; fare riferimento all'immagine) Righello (se necessario)
Altoparlante impermeabile per cantare meglio sotto la doccia: 12 passaggi (con immagini)
Altoparlante impermeabile per cantare meglio sotto la doccia: se sei come me, e so che lo sei, adori cantare sotto la doccia e fai schifo! Non c'è niente che io possa fare per avere una voce terribile che canta, ma la cosa che davvero mi infastidisce, e probabilmente tutti gli altri nel raggio della mia voce