| Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
|

Home Experimente Aufbau einfacher mikroprozessorgesteuerter Geräte Sinusgenerator, Version B |
|||
| Siehe auch: Experiment: Sinusgenerator, Version A | |||
|
|||
Experiment: Sinusgenerator, Version B
In diesem Experiment soll eine andere Version des Sinusgenerators aufgebaut werden, bei der eine Rechteckspannung am Eingang /NMI (nichtmaskierbarer Interrupt) des Mikroprozessors als Taktfrequenz für die Ausgabe der Sinustabelle dient. Dadurch bekommt man einen Sinusgenerator, dessen Frequenz ein ganzzahliger Teil der Taktfrequenz ist. Der Frequenzfaktor hängt von der Zahl der Stützstellen der Sinustabelle ab. Jede negative Flanke des Rechtecksignals löst im Mikroprozessor einen Interrupt (NMI) aus, bei dessen Bearbeitung ein Wert aus einem Funktionspuffer geholt und auf den DA-Wandler DAC1 ausgegeben wird. Der Zeiger in den Puffer wird nach jeder Ausgabe erhöht und beim Erreichen des Endes des Puffers auf dessen Anfangsadresse gesetzt. Im Hauptprogramm des Sinusgenerators wird zuerst der Funktionspuffer mit den Werten der Sinustabelle geladen und der Zeiger auf den Puffer initialisiert. Sodann beginnt der Prozessor eine unendliche Warteschleife zu bearbeiten, die von den Interrupts unterbrochen wird. Der Aufbau des Experiments ist in Abbildung EXSINB gezeigt. Zur Erzeugung der erforderlichen Taktfrequenz kann man entweder den auf der Platine DIGMLT implementierten Rechteckgenerator oder bei Verwendung eines zwischengeschalteten Teilers auch den PLL-gesteuerten Oszillator der Platine FQSYNT einsetzen.
Das hier beschriebene Experiment hat einen nicht ganz unwesentlichen Schönheitsfehler: Falls die Taktfrequenz am Eingang /NMI zu hoch wird, unterbricht sich der NMI selber, und es kommt in der Folge zu einem Stack-Overflow und zu einem Absturz des Rechners. Eine verbesserte Version dieses Experiments würde entweder den maskierbaren Interrupt (INT) verwenden, da dieser blockierbar ist (Befehle EI und DI) und damit der reentrante Aufruf verhindert wird. Oder aber es wird in die NMI-Routine ein Software-Mechanismus eingebaut, der die Unterbrechung der Bearbeitung des NMI nicht zulässt. Diese Methode löst allerdings nicht das Problem, sondern verschiebt nur die maximal erlaubte Taktfrequenz nach oben. Man sieht also, dass es keinen absoluten Software-Schutz gegen das Selbstunterbrechen des NMI gibt. Die einzige Möglichkeit besteht darin, externe Hardware vorzusehen, die den nächsten NMI verhindert, solange ein NMI bearbeitet wird.
|
|||
Home Experimente Aufbau einfacher mikroprozessorgesteuerter Geräte Sinusgenerator, Version B |
|||