ITG-ABI 07/08

6.1.2011

Korrekturhinweise / Lösungsvorschlag

Gruppe 1 Aufgabe 1

Verwendeter µC: ATMEL AVR 8 Bit RISC.

Aufgabe 1.3

Hinweis: Die PullDown-Widerstände sind in der µC Zeichnung der orginal Aufgabenstellung falsch eingezeichnet!

Hier das angepasste Blockschaltbild für AVR-Controller.

Bei Druck auf S soll mittels Timer/Counter - Einheit weiter gezählt werden. Erstelle Assembler-Unterprogramm zur Initialisierung.

Problem: Eigentlich soll der Wert des Counters auf der 7Segment-Anzeige ausgegeben werden, dazu müsste der Wert zum PortB kopiert werden. Wie soll das geschehen?

  1. Bei Betätigung von S mittels Interrupt -dazu müsste statt eines Countereingangs ein Interrupteingang verwendet werden.
  2. Im Hauptprogramm wird ständig der Wert des Counters an PortB ausgegeben.

Lsg: Ich gehen von 2. aus. Unterprogramm zur Initialisierung der Zähler-Einheit. Reaktion auf steigende Flanke. Die Register haben nach einem Reset den Wert 0.

Zaehler_INIT:
  ldi R16, 0b111 ; externer Takt steigende Flanke, setze Bits
  out TCCR0, R16 ; speichere Steuerregister

Aufgabe 1.4

Das Übernahmesignal Takt soll mittels Interrupt erfasst werden. Bei fallender Flanke wird die Ziffer von PortB übernommen und in 3 Speicherstellen (z.B. R5..R7) gespeichert.

Hinweise zum Unterschied einer 8051 Lösung

Immediate Befehle (ldi, sbi, cbi usw.) sind beim AVR auf die Register R16-R31 beschränkt. Sollten die Prüflinge trotzdem gemäss der Aufgabenstellung untere Registernummern verwendet haben, sollten keine Punkte abgezogen werden.

Weitere Interrupts während einer Interruptbehandlung zu sperren ist nicht notwendig, da automatisch bei Eintritt gesperrt. Müssten innerhalb einer ISR wieder explizit frei gegeben werden.

1.4.1 Zeichen Sie PAP oder Struktogramm für ISR Werte_speichern, die mit dem Drücken des Tasters Takt die aktuellen Ziffern an PortB erfasst uns speichert.

Lsg: Ich gehe hier davon aus, dass die Aufgabe 1.4.2 noch nicht gelesen wurde, daher wird Auswertung nur nach der zweiten Zahl aufgerufen und weitere Aufrufe sind verhindert (3. IF-Anweisung). Wenn aber Auswertung in jedem Fall in Endlosschleife endet, wie in 1.4.2 gefordert, dann würde bei der 3. Zahl die ISR hängen bleiben und kein weiterer Interrupt würde mehr verarbeitet werden. Somit könnte die dritte IF-Anweisung (PORTA & 7 = 3) entfallen.

1.4.2 Entwerfen Sie Unterprogramm Auswertung das die gespeicherten Werte mit 3-1-7 vergleicht und bei Übereinstimmung L7 setzt. Auswertung endet immer in Endlosschleife. Lösung in PAP + Assembler oder Struktogramm + C-Code.

Lsg:

void auswertung(){
  if (R5==3 && R6==1 && R7==7)
    PORTA |= 128; // OK leuchten lassen
  while (1); // Endlosschleifchen 
}

Aufgabe 1.5

Die richtige Ziffernfolge könnte auch in Tabellenform abgelegt werden. Dazu bieten sich die Speichervarianten ROM oder RAM an. Beurteilen Sie die Konsequenzen indem Sie die Vor- und Nachteile beider Varianten abwägen.

Lsg:

Der AVR-µC verfügt neben dem Programm Flash auch über einen extra EEPROM zur Speicherung von Parameterdaten, könnte bei Lösung berücksichtigt werden.

ROM (Programmspeicher) RAM EEPROM
Vorteile
  • Code bleibt auch ohne Versorgungs-Spannung erhalten.
  • Leichte Änderung des Codes möglich.
  • Code bleibt auch ohne Spannung erhalten.
  • Code jederzeit änderbar.
Nachteile
  • Code kann nur durch Programmänderung (Firmwareupdate) geändert werden.
  • Programmierer kennt Code.
  • Ohne Versorgungsspannung wird Code vergesssen.
  • Sichere Mechanismen zur erneuten Codeeingabe erforderlich.
  • ?