kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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

(EN google-translate)

(PL google-translate)


NEU ergänzt im Sommersemester 2024, LV #5, 25.04.2024 FOLGT DER ALTEN EINFÜHRUNG ZU PWM: 2. Quiz, 3. ROBOSUMO usw. PLUS:


  1. Um die aktuelle Schaltung nicht zerstören zu müssen, wird "Code 3-20: Dimmen einer LED mittels analogWrite" auf Digital Ausgang 13 umgesetzt!
  2. Modifizieren Sie das Programm so, dass nun über den Drehkodierer aus der letzten Übung 16 Helligkeitsstufen eingestellt werden können. Dazu muss das Programm von letzter Woche mit dem aktuellen kombiniert werden.
  3. Um "Code 3-23: Modellbau-Servos auf OC1A und OC1B mittels Timer 1 mit hoher Genauigkeit ansteuern." umzusetzen, werden temporär die vorhandenen Anschlüsse abgezogen.
  4. Die Aufgabe wird so modifiziert, dass über den Drehkodierer 16 äquidistante Winkelstellungen eingestellt werden können.
  5. Die Aufgabe wird so modifiziert, dass der Servo mit 50Hz statt 80Hz arbeitet. Nehmen Sie alle notwendigen Anpassungen vor.
int z=0;
int u=0;
void setup()
{
  pinMode(13, OUTPUT);
}
void loop()
{
   if (z<=((u/1000)%2)){
    digitalWrite(13, HIGH);
    
   }
   else{
    digitalWrite(13, LOW);
    
   }
  delay(1);
   z++;
   z%=20;
   u++;
 
}

Code 0-1: Ü1: Nur Mit Hilfe eines delay(1) und einem normalen digitalen Ausgang einen Servo ansteuern. (Springt zwischen +/-45Grad hin und her)


ENDE NEU ergänzt im Sommersemester 2024, LV #5, 25.04.2024:


Themen
  1. Prinzip der Generierung von PWM-Signalen bei Mikrocontrollern
  2. Gemeinsame Analyse einer Servo-Ansteuerung via PWM über Register-Konfigurationen
  3. Übungen

1. Prinzip der Generierung von PWM-Signalen bei Mikrocontrollern

40_Mikrocontroller/04_PWM/03_Generierung

2. Gemeinsame Analyse einer Servo-Ansteuerung via PWM über Register-Konfigurationen

Datenblatt zum ATmega32u4 -- https://ww1.microchip.com/downloads/en/devicedoc/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf
#define WMIN 1000
#define WMITTE 1500
#define WMAX 2000
#define SCHRITTE 1000
//Mode 8
//Phasen- und Frequenz-korrekt
//WGM1   3 2 1 0
//       1 0 0 0
//ICR1=..... TOP
//fpwm = fclk/(2*N*TOP)
//Vorteilung
//N=8
//80Hz = 16000000/(2*8*TOP)
//TOP = 16000000/(2*8*80Hz)=12500
//dt==1000ms*(1/80Hz)/12500 == 0,001ms (1 Schritt == 0,001ms)
//=>
//1ms == 1000 Schritte
//1,5ms == 1500 Schritte
//2ms == 2000 Schritte
void setup() 
{
       TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0)
              | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
       TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10); //Vort. 8, s.S. 135       
       ICR1=12500;       
       DDRB |= (1<<PB5); //OCR1A
       DDRB |= (1<<PB6); //OCR1B
       OCR1A = WMITTE; //PWM-Breite auf Mitte setzen.  
       OCR1B = WMITTE; //PWM-Breite auf Mitte setzen.  
}
void loop() 
{
       OCR1A = WMAX; //PWM-Breite auf Null setzen.  
       OCR1B = WMAX; //PWM-Breite auf Null setzen.         
       delay(3000);    
       OCR1A = WMITTE; //PWM-Breite auf Null setzen.  
       OCR1B = WMITTE; //PWM-Breite auf Null setzen.         
       delay(3000);    
       OCR1A = WMIN; //PWM-Breite auf Null setzen.  
       OCR1B = WMIN; //PWM-Breite auf Null setzen.         
       delay(3000);    
}

Code 0-2: Modellbau-Servos auf OC1A und OC1B mittels Timer 1 mit hoher Genauigkeit ansteuern.

Übungen
  1. Testen Sie die Register-basierte Ansteuerung eines Servos "Modellbau-Servos auf OC1A und OC1B mittels Timer 1", s.o.
  2. Ergänzen Sie eine Funktion, der man einen Winkel als float-Wert übergibt (+/-90Grad) und den Servo in die gewünschte Position bringt.
  3. Nehmen Sie alle notwendigen Änderungen vor, wenn nun der Servo mit 50Hz angesteuert wird. -- Bringt das irgendwelche Vorteile?
  4. Recherchieren Sie, wie man den gewünschten Winkel über den seriellen Monitor an den Arduino schicken könnte und setzen das unter Verwendung der implementierten Funktion um.
  5. Zusatzaufgabe: Der aktuelle Winkel (+/-90Grad) soll mit Hilfe einer 4-fach-7-Segmentanzeige des Typs HDSP-B08G angezeigt werden.
Datenblatt zu HDSP-B08G: https://www.farnell.com/datasheets/2095874.pdf
Pinbelegung bei der 4-fach-7-Segmentanzeige HDSP-B08G.

Bild 0-1: Pinbelegung bei der 4-fach-7-Segmentanzeige HDSP-B08G.

Lage der Pins bei HDSP-B08G.

Bild 0-2: Lage der Pins bei HDSP-B08G.

Zuordnung der LEDs zu den Pins.

Bild 0-3: Zuordnung der LEDs zu den Pins.