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

Relaterede dokumenter
Internt interrupt - Arduino

Fra programmering til mikroprocessor

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

Analoge indgange og A/D konvertering. Analoge udgange

Start på Arduino og programmering

Brug af digitale ind og udgange

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

Arduino kursus lektion 3:

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

Datamaters arkitektur og programmering

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

System Arkitektur og Integration

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

Lektion 6 / Analog Arduino

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

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

Arduinostyret klimaanlæg Afsluttende projekt programmering C

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

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.

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

ARDUINO PROGRAMMERING

// Definition af porte og funktioner

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

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

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

CANSAT & ARDUINO step by step

TinkerCad - Arduino simulator

GSM SMS Modem MODEL: SA RTU-1 V1.01

Arduino opgaver Teknologi

Microcontroller, Arduino

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

Arduino kursus lektion 4:

Arduino Programmering

Projekt - RoboNet Del Journal.

Projekt Når maskinen reagerer - Dataopsamling og aktuatorer

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

IAI Quick Start Guide

Filnavn: main.c

danske karakterer på Lcd

DAGLIG BETJENING AF PS4

Af: OZ7EC Erik Christiansen Chiptemperatur med Arduino

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

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

TG 8. Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: Modtaget af: Søren Knudsen

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

Journal JTAG: Udarbejde af: Benjamin Grydehøj I samarbejde med PDA Projektgruppen. Elektronikteknologafdelingen på Erhvervsakademi Fyn.

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

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

Elektronisk timer TT 34 U P. Comadan A/S, Messingvej 60, 8940 Randers SV, tlf: Frontpanel:

Hvorfor & Hvordan lære Elever At programmere Arduinoer

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

Microcontroller, Arduino

Andreas Nordbek & Kristoffer Skude Jensen. DMX Styring Side 1 af 15

Hardware dokumentation Skrevet af. Gruppen. Version 1.0

CANSAT & ARDUINO step by step

2x50 ETHERNET MODUL. RS485 slave med Ethernet-IP. Gælder for: Program nr.: AUXSLAVE v1 Dokument nr.: 0422md2x50-2v1 Dato:

SSI GSM PORT kontrol brugervejledning. SSI GSM PORT brugervejledning V1.2

Indholdsfortegnelse :

uprocessorens hardware

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

En krystalstabil oscillator til dit næste projekt

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

Side 2 CS 9452 Brugervejledning. Afsnit Navn Side. 1 Ordforklaring (terminologi) 3. 3 Betjeningsknapper og -lamper 6

up/ansi Eksamensspørgsmål

Sider og segmenter. dopsys 1

Kravspecifikation For. Gruppen

Opgaver - PLC - analogteknik - forbindelsesteknik...3 Opgaver - PLC - analogteknik - programmering...9

READX-EM&MF WIEGAND slave kodetastatur & proxlæser

Detter dokument er kun til intern brug og klassificeret som strengt fortroligt. Forfatteren tager forbehold for alle fejl og mangler.

Hvorfor & Hvordan lære. at programmere Arduinoer

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

Dokumentation af UR Med børnetimer til TV-visning

Optimering af fraværsregistrering

Projekt E1PRJ1 Emne: Strukturering Softdrink-Automat Gruppe: 6 Dato: 20. marts 2006 Medlemmer: Benjamin Sørensen, Jacob Nielsen, Klaus Eriksen,

LCD Modul. Ved Power-on skal LCD-displayet initieres, og evt. indstilles til 4-bit kommunikation.

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

Intro til AVR. Mads Pedersen, OZ6HR

Delta Elektronik A/S - AKD

BRUGERVEJLEDNING FLTA

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

PCR 40 Door Access Control unit

En akset styring SERIE P9521

BRUGERMANUAL DAB DIGITAL RADIO

SSI GSM Fjernbetjenings system for porte/garage døre

2. De 7 signaler skal kodes til en 3-bit kode. Enkodningen skal prioriteres som beskrevet i afsnit?? på side??.

Indholdsfortegnelse:

Overvågning af punktsug, URANOS LOCAL EXHAUST GUARD

Betjeningsvejledning. SMS modul

Software Dokumentation

WT-9001 GSM Fjernkontrol med SMS/GPRS alarm kontrol system Version

Indholdsfortegnelse: Sikkerhedsprocedurer: Chauvin Arnoux CA 27 Side Fejl! Ukendt argument for parameter.

Nedenstående opgaver er lavet til en Allen-Bradley PLC, men uden videre tilpasses andre PLC typer.

SSI-9001 IP65. Installations vejledning. SSIHuset v/svane Electronic ApS. GSM fjern kontrol og alarm system

Arduino Programmering

Processer og tråde. dopsys 1

Fysisk Design Instruktorer Troels, Søren og Oskar

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

Transkript:

