ITG-ABI 18/19

02.04.2019

Korrekturhinweise / Lösungsvorschlag

Teil 1 Aufgabe 1

Mikrocontroller

Verwendeter µC: ATMEL AVR 8 Bit RISC.

Zuordnungen zum µC ATmega16

LS1 an PD2 (INT0); LS2 an PD3 (INT1); Resettaster an PD4; Messignal Waage an PC; P1 an PB

Systemtakt 1MHz Zylkuszeit 1µs.

1.2.1 Unterprogramm initISR zur Initaliserung der externen Interrupts (2P)

void initISR(){
  MCUCR |= (1<<ISC11) | (1<<ISC01); // INT1 und INT0 fallende Flanke
  GIMSK |= (1<<INT1) | (1<<INT0);   // INT1 und INT0 enable
  sei();                            // Globale ISR-Freigabe
}

1.2.2 Struktogramm Hauptprogramm (3P)

MainGobale Variablen:

anzAusschuss:GZ

1.2.3 ISR Lichtschranke LS2 Int1ISR Struktogramm (3P)

Int1Globale Variablen:

anzAusschuss:GZ

ampel[]={0b00010,0b10010,0b01010,0b01110,0b00100}

1.2.4 ISR LS1 Code (6P)

ISR(INT0_vect){
  int zeit;
  PORTB &= ~(1<<PB1); // Motor stopp
  TCCR1B |= (1<<CS11) | (1<<CS10); // Vorteiler Takt/64; 1s = 64*15625µs
  TCNT1=0; // Zuruecksetzen
  while (TCNT1 < 15625); // 1s warten
  if (PINC<sollwert){
    PORTB |= 1; // PB0 = 1 Weiche stellen
  }
  else{
    PORTB &= ~1; // PB0 = 0
  }
  PORTB |= 2; // Baender starten
}

1.2.5 Programmcounter PC (3P)

Der PC ist ein 16Bit Register. Der Inhalt zeigt auf die Adresse des aktuellen Befehls im Flash-Speicher. Bei einem Sprung wird die Adresse des Sprungziels in den PC geladen.