Arduino Timer avbryter (5 / 6 steg)

Steg 5: Exempel 3: DAC



i detta projekt använde jag en timer avbryta för att mata en sinuskurva av en specifik frekvens från Arduino. Jag lödde en enkel 8 bit R2R DAC till digital stift 0-7. Denna DAC byggdes från 10k och 20 k motstånd ordnade i en multi-planat spänningsavdelare. Jag kommer att lägga mer om byggandet av DAC i en annan instructable, för nu jag har tagit bilden ovan.
Jag ansluten utdata från DAC upp till ett oscilloskop. Om du behöver hjälp att förstå hur man användning/läsa att oscilloskopet kolla denna tutorial. Jag laddade följande kod på Arduino:

63Hz sinusvåg
Amanda Ghassaei 2012

/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/

skickar 63Hz sinusvåg till arduino PORTD DAC
flyta t = 0;

void setup() {
Ange pin-port läge. se http://www.arduino.cc/en/Reference/PortManipulation för mer info
DDRD = 0xFF; //port d (digital stift 0-7) alla utgångar

(CLI); //stop avbrott

Set timer2 avbrott på 40kHz
TCCR2A = 0; / / Ställ in hela TCCR2A register till 0
TCCR2B = 0; / / samma för TCCR2B
TCNT2 = 0; //initialize värde till 0
Set jämför match registrera dig för 40khz steg
OCR2A = 49. / / = (16 * 10 ^ 6) / (8 * 40000) -1
Aktivera CTC läge
TCCR2A | = (1 << WGM21);
Ange CS21 bit för 8 prescaler
TCCR2B | = (1 << CS21);
Aktivera timern jämför avbrott
TIMSK2 | = (1 << OCIE2A);

SEI (); //allow avbrott
}

ISR(TIMER2_COMPA_vect) {
Increment t
t + = 1;
om (t == 628) {//40kHz/628 = ~ 63Hz
t = 0;
}
}

void loop() {
sinus våg av frekvens ~ 63Hz
Skicka till PORTD sine värden mellan 0 och 255
PORTD=byte(127+127*sin(t/100));
}

Jag ställa in en timer avbryta som ökar stegvis variabel t en frekvens på 40kHz. När t når 627 det återställs till noll (detta inträffar med en frekvens på 40 000/628 = 63 Hz). Under tiden i huvudloop skickar Arduino ett värde mellan 0 (00000000 i binär) och 255 (11111111 i binär) till digitala stift 0 till 7 (PORTD). Det beräknar detta värde med följande ekvation:

PORTD=byte(127+127*sin(t/100));

Så som t steg från 0 till 627 sinusfunktion rör sig genom en komplett cykel. Värdet som skickas till PORTD är en sinusvåg med 63Hz frekvens och amplitud 127, oscillerande cirka 127. När denna skickas genom 8 bit resistor stegen DAC det utgångar en oscillerande signal omkring 2.5V med en amplitud på 2.5V och frekvens 63 Hz.

Frekvensen av sinus våg kan fördubblas genom att multiplicera (t/100) benämna med 2, fyrdubblades genom att multiplicera med 4, och så vidare...
Också att märka att om du ökar frekvensen av timer avbrottet för mycket genom att minska den prescaler eller OCR2A sinus våg inte kommer ut korrekt. Detta beror på att funktionen sin() är computationally dyrt, och vid hög avbrott frekvenser det har inte tillräckligt med tid att utföra. Om du använder kickfrekvens avbrott, i stället för att utföra en beräkning under avbrott rutinen, med tanke på lagra värdena i en matris och helt enkelt kalla dessa värden med hjälp av någon form av index. Du kan hitta ett exempel på att i min arduino vågform generator-genom att lagra 20.000 värden av synd i en matris, jag kunde produktionen sinustoner med en samplingsfrekvens på 100kHz.

Se Steg
Relaterade Ämnen

Arduino kitchen timer med en introduktion till timer avbryter

Välkommen till min första instructable,Jag beslöt att göra ett ganska enkla projekt för att ange instructable värld. Detta projekt handlar om att göra en enkel kitchen timer med en Arduino Uno. Således kommer jag ge en liten introduktion 2.2" tft dis...

Timer avbryter på DP32

Timers! Jag är glada att äntligen att täcka timers på min favorit ombord, DP32!Kom ihåg vägen tillbaka när jag skrev om externa avbrott? Om inte du är bekant med avbrott och hur de fungerar, rekommenderar jag att kontrollera denna tutorial ut först....

Arduino Time-Lapse Controller

detta projekt som ursprungligen började med några enkla delar kastas tillsammans för att skapa en mycket enkel time-lapse controller för en DSLR-kamera. När jag var nöjd med den första prototypen, ville jag göra en slutlig version som planeringen av...

Använd Timer avbryta på pcDuino

Timer avbrott kan du utföra en aktivitet på mycket specifikt tidsinställdaintervall oavsett vad som händer i din kod.Steg 1: Steg 1: använda timer avbrott på pcDuinoNär pcDuino kör Ubuntu, som är en version av Linux, Linuxger en timer mekanism, som ä...

