kramann.info
© Guido Kramann

Login: Passwort:










Archiv
2 SoSe2022
..2.1 MIK
..2.2 SRT
..2.3 HDL
..2.4 AUT
..2.5 SLE
2 WS2020_21
..2.1 RTS
....2.1.1 day_by_day
..2.2 IE
....2.2.1 day_by_day
..2.3 ES
..2.4 EFSEE
....2.4.1 day_by_day
..2.5 KF
....2.5.1 day_by_day
....2.5.2 Haikus
....2.5.3 Haikus_en
..2.6 CC
....2.6.1 day_by_day
2 WS2021_22
..2.1 RTS
....2.1.1 day_by_day
....2.1.2 Versuch002
....2.1.3 Versuch003
....2.1.4 Versuch004
....2.1.5 Versuch005
....2.1.99 Material
..2.2 FTS
....2.2.1 day_by_day
..2.3 ESY
....2.3.1 day_by_day
..2.4 INFmecha5
....2.4.1 day_by_day
..2.5 REGmecha5
....2.5.1 day_by_day
2 WS2023_24
..2.1 day_by_day_RST
..2.2 day_by_day_SRT
..2.3 day_by_day_FTS
..2.4 day_by_day_KF
3 SoSe2021
..3.1 STR
....3.1.1 day_by_day
..3.2 SLE
....3.2.1 day_by_day
..3.3 HDL
....3.3.1 day_by_day
..3.4 MIK
....3.4.1 day_by_day
3 SoSe2024
..3.1 Mik_21_03_2024
..3.2 Mik_04_04_2024
..3.3 Mik_11_04_2024
..3.4 Mik_18_04_2024
..3.5 Mik_25_04_2024
..3.6 Mik_02_05_2024
..3.7 Mik_16_06_2024
..3.8 Mik_23_05_2024
..3.9 Mik_30_05_2024
..3.10 Mik_05_06_2024
..3.11 Mik_13_06_2024
3 WS2022_23
..3.1 day_by_day_RST_3MB
..3.2 day_by_day_RT2_5MT
..3.3 day_by_day_EMB_7MT
..3.4 day_by_day_ABP_7MT
..3.5 day_by_day_FTS_MMB
..3.6 day_by_day_KF
4 SoSe2023
..4.2 RTS_day_by_day
..4.3 MIK_day_by_day
..4.4 AUT_day_by_day
..4.5 HDL_day_by_day
4 WS2024_25
..4.1 ING_day_by_day
....4.1.1 ING_Do_26_09_2024
....4.1.2 ING_Do_10_10_2024
....4.1.3 ING_Do_17_10_2024
....4.1.4 ING_Do_24_10_2024
....4.1.5 ING_Do_07_11_2024
....4.1.6 ING_Do_14_11_2024
....4.1.7 ING_Do_21_11_2024
....4.1.8 ING_Do_28_11_2024
....4.1.9 ING_Do_05_12_2024
....4.1.10 ING_Do_12_12_2024
....4.1.11 ING_Do_19_12_2024
..4.2 INF_day_by_day
....4.2.1 INF_Fr_27_09_2024
....4.2.2 INF_Fr_04_10_2024
....4.2.3 INF_FR_18_10_2024
....4.2.4 INF_Fr_25_10_2024
....4.2.5 INF_Fr_08_11_2024
....4.2.6 INF_Fr_15_11_2024
....4.2.7 INF_Fr_22_11_2024
....4.2.8 INF_Fr_29_11_2024
....4.2.9 INF_Fr_06_12_2024
....4.2.10 INF_Fr_13_12_2024
....4.2.11 INF_Fr_20_12_2024
....4.2.12 INF_Fr_10_01_2025
..4.3 FTS_day_by_day
....4.3.1 FTS_Mi_25_09_2024
....4.3.2 FTS_Mi_02_10_2024
....4.3.3 FTS_Mi_09_10_2024
....4.3.4 FTS_Mi_16_10_2024
....4.3.5 FTS_Mi_23_10_2024
....4.3.6 FTS_Mi_30_10_2024
....4.3.7 FTS_Mi_06_11_2024
....4.3.8 FTS_Mi_13_11_2024
....4.3.9 FTS_Mi_20_11_2024
....4.3.10 FTS_Mi_27_11_2024
....4.3.11 FTS_Mi_04_12_2024
....4.3.12 FTS_Mi_11_12_2024
....4.3.13 FTS_Mi_18_12_2024
6 Ing
..6.1 Bauplan
....6.1.1 Bootstick
....6.1.2 Xubuntu
....6.1.3 Webserver
....6.1.4 Hotspot
....6.1.5 Videostream
....6.1.6 Lampe
....6.1.7 Chassis
....6.1.8 Akku
....6.1.9 Motore
....6.1.10 Laborsteckboard
....6.1.11 Antriebstest
7 007
..7.1 Einschalten
..7.2 Vorversuche
kramann.info
© Guido Kramann

Login: Passwort:




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

(EN google-translate)

(PL google-translate)

Themen

  1. Lauflicht mit Auswahl
  2. Quiz
  3. Robo-Sumo
  4. PWM Prinzip
  5. PWM mit Arduino-Befehlen
  6. Preview: PWM über Register-Konfigurationen
  7. Übungen

1. Lauflicht mit Auswahl

//Rotieren realisieren
unsigned int arr[] = {0b1111111100000000,
                      0b1000000010000000,
                      0b1010101010101010};
