Internt interrupt - Arduino

Relaterede dokumenter
Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Analoge indgange og A/D konvertering. Analoge udgange

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Start på Arduino og programmering

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

Fra programmering til mikroprocessor

Brug af digitale ind og udgange

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

danske karakterer på Lcd

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

LCD intro. LCD Character display-intro. Redigeret 4/6-2019

Delay(100); Man skriver fx blot delay(100); for at få Microcontrolleren til at vente 100 ms inden programmet fortsætter.

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Af: OZ7EC Erik Christiansen Chiptemperatur med Arduino

// Definition af porte og funktioner

Arduino kursus lektion 3:

Arduino opgaver Teknologi

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Datamaters arkitektur og programmering

System Arkitektur og Integration

Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino.

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Sådan forbindes Arduinoen via et fumlebræt til ATTiny45 chippen.

Chapter. Information Representation

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 05/ Arduino, Loops, løkker, programfunktioner mm.

RF-ID Kompendium. RF-ID & Radio control. Dette kompendium indeholder materiale om RF-ID. Materialet er meget foreløbigt.

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

TinkerCad - Arduino simulator

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 08/ Arduino, Loops, løkker, programfunktioner mm.

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Dokumentation af UR Med børnetimer til TV-visning

Lektion 6 / Analog Arduino

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Debug-vinduet. // run once, when the sketch starts. Serial.println("Lets calculate a hypoteneuse"); // send data til // Debugvinduet

Arduino Programmering

Microcontroller, Arduino

Programmering i C. Lektion november 2008

Intro til AVR. Mads Pedersen, OZ6HR

Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino.

Projekt Når maskinen reagerer - Dataopsamling og aktuatorer

ARDUINO PROGRAMMERING

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno

Hvorfor & Hvordan lære Elever At programmere Arduinoer

up/ansi Eksamensspørgsmål

Optimering af fraværsregistrering

Programmering i C. Lektion september 2009

Delta Elektronik A/S - AKD

Projekt - RoboNet Del Journal.

Arduino kursus lektion 4:

Hvorfor & Hvordan lære. at programmere Arduinoer

Embedded controller, almen.

Forelæsning Uge 4 Mandag

Mircobit Kursus Lektion 4 (Du skal her vælge Lets Code Og herefter Block Editor.)

Arduino opgaver Teknologi

Forelæsning Uge 4 Mandag

Det Digitale Niveau. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Arduino. Processoren på kittet er fra Atmel, af AVR-familien, og hedder Atmega 328.

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

Arduino Programmering

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Verilog HDL. Presented by: Amir Masoud Gharehbaghi

Programmering i C Videre med C (2 af 4) 19. marts 2007

Hvorfor & Hvordan lære Elever At programmere Arduinoer

CANSAT & ARDUINO step by step

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

Arduino opgaver Teknologi

Talsystemer I V X L C D M Hvad betyder halvanden??. Kan man også sige Halvtredie???

Qwpikkemandtyuiopåasdfghjklæøzxc vbnmqwertyuiopåasdflortefissezxcvb nmqwertyuiopåasdfghjklæsupernørd mqwertyuiopåasdfghjklæøzxcvbnmq

RF-ID. Materialet er meget foreløbigt. Derfor modtages rettelser og forslag meget gerne Side 1 af 15. Redigeret 14/

Blockprog Rev1.0. Block programmering CS1/CJ1. Qiuck guide OMRON

ECE 551: Digital System * Design & Synthesis Lecture Set 5

Programmering C RTG

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Forelæsning Uge 2 Torsdag

Projekt rapport. for. Zigbee kommunikation

Processer og tråde. dopsys 1

Programmering i C. Lektion september 2009

Seriel kommunikation med Arduino

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

Forelæsning Uge 4 Mandag

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Modeljernbane elektronik for begyndere...og dem der vil igang med at bygge deres egne dekodere

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at beskrive et forløb. Det kan fx være en microcontrollers programafvikling.

Programmering i C. Lektion december 2008

Det er muligt at chekce følgende opg. i CodeJudge: og

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Eksempel: Skat i år 2000

Indholdsfortegnelse :

Kapitel 3 Betinget logik i C#

Arduino opgaver. For at få hjælp til at lave opgaverne, brug Arduino-kompendiet, eller søg på nettet!

PUT og INPUT funktionerne

Transkript:

Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1

Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt eller sprunget let hen over: Noise Reduction under brug af A/D konverter Aftenens emne: Intern / timer interrupt Watch dog Programeksempler Arbejde med strenge 2

Ekstern Interrupt Opsamling fra sidst Vi havde følgende kode: uint8_t oldsreg = SREG; cli(); Pos = encoderpos; SREG = oldsreg; uint8_t er en variabeltype unit8_t er 8 bit unsigned integer, dvs. 0 255.

Interrupt SREG indeholder en række oplysninger om status: Bit Navn 7 I Global Interrupt Enable 6 T Bit Copy Storage 5 H Half Carry Flag - Carry in some arithmetic operations 4 S Sign Bit, S = N V 3 V Two s Complement Overflow Flag 2 N Negative Flag indicates a negative result in an arithmetic operation. 1 Z Zero Flag - in an arithmetic or logic operation 0 C Carry Flag - in an arithmetic or logic operation