Jontofores kontrolleras av arduino timer

DIY Jontofores enhet drivs av Arduino med timerfunktiondessa enheter kommer att ha en polaritet switch på det inställda tidsintervallet (ON och OFF).Steg 1: bakgrund HISTORIA:Hyperhidros är det tillstånd som kännetecknas av onormalt ökad svettning, [...

Göra en Arduino timer

Hi, så jag och min kompis sätter upp så att vi kan göra PCB´s. Vi för närvarande gör en UV exponering låda (eventuellt annan instrucable) och för detta rutan, vi behövde en timer, så detta är vad vi har gjort hittills och vad vi ska göra.Detta projek...

Arduino Timer

Hej alla, detta instructable handlar om hur man bygger ett stoppur / Timer med Arduino.Dragen av denna Timer: (kolla mer i djup Detaljer hur du använder dessa funktioner i "Kod/skiss" avsnitt1. du kan ange ett tidsmål för en händelse och också k...

STM32F103 Timer avbryta (med Keil och STMCubeMX)

I denna tutorial kommer jag Visa användning av avbrott med timers.Avbrottet är helt enkelt för att växla LED på vår STM32 styrelse.Denna handledning är uppdelad i tre steg:Steg 1: Skapa projekt i STM32CubeMXSteg 2: Programmering i KeilSteg 3: Visuali...

Arduino Time-Lapse Panorama Controller

Panorama Controller för GoPro kamerorStyrenheten kommer att rotera din GoPro över en set vinkel för en uppsättning varaktighet eller roterar du GoPro för full rotation för en uppsättning varaktighet.Detta projekt bygger på ursprungliga instructable m...

Arduino - Time BOMB Airsoft använder KYX 5461AS 4-siffriga 7 segment Display

Hej världen! Idag gjorde jag en enkel bomb med en 4 siffrig 7 segment Display (produkt nummer: KYX 5461AS). Det är mycket enkelt och igen kan användas för flera saker naturligtvis! Du utlösa det med en knapp, återställs automatiskt med watchog. AVR/W...

Arduino Vocal effekter Box

Detta Arduino-powered vocal effekter box pitch skiftar och snedvrider inkommande ljudsignalerna att producera ett brett utbud av vocal effekter. Detta projekt är min första experiment med realtid digital signalbehandling med Arduino. Det tar prov en...

3 kanal-Dimmer/fader för Arduino eller andra microcontroller

I ett tidigare instructable jag fram en enkel AC TRIAC-fader/dimmer som kan styras med en Arduino. I olika reaktioner jag fick, uttryckte ett antal personer sitt intresse för en 3 kanalfadern RGB. Men eftersom jag inte har sett några resultat av dess...

Arduino kontrollerade ljus dimmer

Varning: Vissa människor försöka bygga detta med en optocoupler med zerocrossing coz "som är bättre" rätt? Vissa får även höra i elektronik butiker är det bättre att använda sådan optocoupler. FEL. Detta fungerar endast med en random brand optoc...

Arduino hem basket Hoop poäng Detection System aka ScoreKeeper

Min lillasyster och jag hittade denna inomhus basket hoop (bilden ovan) på en container för några veckor sedan. Vi kom hem från kyrkan precis som två personer lossning det från sin lastbil. Vi beslutade att ta tag i det, tillsammans med tabellen air...

Arduino för växthusgaser, trädgården eller Growbox / uppdaterad April 2016

Jag har använt Attiny marker för bevattning uppgifter i min trädgård, men har planer på att bygga ett växthus, en Arduino tycktes vara vägen att gå eftersom det har fler portar. Jag vet, det finns många "Garduino" typ projekt redan, inklusive tw...

PIR rörelsedetektor med Arduino: Drivs på lägsta energiläge som konsumtion

Denna video visar snabbt och lätt strategi för att minska energiförbrukningen för ATMEGA 328P baserade Arduino styrelser med cirka 70-75% med PIR eller PID sensorer för rörelsedetektering.Detta projekt införs efter saker-1) gränssnitt Pyroelectric/Pa...

Från Arduino och perfboard att PCB med fristående MCU

Detta Instructable är en direkt efterföljare av denna. I slutet av detta bygga upp är min skivspelare projekt nästan klar (äntligen).Målet är att utveckla en snygg och arbetar PCB med SMD elektronisk med en arbetande ATtiny85 + programvara!Så är det...

Skicka och ta emot MIDI med Arduino

Detta instructable visar dig hur du använder en Arduino att skicka och ta emot en mängd olika MIDI-meddelanden så att du kan börja bygga din egen MIDI-controllers och instrument. Första jag ska prata lite om MIDI-protokollet, om du bara letar exempel...

Förbättrad Arduino Rotary Encoder behandlingen

Roterande pulsgivare är stor indataenheter för elektronik projekt - förhoppningsvis detta Instructable kommer att inspirera och hjälpa dig att använda en i ditt nästa projekt.Varför skriva rotationsencoder kod?Jag ville använda en låg kostnad rotatio...