Inhoudsopgave:
- Stap 1: Materialen en constructie
- Stap 2: Solderen van de AVR aan de LED's en luidspreker
- Stap 3: Programmeren van de Attiny13a
- Stap 4: De firmware voor Marioman maken
- Stap 5: De Marioman loslaten
Video: Knipperen, zingen, Marioman: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:20
Gebruik een attiny13a, twee LED's en een wenskaartluidspreker om een knipperende Marioman te maken die het themalied van Super Mario Brothers speelt. Dit kan een eenvoudig en goedkoop project zijn voor iedereen die op zoek is naar een leuke manier om in te breken in AVR-programmering! noten van de nummers worden gegenereerd door een blokgolf die wordt uitgevoerd op een enkele pin van de AVR-microcontroller. De LED's die op elke noot afwisselen, zijn verbonden met 2 pinnen van dezelfde chip.
Stap 1: Materialen en constructie
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dKosten: $ 1,40
- 2 LED's - alle LED's zijn voldoende
- 1 lithium knoopcelbatterij
www.sparkfun.com/commerce/product_info.php?products_id=338Kosten: $ 2,00
1 knoopcelhouder
www.sparkfun.com/commerce/product_info.php?products_id=8822Kosten: $ 1,25
1 kleine speaker van een muzikale wenskaart
Totale materiaalkosten ~ $ 5 De twee LED's werden rechtstreeks bevestigd aan twee pinnen van elk van de attiny13A. Er worden twee pinnen gebruikt voor elke LED, de tweede pin is laag ingesteld om als aardverbinding te gebruiken. serie. De gebruikte luidspreker is typerend voor een luidspreker die te vinden is in een muzikale wenskaart, elke kleine luidspreker is geschikt, aangezien dit een blokgolftoon produceert, is het niet zo belangrijk om je zorgen te maken over het aansturen van de luidspreker of de geluidskwaliteit.
Stap 2: Solderen van de AVR aan de LED's en luidspreker
Om de LED's als armen uit te reiken, wordt aan elke kant een pen over de AVR gebogen. Door de AVR op deze manier te oriënteren, is het gemakkelijk om verbinding te maken met de luidspreker (tweede afbeelding), aangezien de aansluitingen op de twee onderste pinnen zitten. het is bijgevoegd.
Stap 3: Programmeren van de Attiny13a
Er zijn tal van verschillende opties voor het programmeren van AVR's. Voor dit project werd de USBtiny gebruikt die als kit verkrijgbaar is op de site van ladyada https://www.ladyada.net/make/usbtinyisp/index.html. Om de AVR op de programmer aan te sluiten, kunt u ofwel bevestig draden aan de vrouwelijke socket en steek ze in een breadboard of beter nog, koop een goedkope AVR-programmeeradapter zoals dezehttps://www.sparkfun.com/commerce/product_info.php?products_id=8508samen met 3x2 mannelijke headers om de plug aan te sluiten.
Stap 4: De firmware voor Marioman maken
De attiny13A heeft 1K programmeerbare flash en 64 bytes SRAM. Het bijgevoegde tar-bestand bevat het bronbestand en gecompileerde firmware om te downloaden. Drie arrays in de c-code werden gebruikt om de muziek te genereren
- freq - frequenties van elke noot
- lengte - lengte van elke noot
- vertraging - pauze tussen elke noot
De frequentiearray heeft niet de werkelijke frequenties, maar eerder de waarde die in het TTCROB-register moet worden ingevoerd om de blokgolf van de PB0-pin te genereren. Hier is een korte samenvatting van de berekeningen en pinconfiguratie voor het genereren van blokgolven:
- De attiny13A heeft een interne oscillator ingesteld op 9,6MHz
- De interne klok voor IO is de oscillator gedeeld door 8 of 1,2 MHz
- Een interne timer is ingesteld in een 8-bits register om elke klokcyclus op te tellen met een voorschaal van 8.
- Dit resulteert in één vinkje gelijk aan 1 / (1,2 MHz / 8) =.006667 ms
- De attiny13A is geconfigureerd om te vergelijken wat er in het 8bit TCCR0B-register staat met de timer en een pin te wisselen wanneer ze overeenkomen.
- Om bijvoorbeeld een blokgolf op 524 Hz (een octaaf boven de middelste C) te genereren met een periode van 1,908 ms.
1.908ms = 286 kloktikken (1.908/.0067)Deel 286 door 2 om de pin op t/2 te wisselen (286/2 = 143)Plaats 143 in het TTCR0B-register om deze notitie te genereren. Dit is alle code die nodig is om de timer in te stellen, doe de vergelijking en voer een blokgolf uit:
TCCR0A |= (1<<WGM01); // configureer timer 1 voor CTC-modus TCCR0A |= (1<<COM0A0); // schakel OC0A in bij vergelijk match TCCR0B |= (1<<CS01); // clk/8 voorschaal TTCR0B = 143; // genereer een blokgolf op 524HzOm de tonen en de pauzes ertussen te vertragen, werd een eenvoudige vertragingsfunctie gebruikt
void sleep (int ms) { int cnt; voor (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { _asm("NOP"); } }}Dit telt af vanaf 150, waarbij elke NOP-cyclus ongeveer.006667 ms is. Het laatste wat de code doet, is door de arrays lopen, de muziek genereren en de twee LED's laten knipperen. Dit wordt gedaan in een continue for-lus met de volgende code
const uint8_t freq PROGMEM = { … data };const uint8_t lengte PROGMEM = { … data };const uint8_t vertraging PROGMEM = { … data };…terwijl (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); // stoptimer TCCR0B = 0; slaap (pgm_read_word(&delay[cnt])); // start timer TCCR0B |= (1<<CS01); // clk/8 voorschaal }}Er zijn 156 elementen in de frequenties/lengtes/vertragingsreeksen, deze lus doorloopt ze. Pin PB3 en PB4 zijn elk omgeschakeld, zodat ze met elke noot zullen worden afgewisseld. De eerste slaap is de lengte van de noot die we spelen nadat het OCR0A-register op de juiste waarde is ingesteld. De tweede slaap is de pauze tussen de noten die we spelen. In de bovenstaande code heb je misschien de twee functies pgm_read_byte() en pgm_read_word() gezien, evenals het trefwoord PROGMEM. Met een ingebouwde chip zoals de attiny is de hoeveelheid SRAM zeer beperkt, in dit geval slechts 64 bytes. De arrays die we gebruiken voor alle frequentie-/vertragings-/lengtegegevens zijn veel groter dan 64 bytes en kunnen daarom niet in het geheugen worden geladen. Door gebruik te maken van de speciale PROGMEM avr-gcc-richtlijn wordt voorkomen dat deze grote data-arrays in het geheugen worden geladen, in plaats daarvan worden ze uit flash gelezen.
Stap 5: De Marioman loslaten
De bovenstaande video toont Marioman in actie. Het gemiddelde stroomverbruik is ongeveer 25 mA, dus hij kan ongeveer 10 uur knipperen en geluiden maken voordat de lithium-knoopcel leeg is. hiervoor goed geschikt. Er kan een schakelaar worden toegevoegd, maar er is iets voor te zeggen om het simpel te houden.
Aanbevolen:
Firmware Knipperen van ESP8266: 4 stappen:
Firmware Flashing van ESP8266: Iedereen probeert de firmware van de ESP8266-module bij te werken. De instructies kunnen u helpen bij het flashen van de firmware in ESP8266
Arduino-programmering via mobiel -- Arduinodroid -- Arduino Ide voor Android -- Knipperen: 4 stappen
Arduino-programmering via mobiel || Arduinodroid || Arduino Ide voor Android || Knipperen: Abonneer je op mijn YouTube-kanaal voor meer video's…… Arduino is een bord, dat rechtstreeks via USB kan worden geprogrammeerd. Het is heel eenvoudig en goedkoop voor school- en schoolprojecten of zelfs in prototypen van producten. Veel producten bouwen er eerst op voort voor i
Arduino-notenkraker zingen - Ajarnpa
Zingende Arduino Notenkraker: Deze notenkraker opent zijn mond op basis van de ingevoerde audio. Het kan voor een beginner gemakkelijk in minder dan 3 uur worden gedaan om van een stapel onderdelen naar een zingende notenkraker te gaan. Voor dit project heb je een notenkraker nodig met een beweegbare mond, een prototype
Hoe u uw Xbox-controller kunt laten knipperen met enkele leds, maar hij zal niet meer trillen: 4 stappen
Hoe u uw Xbox-controller kunt laten knipperen met enkele leds, maar hij zal niet meer trillen
Waterdichte luidspreker voor beter zingen onder de douche - Ajarnpa
Waterdichte luidspreker voor beter zingen onder de douche: als je bent zoals ik - en ik weet dat je dat bent - HOUD je ervan om onder de douche te zingen en je ZUIGT er in! Ik kan niets doen aan het hebben van een vreselijke zangstem, maar het ding dat me echt irriteert, en waarschijnlijk alle anderen binnen het bereik van mijn vo