LV 04.04.2024 Grundlagen der Mikrocontrollertechnik 4EIT 4EMO 4MT im Sommersemester 2023
(EN google-translate)
(PL google-translate)
|


|

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.



|

9. Höhere Programmiersprachen kommen zum Einsatz um die Wartbarkeit und Transparenz von Programmen zu verbessern.
Teil 2: Vorbereitungen auf die erste Übung
|


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:


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:

ENDE NEU ergänzt im Sommersemester 2024, LV #2, 04.04.2024 (hybrid).