Programmering for begyndere Brug af Arduino Programmeringskursus Interrupt - Arduino EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Interrupts Programmeringskursus Genbrug Interrupts Betyder blot at man afbryder det man er i gang med. Afbrydelse sker på maskinkode niveau, ikke i C-koden. Interrupts udnyttes Når man skal reagere med noget som indtræffer sjældent - man er fri for at holde øjet hele tiden. Når noget indtræffer som kræver øjeblikkelig handling. F.eks. et signal / en tilstand der kun er der kortvarigt Man kan vælge at se bort fra interrupts i kritiske dele af programmet.

Interrupts Intern og ekstern interrupt Intern interrupt er styret fra en timer startet af et program Kunne bruges ved en frekvenstæller Kunne være en stepmotor som skulle have et skub med bestemte intervaller Alt sammen noget hvor vi måske er i gang med noget andet når det skal ske. Det er emnet for næste gang Ekstern interrupt er styret fra ekstern hardware Kunne være impulser fra noget der drejer rundt Kunne være signal fra et tastatur, trykknap Alt sammen noget hvor vi skal reagere hurtigt uanset hvad programmet ellers laver og signalet måske kun er der kortvarigt. Det er emnet for nu.

Interrupts Ved interrupt skal der ske følgende: Programmet skal afbryde, det som er i gang Programmet skal finde ud af hvad det er, som kræver opmærksomhed Programmet skal tage hånd om hændelsen Programmet skal vende tilbage til det som var i gang. Set fra mikroprocessoren er problemet det samme om det er et internet eller et eksternt interrupt. Der er et vi kender godt: RESET og er bl.a. Power-on Reset,

Interrupt Programmeringskursus Den lette eksterne interrupt De digitale ind- udgange analoge udgange: Pin / ben Dig. ind/ud Anal. udg. 0 RX 1 TX 2 Ext intr 0 3 Ext intr 1 PWM 4 5 PWM 6 PWM 7 Pin / ben Dig. ind/ud Anal. udg. 8 9 PWM 10 PWM 11 PWM 12 13 (Diode) 5

Interrupt Fra program til hardware Programmeringskursus Styr på det med hardware Når vil vil bruge eksternt interrupt må vi genoverveje brug af ben på Arduino. Hidtil har vi defineret vores display ved følgende kommando: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Hvad er det nu det betyder. Lad os lige se på syntaksen:

Interrupt Programmeringskursus Fra program til hardware LiquidCrystal lcd(12, 11, 5, 4, 3, 2); betyder Ben 0 RX 1 TX 2 Ext intr 0 3 Ext intr 1 PWM Display d7 d6 4 d5 5 PWM d4 6 PWM 7 Ben 8 9 PWM 10 PWM Display 11 PWM Enable 12 RS 13 Det er vanskeligt at anvende ekstern interrupt 7

Display Arduino Programmeringskursus Genbrug LiquidCrystal() Syntaks LiquidCrystal(rs, enable, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) Ofte brugt med rw til stel LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) RS = 0 : Kommandoer (CGRAM) RS = 1 : Tegn der vises på display (DDRAM) enable : Angive at data er stabile Det tager vores C- kommandoer sig af 8

Interrupt Programmeringskursus Fra program til hardware Forslag: LiquidCrystal lcd(12, 11, 6, 5, 4, 3); Ben 0 RX 1 TX 2 Ext intr 0 3 Ext intr 1 PWM Display d7 4 d6 5 PWM d5 6 PWM d4 7 Ben 8 9 PWM 10 PWM Display 11 PWM Enable 12 RS 13 Nu kan ben 2 bruges til ekstern interrupt. 9

Interrupt - Software Ekstern interrupt Et interrupt er mulig efter følgende sætning i programmet, normalt i setup(): attachinterrupt(interrupt, funktion, mode) hvor: interrupt : Interrupt nummer. funktion : Funktion som kaldes når interrupt indtræffer. mode : Den hændelse som skal aktiver interrupt. Det tager vi lidt efter lidt. Der er faktisk også detachinterrupt(interrupt) ikke så vigtig

Interrupt - Software Beskrivelse af (for Arduino): attachinterrupt(interrupt, funktion, mode); Det kikker vi på om lidt. interrupt : værdi 0 eller 1 (Svarer til ben 2 hhv. ben 3) funktion : Navnet på den funktion, som skal aktiveres når der indtræder et interrupt. (Interrupt Service Routine - ISR). mode : Interrupt hændelse. Kan antage værdierne LOW : Interrupt når ben er lav. CHANGE : Interrupt når benet ændre sig. RISING : Interrupt når benet går fra lav til høj FALLING : Interrupt når benet går fra høj til lav.

Interrupt - Software Eksempel på interrupt definition attachinterrupt(0, handling, FALLING); Dette betyder at interrupt sker når der indtræffer ben 2 går fra høj til lav. Det er funktionen handling() som kaldes. Denne funktion skal være af typen void handling(), Dvs. returnerer ingenting og har ikke nogen argumenter. Så længe handling() er kaldt udsættes andre interrupts. Det kan have betydning hvis begge interrupts benyttes, eller nogle af timer funktionerne bruges. Bør (skal) være kort.