unsigned int auswahl = 0;
void setup() 
{
    DDRB = 0b11111111;
    Serial.begin(9600);
}
void loop() 
{
    if(Serial.available())
    {
         auswahl = arr[Serial.read()%3];
    }
    auswahl = ((auswahl << 1) | (auswahl >> 15)) ;     
    PORTB = auswahl;
    delay(200);
}

Code 0-1: Lauflicht mit Auswahl.

2. Quiz

  • Wie groß ist ein Register?
  • Welche Register-Typen gibt es im Zusammenhang mit digitalen Ein- und Ausgängen?
  • Was ist dezimal 1<<3
  • Was ist dezimal 1>>3
  • Was ist dezimal 3<<1
  • Was ist dezimal 0<<1
  • Was ist dezimal 1<<0
  • Was ist dezimal 1<
  • Was ist dezimal (1<
  • Was ist dezimal 0b00001111 & 0b11110000
  • Was ist dezimal 0b00001111 | 0b11110000
  • Was ist dezimal 0b00001111 | ~0b11110000

3. Robo-Sumo

https://www.youtube.com/watch?v=lUpUQf16qzQ
83_AV/05_SUMO/10_Umsetzung -- Zustandsübergangs-Modell

4. PWM Prinzip

40_Mikrocontroller/04_PWM

5. PWM mit Arduino-Befehlen

//Dimmen einer LED mittels "analogWrite"
void setup() 
{
  
}
int x=0;
int y=0;
void loop() 
{
    if(x<256)
       y=x;
    else
       y=511-x;   
    analogWrite(9,y);
    x++;
    x%=512;
    delay(5);
}

Code 0-2: Dimmen einer LED mittels "analogWrite"

https://www.arduino.cc/reference/en/libraries/servo/
https://docs.arduino.cc/learn/electronics/servo-motors
Übung 1
  • Schreiben Sie ein Lauflicht mit 8 möglichen Zuständen aller 8 LEDs.
  • Die 8 Zustände sollen in 8 Byte-Variablen in einem Array abgelegt sein.
  • In einem der 8 Schritte 0..7 wird das Muster aus dem Array am korrespondierenden Platz 0..7 ausgewählt und angezeigt.
Übung 2
  • Über die Tasten 1,2,3,4,5 sollen bei einem Servo die Winkel -90 Grad, -45 Grad, 0 Grad +45 Grad und +90Grad einstellbar sein.
  • Außerdem soll jeweils eine von sieben LEDs in einer Reihe passend dazu aufleuchten. Die mittlere LED grün, die anderen rot.

NEU ergänzt im Sommersemester 2024, LV #4, 18.04.2024:


Themen heute:

  1. Besprechung der Übung zur Kodieranzeige
  2. Neues Thema: PWM-Signale (Theorie)
  3. Bearbeitung der Übung zur Kodieranzeige
  4. Neue Übung: Dimmer, 16 Helligkeitsstufen mit Kodierer auf LED bei Digital Out 7 einstellen (analogWrite)
  5. Musterlösung zu Kodieranzeige
  6. Musterlösung zu Dimmer
Aufbau der Drehkodierer-Anzeige auf einer Laborplatine.

Bild 0-1: Aufbau der Drehkodierer-Anzeige auf einer Laborplatine.

Test der Drehkodierer-Anzeige https://youtu.be/6F6wxnTZYuc
Musterlösung für den Drehkodierer mit Anzeige
uint8_t ziffer[] = {
0b00111111,//0  
0b00000110,//1  
0b01011011,//2  
0b01001111,//3  
0b01100110,//4  
0b01101101,//5  
0b01111101,//6  
0b00000111,//7  
0b01111111,//8  
0b01101111,//9  
0b01110111,//A  
0b01111100,//B  
0b00111001,//C  
0b01011110,//D  
0b01111001,//E  
0b01110001//F
};

void setup() 
{
     DDRB = 0b01111111;
     PORTB = 0b01111111;  
     DDRF &= 0b00001111;
     PORTF |= 0b11110000;
     pinMode(4,OUTPUT);
     pinMode(5,OUTPUT);
     pinMode(6,OUTPUT);
     pinMode(7,OUTPUT);
}

void loop() 
{
     DDRB = 0b01111111;
     PORTB = ~ziffer[(PINF>>4)];
     digitalWrite(4,((PINF & 0b00010000)>>4));
     digitalWrite(5,((PINF & 0b00100000)>>5));
     digitalWrite(6,((PINF & 0b01000000)>>6));
     digitalWrite(7,((PINF & 0b10000000)>>7));
}

Code 0-3: Drehkodierer mit Anzeige

Studentische Lösung:
uint8_t displayValue[16] = {

0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3

0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7

0b01111111, // 8
0b01101111, // 9
0b01110111, // A
0b01111100, // B

0b00111001, // C
0b01011110, // D
0b01111001, // E
0b01110001, // F

};


void setup() {
  //explicitly tells the register B, all pins are outputs
  DDRB = 0xFF;
  // DDRF &= tells the register F, the leftmost 4 ports are inputs while not
  // altering the other bits
  DDRF &= ~((1 << PF4) | (1 << PF5) | (1 << PF6) | (1 << PF7));
  // PORTF |= sets the leftmost 4 bits to activate internal pull-up
  PORTF |= (1 << PF4) | (1 << PF5) | (1 << PF6) | (1 << PF7);

}


void loop() {
  
  int switchValue = (PINF & ((1 << PF4) | (1 << PF5) | (1 << PF6) | (1 << PF7))) >> PF4;

  PORTB = ~(displayValue[switchValue]);

}

Code 0-4: Drehkodierer mit Anzeige


ENDE NEU ergänzt im Sommersemester 2024, LV #4, 18.04.2024: