Knippert, zingen, Marioman (4 / 5 stap)

Stap 4: Het maken van de firmware voor Marioman


De attiny13A is 1K van programmeerbare flash, en 64bytes van SRAM.
De bijgevoegde tar-bestand heeft het bronbestand evenals gecompileerde firmware voor download.

Drie arrays in de c code werden gebruikt voor het genereren van de muziek

  • freq [] - frequenties van elke noot
  • lengte [] - lengte van elke noot
  • vertraging [] - pauze tussen elke noot

De frequentie-array beschikt niet over de werkelijke frequenties maar eerder de waarde in het register van de TTCROB voor het genereren van de blokgolf uit de PB0 pin te plaatsen.

Hier is een korte samenvatting van de berekeningen en pin-configuratie voor blokgolf generatie:

  • De attiny13A heeft een interne oscillator ingesteld op 9.6MHz
  • De interne klok voor IO is de gedeeld door 8 of 1.2 MHz oscillator
  • Een interne timer is ingesteld in een 8-bit register te tellen elke klokcyclus met prescale van 8.
  • Dit resulteert in een teek gelijk is aan 1 / (1.2 MHz / 8) =.006667ms
  • De attiny13A is geconfigureerd voor vergelijken wat er in de 8-bit TCCR0B register met de timer en een PIN-code in-/ uitschakelen wanneer zij overeenkomen.
  • Als u bijvoorbeeld om het genereren van een blokgolf op 524 Hz (een octaaf boven midden C) die beschikt over een periode van 1.908ms.

1.908ms = 286 klok teken (1.908/.0067)
Verdelen van 286 door 2 om te wisselen van de pin aan de t/2 (286/2 = 143)
143 in het register van de TTCR0B voor het genereren van deze opmerking plaatsen

Dit is de code die nodig is voor het instellen van de timer, doen de vergelijken en output van een blokgolf:

 TCCR0A |= (1<<WGM01); // configure timer 1 for CTC mode TCCR0A |= (1<<COM0A0); // toggle OC0A on compare match TCCR0B |= (1<<CS01); // clk/8 prescale TTCR0B = 143; // generate a square wave at 524Hz 

Als u wilt vertragen de tonen en de pauzes tussen hen was een eenvoudige vertraging-functie gebruikt:

 void sleep(int ms) { int cnt; for (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { __asm("NOP"); } }} 

Dit telt af vanaf 150 waar elke NOP-cyclus ongeveer.006667ms is.

Het laatste wat dat de code doet is de arrays doorlopen, genereren de muziek en de twee LED's knipperen.

Dit gebeurt in een continue lus met de volgende code:

 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); // stop timer TCCR0B = 0; sleep ( pgm_read_word(&delay[cnt]) ); // start timer TCCR0B |= (1<<CS01); // clk/8 prescale }} 

Er zijn 156 elementen in de frequenties/lengte/vertraging arrays, deze lus doorloopt hen. PIN-PB3 en PB4 zijn elk van een knevel gevoorzid zodat zij zullen worden afgewisseld met elke noot de eerste slaap is de lengte van de opmerking die we spelen na het opzetten van het OCR0A-register op de juiste waarde. De tweede slaap is de pauze tussen de noten die we spelen.

In de bovenstaande code hebt u aankondiging van de twee functies pgm_read_byte() en pgm_read_word(), evenals het sleutelwoord PROGMEM.

Met een ingebouwde chip als de attiny is de hoeveelheid SRAM zeer beperkt, in dit geval enige 64bytes. De arrays die we voor alle frequentie/vertraging/lengte gegevens gebruiken zijn veel groter dan 64bytes en daarom kunnen niet worden geladen in het geheugen. Met behulp van de speciale PROGMEM avr-gcc richtlijn die deze grote gegevensmatrices wordt verhinderd laden in het geheugen, zijn in plaats daarvan ze lezen van flash.

Gerelateerde Artikelen

Zingen Pumpkins / Arduino

Zingen Pumpkins / Arduino

laten we beginnen door te zeggen dat ik een noob aan micro controllers zoals de Arduino ben. Na op zoek via instructables voor een tijdje ik de dingen zag die arduino kon doen. Dat is wanneer ik realiseerde me dat ik moest krijgen en leren van het he
Zingen Pumpkins/parallelle poort Relay vak

Zingen Pumpkins/parallelle poort Relay vak

dit Instructable zal u tonen hoe te bouwen van een parallelle poort relay doos die zal worden gebruikt om te rijden een zingende Pompoen Halloween tuig. Het zingen pompoen tuig is in feite een gesynchroniseerde licht en muziek show dat wordt veronder
Een Levitating bol draait gloed en knippert met Arduino

