ITG-ABI 17/18

16.04.2018

Korrekturhinweise / Lösungsvorschlag

Teil 1 Aufgabe 1

Mikrocontroller

Verwendeter µC: ATMEL AVR 8 Bit RISC.

1.2.1 150ms mit Timer-ISR realisieren

Die AVR-Controller verfügen über einen Vorteiler, daher ist ein Zähler in der ISR oft nicht notwendig.

Lösung mit 16Bit Timer 1 und CTC Interrupt

Zählwert: 150000

Vorteiler: 150000/65536 = 2,23 gewählt 8

OCR1A: (150000/8)-1= 18749

Probe: (18749+1)*8*1us=150ms

void init(){
  TCCR1B |= 1<<WGM12; // CTC-Mode
  TCCR1B |= 2; // Phi/8
  TIMSK |= 1<<OCIE1A; Interrupt einschalten
  OCR1A = 18749; // Vergleichswert
  //sei(); // Globale ISR-Freigabe
}

Lösung mit 8Bit Timer 0 und Overflow-Interrupt

Zählwert: 150000

Vorteiler: 150000/256 = 585,9 gewählt 1024

Vorsteller: 256-(150000/1024)= 109,51 gewählt 110

Probe: (256-110)*1024*1us= 149,5ms

void init()
  TCCR0B |= 5; // Phi/1024
  TIMSK |= 1<<TOIE0; Interrupt einschalten
  TCNT0 = 110; // Vorstellen
  //sei(); // Globale ISR-Freigabe
}

1.2.2 Struktogramm Timer-ISR für 16Bit Timer1 CTC

Struktogramm

1.2.3 Unterprogramm muster_ausgeben

void muster_ausgeben(){
  static unsigned char muster[]={0x00,0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
  PORTC = muster[blink_zaehler--];
}

1.3 warte150ms() ohne ISR ohne Warteschleife

void warte150ms(){
  TCNT1 = 0; // 16Bit-Zähler läuft mit /8 Systemtakt
  while(TCNT1<18750);
}