Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
B basis
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • m242
  • basis
  • Wiki
  • interrupt

Last edited by Stephan Metzler Mar 12, 2019
Page history

interrupt

goodcode

Kriterien

  • kleine Prozessorbelastung
    • schnelle Reaktionszeit auf Signaländerungen
    • wenig / optimierte Variablen
    • sinnvolle Datentypen
    • keine delay Funktionen
    • keine Timer verwenden

Lösungsansätze

  • Interrupt
    • beschränkt verfügbar / einsetzbar
    • abhängig vom Board / Prozessor
  • volatile
    • in Kombination sinnvoll
  • Register
    • Bitoperation (komplex zum Programmieren)

Beispiel

/* Interrupt Port Mapping
   https://www.arduino.cc/en/Reference/PortManipulation
   https://arduino-projekte.webnode.at/registerprogrammierung/ein-ausgangsports/

   Port registers allow for lower-level and faster manipulation of the i/o pins.
   B (digital pin 8 to 13)
   C (analog input pins)
   D (digital pins 0 to 7)
*/

#define BAUDRATE 9600
#define DELAY 2000

void setup() {
  Serial.begin(BAUDRATE);
  Serial.println("Port Mapping");
  // D2 is INPUT - capactitive touch sensor
  // D2 is INTERRUPT (Arduino UNO)
  DDRD &= ~(1 << DDD2);

  // D8 is OUTPUT - led
  DDRB |= (1 << DDB0);

  // DDD2 (digital Port 2) interrupts loop by calling isr (interrupt service routine)
  // interrupt by: LOW - CHANGE - RISING - FALLING signal
  attachInterrupt(digitalPinToInterrupt(DDD2), isr, CHANGE);
}

// interrupt service routine toggles led
void isr() {
  Serial.print("*");
  // read pin D5 - touch sensor
  byte touch = (PIND & (1 << PIND2)) >> PIND2;
  Serial.print(touch);
  // toggle pin D8 - led
  if (touch) PORTB |= (1 << PORTB0);  // on
  else PORTB &= ~(1 << PORTB0);       // off
}

void loop() {
  Serial.print(".");
  delay(DELAY);
}

Ausführungen

interrupt

Das Arduino Projekt InterruptPortMapping ist im basis Projekt.

Clone repository

Home


1. und 2. Tag

Workshops

  • LCD
  • Led Bar
  • Led Ring
  • Led Stick
  • RFID
  • Speaker
  • WiFi

3. bis 5. Tag

Projekt


Utils

Nunchuck

Interrrupt

Testen


Bewertunsraster