Interrupt - Software Eksempel /* Ændre LED på ben 13 når interrupt på ben 2 aktiveres */ int LED = 13; volatile int state = LOW; void setup() { pinmode(led, OUTPUT); attachinterrupt(0, blink, CHANGE); } void blink() { state =!state; } void loop() { /* her kunne være masser af kode */ digitalwrite(led, state); } Det er altså i denne kode der kan ske Interrupt, selvom der intet står her om interrupt.

Interrupt - Software Om Interrupt Service Rutinen (ISR) I det foregående var det funktionen handling() og i programmet blink(). Om den gælder Variable som ændres under interrupt skal være volatile, dvs. variablen skal bevares fra kald til til kald. Den skal findes i RAM, ikke på stakken. Interrupt service rutinen har intet argument. Interrupt service rutinen bør være kort, fordi så længe den er kaldt vil Arduino ikke reagere på interrupts.

Interrupt - Software Hvad sker der når vi afbryder noget? Vi skal se på hvorledes vi afbryder et program og kan vende tilbage til det og fortsætte som ingen ting var hændt. HUSK: Det er på maskinkode niveau vi afbryder dvs. inden for 64 µs. - Det vil sige det er en relativt simpelt proces vil afbryder det er noget med at flytte data rundt. Problem: Hvad skal der til for at kunne genoptage afviklingen af programmet igen? Det viser sig at det vigtigste / eneste er SREG status registeret.

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 Problemet er at det der sker under interrupt kan overskrive SREG og dermed vil brogramafviklingen gå i kludder når interrupt afsluttes.

Interrupt Gemme SREG void loop() { uint8_t oldsreg = SREG; cli(); Pos = encoderpos; SREG = oldsreg;...// mere kode } Kritisk instruktion Her gemmers SREG Her hindres (disables) Interrupt Her flyttes SREG tilbage og automatisk enables interrupt Jeg vil foreslå at vi kikker på det program hvorfra koden kommer. Først noget lidt andet

Interrupt Kritiske dele af programmet Som vi lige har set kan der være dele af programmet hvor vi ikke ønsker interrupt. Umiddelbart er der følgende funktioner til dette brug: nointerrupts() : Disabler interrupt. Visse timer funktioner virker heller ikke og indkommende seriekommunikation afbrydes også interrupts() : Enabler interrupt igen

Interrupt Knapt så godt dokumenteret er: cli(): Disabler interrupt. Nu kan SREG gemmes. Når SREG reetableres ved at gemme noget i SREG, enables interrupt igen. sei(): Enabler interrupt igen. Disse funktioner er direkte hentet fra maskininstruktionerne for ATmega328P og de funger tilsyneladende.

Interrupt Eksempel Programmeringskursus /*RotaryEncoderInterrupt sketch*/ const int encoderpina = 2; const int encoderpinb = 4; int Pos, oldpos; volatile int encoderpos = 0; void setup() { pinmode(encoderpina, INPUT); pinmode(encoderpinb, INPUT); digitalwrite(encoderpina, HIGH); digitalwrite(encoderpinb, HIGH); Serial.begin(9600); attachinterrupt(0, doencoder, FALLING); } Her etableres interrupt. void loop() { uint8_t oldsreg = SREG; cli(); Pos = encoderpos; SREG = oldsreg; if(pos!= oldpos) { Serial.println(Pos,DEC); oldpos = Pos; } delay(1000); /* her kunne laves meget mere kode. F.eks. udlæsning til display*/ } Her kan interrupt ske Kritisk kode

Interrupt Eksempel forsat Programmeringskursus void doencoder() { if (digitalread(encoderpina) == digitalread(encoderpinb)) encoderpos = encoderpos +1; // tæller op hvis benene er ens else encoderpos = encoderpos - 1; // Tæller ned hvis benene er forskellige } Forklaring næste overhead

Interrupt Eksempel forsat Programmeringskursus Programmet forudsætter en enkoder som denne: Signal A Signal B Bevægelsesretning På faldende flanke er de forskellige

Interrupt Eksempel forsat Programmeringskursus Programmet forudsætter en enkoder som denne: Signal A Signal B Bevægelsesretning På faldende flanke er de ens

Interrupt Interrupt prioritet: Arduino (Atmega328P) har 26 niveauer for interrupt. Vector No. Souce Interrupt Definition 1 RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset 2 INT0 External Interrupt Request 0 3 INT1 External Interrupt Request 1 4 PCINT0 Pin Change Interrupt Request 0 5 PCINT1 Pin Change Interrupt Request 1 6 PCINT2 Pin Change Interrupt Request 2 7 WDT Watchdog Time-out Interrupt 8-17 Forskellige timere 19-26 Oplysninger om USART,