LV 18.04.2024 Grundlagen der Mikrocontrollertechnik 4EIT 4EMO 4MT im Sommersemester 2023
(EN google-translate)
(PL google-translate)
Themen
|
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
|
3. Robo-Sumo
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"
Übung 1
|
Übung 2
|
NEU ergänzt im Sommersemester 2024, LV #4, 18.04.2024:
Themen heute:
|
Bild 0-1: Aufbau der Drehkodierer-Anzeige auf einer Laborplatine.
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: