LV 04.04.2024 Grundlagen der Mikrocontrollertechnik 4EIT 4EMO 4MT im Sommersemester 2023
(EN google-translate)
(PL google-translate)
|
1.2 Foto Dual In Line DIL Bauweise eines ATmega32 von Atmel.
|
zu 4. Quelle: Bundestag Einzelanfrage: Einzelfragen zurHalbleiterproduktion, Seite 10. Web 21.03.2023: https://www.bundestag.de/resource/blob/900450/25b9b36d92928f932b242efc8578386a/WD-5-004-22-pdf-data.pdf
Hersteller in Europa: NXP, ST, Infineon. Japan: Renesas. USA: Microchip.
5.1 Alan Turings Grundkonzept
5.2 Die unterschiedliche Architektur beim PC und beim Mikrocontroller
6. Wesentliches Merkmal eines Mikrocontroller-Programms: Die Loop-Funktion und die Manipulation von Registern.
|
8. Exkurs: Programmentwurf in Assembler.
9. Höhere Programmiersprachen kommen zum Einsatz um die Wartbarkeit und Transparenz von Programmen zu verbessern.
Teil 2: Vorbereitungen auf die erste Übung
|
96_Arduino -- Überblick zum Arduino Micro
96_Arduino/01_Lauflicht -- Hardware (Steckboard mit Fritzing dargestellt) und Software (C / Arduino-Befehle) für ein "Lauflicht".
Im Verlauf des Unterrichts entstandene Quelltexte:
void setup()
{
pinMode(1,OUTPUT);
}
void loop()
{
digitalWrite(1,HIGH);
delay(1000);
digitalWrite(1,LOW);
delay(1000);
}
Code 0-1: Blinkende LED
void setup()
{
pinMode(1,OUTPUT);
pinMode(2,INPUT);
digitalWrite(2,HIGH); //Pullup aktivieren, intern auf +5V setzen
}
int x;
void loop()
{
x = digitalRead(2);
if(x<=0)
{
digitalWrite(1,HIGH);
delay(1000);
digitalWrite(1,LOW);
delay(1000);
}
}
Code 0-2: Blinkende LED mit Taster
void setup()
{
pinMode(1,OUTPUT);
pinMode(2,INPUT);
digitalWrite(2,HIGH); //Pullup aktivieren, intern auf +5V setzen
}
int x;
void loop()
{
x = digitalRead(2);
if(x<=0)
{
//digitalWrite(1,HIGH);
//PORTD = 8;
PORTD = 0b00001000;
delay(1000);
//digitalWrite(1,LOW);
PORTD = 0;
delay(1000);
}
}
Code 0-3: Blinkende LED unter Verwendung von Register-Befehlen
Programmieren mit Hilfe von ChatGPT (https://chat.openai.com/chat 21.03.2023):
Schreibe ein Arduino-Programm für den Arduino Micro, bei dem eine LED auf dem digitalen Ausgang D12 mit einem Hertz zum Blinken gebracht wird.
void setup() {
pinMode(12, OUTPUT); // setze digitalen Ausgang D12 als Ausgang
}
void loop() {
digitalWrite(12, HIGH); // schalte LED an
delay(500); // warte 500 Millisekunden
digitalWrite(12, LOW); // schalte LED aus
delay(500); // warte weitere 500 Millisekunden
}
Code 0-4: Antwort von ChatGPT
...und Kommentar von ChatGPT
ÜBUNG: Bauen Sie eine Arduino-Schlatung für Blinken auf und flashen Sie nachfolgende Programme.
Im Unterricht entstandene Programme
void setup()
{
pinMode(12,OUTPUT);
}
void loop()
{
digitalWrite(12,1);
delay(500);
digitalWrite(12,0);
delay(500);
}
Code 0-5: Blinken auf digitalen Pin 12 mittels Arduino-Befehlen.
void setup()
{
//pinMode(12,OUTPUT);
DDRD = 0b01000000;
}
void loop()
{
//digitalWrite(12,1);
PORTD = 0b01000000;
delay(500);
//digitalWrite(12,0);
PORTD = 0b00000000;
delay(500);
}
Code 0-6: Blinken auf digitalen Pin 12 mittels Registerbefehlen.
#2 Fr 31.03.2023
NEU ergänzt im Sommersemester 2024, LV #2, 04.04.2024 (hybrid):
// Definiere den Pin für die LED
const int ledPin = 11;
void setup() {
// Setze den Pin für die LED als Ausgang
//pinMode(ledPin, OUTPUT);
DDRB = 0b10000000; //PB7 als Ausgang konfigurieren.
//DDRB = 128;
}
void loop() {
// Schalte die LED ein
//digitalWrite(ledPin, HIGH);
PORTB = 0b10000000; // 5 Volt auf Digitalpin 11 'rausschicken, bzw. auf PB7
// Warte für 500 Millisekunden (Halbe Periode)
delay(500);
// Schalte die LED aus
//digitalWrite(ledPin, LOW);
PORTB = 0b00000000;
// Warte für weitere 500 Millisekunden (andere Hälfte der Periode)
delay(500);
}
Code 0-7: Blinken auf PB7 mit Registerbefehlen.
Siehe auch:
96_Arduino/22_Universal/02_LED_Leiste
96_Arduino
void setup()
{
//DDRB = 0b10000000; //PB7 als Ausgang konfigurieren.
//NUR PB7 setzen, ohne die anderen Bits zu verändern!:
DDRB = DDRB | 0b10000000; //Bitweises ODER-Verknüpfen eines Registers mit einer Bitmaske
}
void loop() {
PORTB = PORTB | 0b10000000; // 5 Volt auf Digitalpin 11 'rausschicken, bzw. auf PB7
delay(500);
PORTB = PORTB & 0b01111111;
delay(500);
}
Code 0-8: Nur höchstwertigstes Bit manipulieren (PB7), mit Hilfe von Bitmasken und Bitoperationen.
void setup()
{
//DDRB = 0b10000000; //PB7 als Ausgang konfigurieren.
//NUR PB7 setzen, ohne die anderen Bits zu verändern!:
//DDRB = DDRB | 0b10000000; //Bitweises ODER-Verknüpfen eines Registers mit einer Bitmaske
//DDRB = DDRB | (1<<7); //Verschiebe die 1 sieben mal nach links:
// 0b00000001 << 7 => 0b10000000
//
//DDRB = DDRB | (1<<PB7);
DDRB |= (1<<PB7); //bedeutet das Gleiche, wie Zeile darüber, Kurzschreibweise
}
void loop() {
//PORTB = PORTB | 0b10000000; // 5 Volt auf Digitalpin 11 'rausschicken, bzw. auf PB7
PORTB |= (1<<PB7);
delay(500);
//PORTB &= (0<<PB7); // PORTB = PORTB & 0b00000000 ...ist nicht das, was wir wollen!!
PORTB &= ~(1<<PB7); // PORTB = PORTB & ~(0b10000000), passt, weil: ~(0b10000000) == ~(0b01111111)
// (1<<0) == 1 == 2^0
// (1<<1) == 2 == 2^1
// (1<<2) == 4 == 2^2
// (1<<3) == 8 == 2^3
// ...
// (1<<7) == 128 == 2^7
delay(500);
}
Code 0-9: Verwendung des Linksshift-Operators.
siehe auch:
40_Mikrocontroller/03_DigitalIO
ENDE NEU ergänzt im Sommersemester 2024, LV #2, 04.04.2024 (hybrid).