Microcontroller stof toongenerator in C-code (8 / 8 stap)

Stap 8: Code


Als je hebt nooit een chip voor geprogrammeerd, dit is een nogal ontmoedigende taak. Het helpt niet dat de tools vlokkig zijn en allermeest naar de tijd dat je moet dezelfde bewerking meerdere keren uitvoeren. De twee beste middelen die ik heb gevonden voor het verkrijgen van inzicht in wat er gaande is de pagina voor de USBtinyISP, http://www.ladyada.net/make/usbtinyisp/ en de spoedcursus in de programmering van het lawaai speelgoed, http://blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html , deze moeten zitten kundig te beginnen.

Een heleboel mensen zoals Arduino voor deze codering en er is niets mis met het gebruik van, behalve ik voel dat het voegt een heleboel zwellen aan een normaal eenvoudig programma. Ook ik wist van C en Arduino weet niet. Misschien een dag, als er tijd is. :)

Code:
{{{
#include < avr/io.h >
Gebruik een pin om te schakelen de SPK

Typedefs / / /
typedef unsigned char u8;

int main(void)
{
U8-btnState0;
U8-btnState1;
U8-btnState2;
U8-btnState3;
U8-btnState4;
U8-btnState5;
U8-btnState6;

DDRB = (1 << DDB6); Set SPK voor uitvoer
PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); Stel hoge knop
PORTC = (1 << PC4) | (1 << PC6);
TCCR2B = (1 << CS21); Timer instellen

terwijl (1)
{
btnState0 = ~ PINC & (1 << PC5);
btnState1 = ~ PINC & (1 << PC4);
btnState2 = ~ PIND & (1 << PD0);
btnState3 = ~ PIND & (1 << PD1);
btnState4 = ~ PIND & (1 << PD2);
btnState5 = ~ PIND & (1 << PD3);
btnState6 = ~ PIND & (1 << PD4);

Als (btnState0)
{
Als (TCNT2 > = 190)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState1)
{
Als (TCNT2 > = 179)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState2)
{
Als (TCNT2 > = 159)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState3)
{
Als (TCNT2 > = 142)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState4)
{
Als (TCNT2 > = 126)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState5)
{
Als (TCNT2 > = 119)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
Als (btnState6)
{
Als (TCNT2 > = 106)
{
PORTB ^ = (1 << PD6); SPK Pin spiegelen
TCNT2 = 0;
}
}
}
}

}}}
Waar komen de standplaatsen vandaan? Een beetje wiskunde nodig was. De klok van de timer op de atmega 168 draait op 1MHz. Dat is veel te snel voor audio, dus we moeten de prescaler /8 gebruiken. Dan aangezien we spiegelen de uitgang-pins hoog dan laag moeten zodat 1 cyclus, we het antwoord door 2 deelt om te komen met de juiste toonhoogte moeten. De formule ziet er als volgt,
Worp om te zetten in code = (1000000/8) / (frequentie Target * 2)
Voor A(440) zou dit 125000/880 = 142.045- of 142 voor onze doeleinden, aangezien de waarde een geheel getal moet.
De frequenties van de doelgroep notities zowat overal online kunnen worden gevonden en zijn over het algemeen allemaal hetzelfde.

Ik wil nog toevoegen een case-statement in plaats van met behulp van een bos van Ifs en PWM gebruiken om betere controle van het volume en toonhoogte van de spreker, maar voor nu, dit werkt.

Gerelateerde Artikelen

Hoe te te werken met geleidende stof

Hoe te te werken met geleidende stof

Werken met geleidende stof is leuk en het is ideaal voor wearables, zachte circuits, e-textiel en andere projecten die van zijn eigenschappen profiteren. Leren van de basics zal u helpen om ontwerp en materiaal keuzes op maat van uw toepassing.Dit In
Elektronische beveiligingssysteem met RTC en gebruiker definiëren pin-code

Elektronische beveiligingssysteem met RTC en gebruiker definiëren pin-code

Hi Guys!Dit is een project dat ik gemaakt met behulp van pic microcontroller zijn een elektronische PIN Code veiligheidssysteem met real timerklok en user define pin Codeonderdelen, deze pagina bevat alle details om een zelf te maken.ZIJN WERKEN EN C
Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Enkele van mijn projecten in het verleden hebben problemen als gevolg van een slechte digitale pin. Als dit ooit aan u gebeurde heeft, dan weet je hoe frustrerend het kan zijn. De meeste mensen de eerste reactie is dat er iets mis is met de code. Als
PHloat2 DIY zuur water testen sculptuur & kit met arduino