Noise Reduction Der er en helt række hvorpå man kan stoppe processoren:

Noise Reduction Eller en anden oversigt:

Noise Reduction Hvordan får man nu fat i det register? Det må jeg vende tilbage med en løsning på i foråret

Timer interrupt /* pulsetimer2pulse a pin at a rate set from serial input */ #include <MsTimer2.h> const int pulsepin = 13; const int NEWLINE = 10; // ASCII value for newline int period = 100; // 10 milliseconds boolean output = HIGH; // the state of the pulse pin void setup() { pinmode(pulsepin, OUTPUT); Serial.begin(9600); MsTimer2::set(period/2, flash); MsTimer2::start(); period= 0; // reset to zero, ready for serial input }

Timer interrupt void loop() { if( Serial.available()) { char ch = Serial.read(); if( isdigit(ch) ) // is this an ascii digit between 0 and 9? { period = (period * 10) + (ch - '0'); // yes, accumulate } else if (ch == NEWLINE) // is newline character { Serial.println(period); MsTimer2::set(period/2, flash); MsTimer2::start(); period = 0; // reset to 0, ready for the next } } }

Timer interrupt void flash() { digitalwrite(pulsepin, output); output =!output; // invert the output }

Watchdog Funktion: Hvis programmet kører helt i skoven foretages en reset. Det realiseres ved at man starter en timer. Med jævne mellemrum nulstilles timeren, typisk ved start eller slut af loop(). Hvis nulstilling ikke foretages inden for et bestemt tidsrum foretages reset. Intervallet er typisk 2 sek.?? Det diskuteres meget. Et problem er at hvis tiden er for kort når Arduino ikke at boote.

Watchdog Watchdog understøttes kun delvist i Arduino Jeg nævner det her fordi Erik/7EC i foråret nævnte det som en af de godt ting ved Arduino og Atmega328P. Det er også noget af det ved programmering, som synes at være lidt ud over det elementære. Spørgsmål: Har I nogle godt eksempler hvor det kunne være relevant at bruge en watchdog? Det er nok noget vi skal dyrke lidt mere i foråret.

Lidt grundlæggende Der er nok nogle ting vi er gået lidt for let hen over. Det er bl.a.: Håndtering af strenge Brug af for-løkke Jeg vil tage det op igen ved at gennemgå et program til håndtering af tekst på display.

Strenge Eksempler: Alle de følgende er lovlige definitioner af strenge: char Str1[15]; char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; char Str4[ ] = "arduino"; char Str5[8] = "arduino"; char Str6[15] = "arduino"; Muligheder for definition af strenge Str1: Erklæring uden initialisering af indhold. Str2: Erklæring uden ekstra karakter. Compileren vil tilføje NULL Str3: Erklæring med nulterminering Str4: Erklæring med... Compileren vil tilføje NULL på sidsteplads Str5: Erklæring og initialisering af streng. NULL på sidste plads Str6: Erklæring og delvis initialisering. NULL på sidste plads

Strenge Opdeling af strenge Man kan opdele strenge på denne måde: char minstring[ ] = "Dette er den ene linje" " dette er den anden linje" " og vi kunne blive ved";

Brug af strenge Program eksempel: #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 6, 5, 4, 3); char tekst1[21] = " OZ1EDR "; char tekst2[21] = " Sjov med Arduino "; char tekst3[21] = " En ny del af "; char tekst4[21] = "verdens bedste hobby"; char tekst[81]; int n; int antal = 0; (Forsættes)

Brug af strenge void setup() { lcd.begin(20, 4); // putter de fire tekster ind i strengen tekst: for (n =0 ; n < 21; n++) tekst[n] = tekst1[n]; for (n =0 ; n < 21; n++) tekst[n+20] = tekst2[n]; for (n =0 ; n < 21; n++) tekst[n+40] = tekst3[n]; for (n =0 ; n < 21; n++) tekst[n+60] = tekst4[n]; } Det er sådan jeg har afleveret programmet; men er nu også rigtigt. Jeg er usikker. Lad os finde ud af det sammen.

Brug af strenge void loop() { lcd.setcursor(0,0); for (n = 0; n < 20; n = n + 1) lcd.print(tekst[n]); lcd.setcursor(0,1); for (n = 0; n < 20; n = n + 1) lcd.print(tekst[n+20]); lcd.setcursor(0,2); for(n = 0; n < 20; n = n + 1) lcd.print(tekst[n+40]); lcd.setcursor(0,4); for(n = 0; n < 20; n = n + 1) lcd.print(tekst[n+60]); if ((antal % 20) == 0) delay(4000);/* Alt er netop flyttet en linje */ else delay(100); antal = antal + 1; tekst[80] = tekst[0]; /* første tegn flyttes bagerst*/ for (n = 0; n < 81; n = n + 1) tekst[n] = tekst[n+1]; /* alle tegn rykkes en til venstre*/ }

Opfordring til arbejd nu Jeg har ikke kunne nå mere så derfor: Få en lysdiode til at varierer i lysstyrke Få en stepmotor til at køre til en bestemt position Få teksten i displayet til at køre den anden vej end angivet i eksemplet ovenfor. Desværre: Det er kun ved at gøre at man lærer. Kun ved at programmere lærer man det.