Een Levitating bol draait gloed en knippert met Arduino

Een levitating little Death Star in Instructables nodigde me aan het nieuwe project met Arduino. Drie beleidsterreinen werden besloten en bewaard als onderscheid met de voorloper.Doe het zelf met geen (of minder) ready-made.Draaiende houden.Maak gloe
Zingen tijdens het drummen

Zingen tijdens het drummen

het lijkt erop dat een heleboel keer de drummer heeft te maken van een back-up zang, of misschien zelfs leiden. Drummen is gemakkelijk, recht? Nou, elke niet-drummer denkt dat het is, blijkbaar, dat is waarom we krijgen soms behandeld de andere "gema
Hoe te maken uw hond zingen

Hoe te maken uw hond zingen

dit is over het maken van uw hond zingen.  Ik kan niet beloven dat uw hond zal zingen, maar ik ben van plan om u te vertellen hoe we mijn hond om te beginnen zingen.Mijn bichon frise, Pierre, ooit gaat niet te worden een hondje maken CD, maar hij zek
Aangepaste zingen sneeuwbol

Aangepaste zingen sneeuwbol

dit instructable zal u tonen hoe ik een aangepaste sneeuwbol gemaakt als een geschenk dat bestond uit een uniek beeldje, laser graveren en een gepersonaliseerde Audiobericht.Het begon allemaal een beetje meer dan een maand geleden, toen ik aan een pr
De kroon van de vakantie zingen

De kroon van de vakantie zingen

Hier is een grote mod voor een reef(wreaths) dat heeft geleid's daarop. Gebruik de Mediatek LinkIt een bord met een SD-kaart te houden vakantie nummers die gespeeld worden wanneer iemand bij de deur.Een ultrasone sensor wordt gebruikt om te ontdekken
Zingen de plant. Maak uw installatie zingen met Arduino, touche en een gameduino

Zingen de plant. Maak uw installatie zingen met Arduino, touche en een gameduino

dit project is een onderdeel van experimenten gedaan terwijl het doen van een artiest in residentie in Instructables. Kunt u de andere projecten hier.Maken van een plant die zingen sinds een truc was de uitvinder van de Theremin. Hier ga ik je leren
Weekend projecten: Mijn lopend project Plasma spreker (zingen arc).

Weekend projecten: Mijn lopend project Plasma spreker (zingen arc).

Dit instructable zal u tonen hoe te maken van een eenvoudige plasma spreker. Een plasma-spreker (of zingen arc) is een apparaat dat een elektrische ontlading van hoogspanning genereert wanneer we moduleren het hoorbare muziek uitzenden. Al het geluid
(Dit instructable is dood.) Zingen Arc Plasma spreker project - revisie 2.0!

(Dit instructable is dood.) Zingen Arc Plasma spreker project - revisie 2.0!

UPDATE: Dit instructable zal nooit worden voltooid, zoals ik ben terug verhuisd naar het 555 circuit met enkele grote veranderingen, en ik dit opgenomen ' staat in die ene. Klik hier om te zien klaar!Alles hieronder is VEROUDERDE informatie is gewijz
LED uil en 5 LED pompoenen zingen Raffi

LED uil en 5 LED pompoenen zingen Raffi

We hadden al plannen voor 5 LED pompoenen, wanneer de Raffi onlangs Owl zingen langs nummer gemaakt van de noodzaak vrijgegeven om snel een Dalen kunststof achtertuin uil animeren voor Halloween. Hier leidt de LED-eyed uil een band van 5 LED pumpkins
Zingen Pumpkins, Hologram Ghost gezicht & meer!

Zingen Pumpkins, Hologram Ghost gezicht & meer!

Wegens het hoge volume van verzoeken die ik voor het Zingen Pumpkins speciaal effect ontvangen, maakte ik een Instructable voor hen hier:Decoraties die ik heb gemaakt in mijn gebouw binnenplaats voor Halloween met een originele hologram ghost gezicht
RGB-snel en langzaam knippert Throwies

RGB-snel en langzaam knippert Throwies

hier is het! Een snel of langzaam knipperen van Led Throwie dat elke kamer zal oplichten! Ze zijn zo helder en perfect voor projecten met kinderen zal zijn. Wij hen in ons lab getest en ze zal laatste weken (non-stop) met een kleine krachtige CR2032
Zelf bericht op PIC16F877A knippert met assembler bouwen

Zelf bericht op PIC16F877A knippert met assembler bouwen

jongens, in deze stap-voor-stap instructies,Ik wil delen mijn privé experiment met PIC16F877A en assembly language,Ik noem hetZelf bericht op PIC16F877A knippert met assembler bouwenLaten we bereiden de onderdelenStap 1: De onderdelen die nodig zijn