PHloat2 DIY zuur water testen sculptuur & kit met arduino

pHloatpHloat is een DIY kit die is gemaakt voor gebruik in combinatie met een pre-owned / reeds bestaande arduino microcontroller. Het doel is het testen van de pH-niveaus in de lokale rivieren, meren en stromen als gevolg van de toestroom van lucht-
8X8X8 3D RGB LED Cube

8X8X8 3D RGB LED Cube

Het is al een lange tijd komen, maar mijn universele RGB-kubus is eindelijk klaar!Nu kunnen we uitvoeren van de animaties en gebruik de code door Kevin Darrah zowel Nick Schulze (licht gewijzigd, maar in principe identiek - minor timing en laag contr
CopperFill Steampunk Bluetooth Lamp

CopperFill Steampunk Bluetooth Lamp

Laten we bouwen een steampunk-lamp die verbinding met een apparaat via een bluetooth-microcontroller maken kan!Stap 1: Verzamel eerst die stapel van junk Wat u zult moeten (volgens Thomas Edison): een stapel van rommel en een goede verbeelding.-3D pr
Arduino - muziek

Arduino - muziek

In deze video we zullen kijken hoe je de arduino om muziek te spelen.  Deze video zal ook een prelude in hoe maak je het zelfde ding met behulp van een eenvoudig pic-microcontroller.Arduino voorbeeld Code:http://Arduino.CC/en/tutorial/Tone
Braille taal ingeschakeld mobiele telefoon voor slechtzienden

Braille taal ingeschakeld mobiele telefoon voor slechtzienden

De mobiele telefoons veranderd vandaag mensenlevens op vele manieren. Er is grote behoefte om uit te breiden van de verschillende functies die door mobiele telefoons voor blinde persoon. We geloven sterk dat deze voordelen in het algemeen bijdragen z
Girino - snel Arduino oscilloscoop

Girino - snel Arduino oscilloscoop

ik ben een natuurkundige en het mooiste deel van werken op dit gebied is dat ik krijg om te bouwen van mijn eigen instrumenten. Met deze manier van denken besloten heb ik om te bouwen van een homebrew Arduino oscilloscoop. Dit instructable werd gesch
3 Arduino Pins to 24+ Output Pins

3 Arduino Pins to 24+ Output Pins

Hebben je uitgeput van output pinnen voor je Arduino? Nou is dit de oplossing voor u! In deze tutorial ik laten u zien zal de hardware en de code die nodig is om te controleren veelvouden van 8 aantal uitgangen, met behulp van slechts 3 van uw pins A
Visitekaartje van USB-PCB

Visitekaartje van USB-PCB

Dit is een visitekaartje dat sommige tekst wilt invoeren wanneer u het aansluit op een USB-poort.Het gebruikt een ATtiny85 microcontroller met V-USB gebaseerde code emuleert een toetsenbord. De typering wordt geactiveerd door de CAPS LOCK-status LEDs
Beheersing van iRobot maken door met behulp van MSP430fr6989

Beheersing van iRobot maken door met behulp van MSP430fr6989

Dit is onze eerste instructables tutorial bereikt door Mohsine Taarji, Anvesh Loka, Avinash Singh. Ons project is over Controlling iRobot maken met behulp van de MSP430fr6989 Microcontroller. Kortom, iRobot is een opnieuw programmeerbaar apparaat. U
Autonome/RC menselijk Bot

Autonome/RC menselijk Bot

intro: 18 +ik ben een 24 jaar oude student aan technische Instituut York elektrotechniek studeren en dit is mijn robot die ik heb gewerkt voor een project en wilde delen met alle studenten, onderwijzers en hobbyisten.Deze robot kan worden aangestuurd
Het gebruik van de Tymkrs zet Me Kit

Het gebruik van de Tymkrs zet Me Kit

We maken een heleboel verschillende kits, velen van hen voor audio synths. Een van hen kunt u een roterende encoder op een breadboard te gebruiken voor uw projecten.Wat zijn de rotary encoders?Rotary encoders, ook bekend als as/quadrature encoders, z