kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




LV 04.04.2024 Grundlagen der Mikrocontrollertechnik 4EIT 4EMO 4MT im Sommersemester 2023

(EN google-translate)

(PL google-translate)

  1. Was ist ein Mikrocontroller?
  2. Wozu werden Mikrocontroller verwendet?
  3. Was ist ein engebettetes System?
  4. Wer stellt Mikrocontroller her?
  5. Wie unterscheidet sich ein Mikrocontroller von einem PC?
  6. Wie zeichnet sich ein Mikrocontroller-Programm aus?
  7. Was ist ein Cross-Compiler?
  8. Was ist Maschinen nahes Programmieren?
  9. Worin liegt der Sinn darin, höhere Programmiersprachen wie C oder C++ zu verwenden?
1.1 Mikrocontroller auf Wikipedia
1.2 Foto Dual In Line DIL Bauweise eines ATmega32 von Atmel.
  • 2. Durch die Verwendung von Mikrocontrollern werden vormals rein mechanische und elektromechanische Geräte, beispielsweise solche aus dem Haushaltsbereich wie Herd, Kühlschrank usw., zu sehr viel preiswerter herzustellenden anteilig mehr elektronischen Geräten.
3. Eingebettete Systeme auf Wikipedia.
"... Im Februar 2021 erklärtedie Bundesregierung, nach ihrer Kenntnis seien Lieferengpässe bei Halbleitern und Halbleiter-Chips für die Automobilindustrie primär entstanden, weil es weltweit nur eine sehr begrenzte Zahl von Herstellern gebe, welche die von der Automobilindustriebenötigten Halbleiter-Chips fertigten. Zudem könnten deren Produktionskapazitäten kurzfristig nicht ausgeweitet werden. Zu Prognosen und Umsatzanalysenbei Halbleitern äußerte die Bundesregierung, laut Prognosen werde sich der weltweite Umsatz an Halbleiterchips im Jahr 2024 auf 532 Mrd. US Dollar erhöhen (rund 22% höher als in 2019). Asien (inkl. China) werde mit 62% der größte Chipabnehmer sein, gefolgt von Amerika mit rund 21% und Europa rund 9%. Aus Sicht der Halbleiterfertigung (ohne die sog. Foundries -Fertigungsdienstleister) sei die USA mit 50% dominierend am Umsatz beteiligt, gefolgt von Südkorea (18%), Japan (10%), Europäische Union (9%), Taiwan (6%) und China (5%). Ein anderes Bild ergebe sich, wenn die Foundries in der Analyse berücksichtigt würden. Mit rund 76% kontrollierten China, Taiwan, Südkorea und Japan den Halbleiterumsatzmarkt. Die USA falle mit 11% zurück, gefolgt von der Europäischen Union mit 8% und Singapur mit 5%.... "

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.
  • 7. Mikrocontroller besitzen in der Regel keine Benutzerschnittstelle wie ein PC. Das Entwickeln und Kompilieren der Programme für einen Mikrocontroller erfolgt darum auf einem PC mit einer Entwicklungsumgebung und einem Cross-Compiler.
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
  1. Booten und Verwenden der (Linux-) Xubuntu-Distribution auf den PC-Pool-Rechnern
  2. Verwendung der Arduino-IDE
  3. Konfiguration der Arduino-IDE für einen über USB verbundenen Arduino Micro - Mikrocontroller
  4. Schreiben eines Programms
  5. Kompilieren eines Programms
  6. Übertragen eines Programms auf den Mikrocontroller
  7. Ansteuern digitaler Ein- und Ausgänge über Arduino-Befehle
  8. Vorbesprechung der ersten Übungsaufgaben
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

"Das Programm setzt den digitalen Ausgang D12 als Ausgangspin und verwendet die digitalWrite()-Funktion, um die LED ein- und auszuschalten. Das Programm verwendet auch die delay()-Funktion, um eine Pause zwischen den Zustandsänderungen der LED einzufügen. In diesem Fall warten wir 500 Millisekunden (0,5 Sekunden) zwischen dem Einschalten und Ausschalten der LED, um eine Frequenz von einem Hertz zu erreichen. "

...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).