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 Programmierbarer Funktionsgenerator | |||||||||||||||||
Siehe auch: Funktionsgenerator | |||||||||||||||||
|
|||||||||||||||||
Experiment: Programmierbarer Funktionsgenerator
Im folgenden Experiment soll ein digitaler Funktionsgenerator aufgebaut werden, der verschiedene Funktionsverläufe auf dem DA-Wandler zyklisch ausgibt. Dieser Funktionsgenerator erlaubt nur zwei Parameter der ausgegebenen Funktion zu ändern, nämlich die Frequenz und die Funktion selbst. Die Frequenz wird, wie bereits zuvor beschrieben durch eine externe Rechteckspannung bestimmt, die als Taktsignal für den Funktionsgenerator verwendet wird. Zur Einstellung der Amplitude und des Gleichspannungs-Offsets sei der Leser auf die einschlägigen Schaltungen mit Operationsverstärkern verwiesen. Die Funktion selbst kann aus sieben fix vorgegebenen Kurvenverläufen ausgewählt werden. Die Auswahl der Funktion geschieht über die Tasten T0-T7 der Platine DIGMLT, die über den 8-Bit-Port PIN eingelesen werden. Die Tasten haben folgende Bedeutung:
Drückt man eine der Tasten T0-T7, so wird die ausgewählte Funktion in den Funktionspuffer geladen und ausgegeben. Das unten aufgeführte Listing zeigt die Funktionsweise des Programms: Zuerst wird die aktuelle Tastenkombination der Platine DIGMLT von PIN eingelesen. Falls keine Taste gedrückt ist oder sich der Zustand der Tasten gegenüber der letzten Abfrage nicht geändert hat, wird keine weitere Aktion unternommen. Wenn eine der Tasten umgeschaltet wurde, wird der neue Zustand gespeichert und jene gedrückte Taste ermittelt, die die höchsten Priorität besitzt (bei mehreren gleichzeitig gedrückten Tasten wird immer nur eine Funktion aktiviert). Zu der ermittelten Taste wird nun die Ausführungsadresse des entsprechenden Unterprogramms errechnet. Dieses Unterprogramm füllt nun den Funktionspuffer mit den Werten der gewünschten Funktion und kehrt dann an den Anfang des Programms zurück. ;=================================================== ;---- Experiment: Funktionsgenerator --------------- ;=================================================== ; .GLOBAL FNCGEN FNCGEN: LD HL,FNCBUF ;Zeiger initialisieren LD (FBFPOI),HL FNCG1: IN A,(PIN) ;Tasten einlesen OR A ;keine Taste JR Z,FNCG1 ; gedrückt ? LD HL,LASTF CP (HL) ;Tasten geändert ? JR Z,FNCG1 LD (LASTF),A ;Tastenzustand merken LD HL,FNCTAB ;aktive Funktion $2: SLA A ; ermitteln JR C,$1 INC HL INC HL JR $2 ; $1: LD A,(HL) ;Ausführungsadresse INC HL ; des Ladeprogramms LD H,(HL) ; berechnen LD L,A LD DE,FNCG1 ;Return-Adresse PUSH DE JP (HL) ;do it ! ; .DATA LASTF: DEFB 0 .CODE ; FNCTAB: DEFW ZEROLN ;Nullinie DEFW SQUARE ;Rechteckfunktion DEFW PULSE ;Nadelimpuls DEFW TRIANG ;Dreiecksfunktion DEFW SAWTOO ;Sägezahn DEFW SINE ;Sinus DEFW GAUSS ;Gauß-Funktion DEFW PARABO ;Parabel ; ZEROLN: LD B,0 ;Nullinie berechnen LD HL,FNCBUF $3: LD (HL),0 INC HL LD (HL),80H INC HL DJNZ $3 RET ; SQUARE: LD B,0 ;Rechteckfunktion LD HL,FNCBUF $4: LD (HL),0 INC HL DJNZ $4 $5: LD (HL),0FFH INC HL DJNZ $5 RET ; TRIANG: LD B,128 ;Dreiecksfunktion LD HL,FNCBUF $6: LD (HL),0 INC HL LD A,B DEC A ADD A,A LD (HL),A INC HL DJNZ $6 LD B,128 $7: LD (HL),0 INC HL LD A,B DEC A ADD A,A CPL LD (HL),A INC HL DJNZ $7 RET ; SAWTOO: LD B,0 ;Sägezahn LD HL,FNCBUF $8: LD (HL),0 INC HL LD (HL),B INC HL DJNZ $8 RET PULSE: LD B,254 ;Impuls LD HL,FNCBUF $9: LD (HL),0 INC HL LD (HL),0 INC HL DJNZ $9 LD (HL),0FFH INC HL LD (HL),0FFH INC HL LD (HL),0FFH INC HL LD (HL),0FFH INC HL RET ; SINE: LD HL,SINTAB ;Sinus LD DE,FNCBUF LD BC,512 LDIR RET ; GAUSS: LD HL,GAUSTB ;Gauß LD DE,FNCBUF LD BC,512 LDIR RET ; ;---- Tabelle der Gauß'schen Kurve ----------------- ; GAUSTB: DEFW 0000H, 0000H, 0000H, 0000H, 0000H DEFW 0000H, 0000H, 0000H, 0010H, 0010H DEFW 0010H, 0010H, 0010H, 0010H, 0010H DEFW 0010H, 0020H, 0020H, 0020H, 0020H DEFW 0030H, 0030H, 0040H, 0040H, 0050H DEFW 0050H, 0060H, 0070H, 0080H, 0090H DEFW 00A0H, 00B0H, 00D0H, 00F0H, 0100H DEFW 0120H, 0150H, 0170H, 01A0H, 01D0H DEFW 0200H, 0240H, 0280H, 02D0H, 0320H DEFW 0370H, 03D0H, 0440H, 04B0H, 0530H DEFW 05B0H, 0650H, 06F0H, 07A0H, 0860H DEFW 0920H, 0A00H, 0AF0H, 0C00H, 0D10H DEFW 0E40H, 0F80H, 10D0H, 1240H, 13D0H DEFW 1570H, 1730H, 1900H, 1B00H, 1D10H DEFW 1F40H, 2190H, 2410H, 26A0H, 2960H DEFW 2C40H, 2F40H, 3260H, 35A0H, 3910H DEFW 3CA0H, 4060H, 4430H, 4830H, 4C50H DEFW 5090H, 5500H, 5980H, 5E20H, 62F0H DEFW 67D0H, 6CC0H, 71E0H, 7700H, 7C40H DEFW 8190H, 86F0H, 8C60H, 91D0H, 9750H DEFW 9CD0H, A240H, A7C0H, AD30H, B290H DEFW B7E0H, BD20H, C250H, C750H, CC40H DEFW D100H, D5A0H, DA20H, DE60H, E270H DEFW E650H, E9F0H, ED50H, F070H, F350H DEFW F5E0H, F830H, FA40H, FC00H, FD60H DEFW FE80H, FF50H, FFC0H, FFF0H, FFC0H DEFW FF50H, FE80H, FD60H, FC00H, FA40H DEFW F830H, F5E0H, F350H, F070H, ED50H DEFW E9F0H, E650H, E270H, DE60H, DA20H DEFW D5A0H, D100H, CC40H, C750H, C250H DEFW BD20H, B7E0H, B290H, AD30H, A7C0H DEFW A240H, 9CD0H, 9750H, 91D0H, 8C60H DEFW 86F0H, 8190H, 7C40H, 7700H, 71E0H DEFW 6CC0H, 67D0H, 62F0H, 5E20H, 5980H DEFW 5500H, 5090H, 4C50H, 4830H, 4430H DEFW 4060H, 3CA0H, 3910H, 35A0H, 3260H DEFW 2F40H, 2C40H, 2960H, 26A0H, 2410H DEFW 2190H, 1F40H, 1D10H, 1B00H, 1900H DEFW 1730H, 1570H, 13D0H, 1240H, 10D0H DEFW 0F80H, 0E40H, 0D10H, 0C00H, 0AF0H DEFW 0A00H, 0920H, 0860H, 07A0H, 06F0H DEFW 0650H, 05B0H, 0530H, 04B0H, 0440H DEFW 03D0H, 0370H, 0320H, 02D0H, 0280H DEFW 0240H, 0200H, 01D0H, 01A0H, 0170H DEFW 0150H, 0120H, 0100H, 00F0H, 00D0H DEFW 00B0H, 00A0H, 0090H, 0080H, 0070H DEFW 0060H, 0050H, 0050H, 0040H, 0040H DEFW 0030H, 0030H, 0020H, 0020H, 0020H DEFW 0020H, 0010H, 0010H, 0010H, 0010H DEFW 0010H, 0010H, 0010H, 0010H, 0000H DEFW 0000H, 0000H, 0000H, 0000H, 0000H DEFW 0000H ; PARABO: LD HL,PARATB ;Parabel LD DE,FNCBUF LD BC,512 LDIR RET ; ;----- Tabelle der Parabel 2. Ordnung -------------- ; PARATB: DEFW FE00H, FA10H, F620H, F230H, EE50H DEFW EA80H, E6B0H, E2E0H, DF20H, DB70H DEFW D7C0H, D410H, D070H, CCE0H, C950H DEFW C5C0H, C240H, BED0H, BB60H, B7F0H DEFW B490H, B140H, ADF0H, AAA0H, A760H DEFW A430H, A100H, 9DD0H, 9AB0H, 97A0H DEFW 9490H, 9180H, 8E80H, 8B90H, 88A0H DEFW 85B0H, 82D0H, 8000H, 7D30H, 7A60H DEFW 77A0H, 74F0H, 7240H, 6F90H, 6CF0H DEFW 6A60H, 67D0H, 6540H, 62C0H, 6050H DEFW 5DE0H, 5B70H, 5910H, 56C0H, 5470H DEFW 5220H, 4FE0H, 4DB0H, 4B80H, 4950H DEFW 4730H, 4520H, 4310H, 4100H, 3F00H DEFW 3D10H, 3B20H, 3930H, 3750H, 3580H DEFW 33B0H, 31E0H, 3020H, 2E70H, 2CC0H DEFW 2B10H, 2970H, 27E0H, 2650H, 24C0H DEFW 2340H, 21D0H, 2060H, 1EF0H, 1D90H DEFW 1C40H, 1AF0H, 19A0H, 1860H, 1730H DEFW 1600H, 14D0H, 13B0H, 12A0H, 1190H DEFW 1080H, 0F80H, 0E90H, 0DA0H, 0CB0H DEFW 0BD0H, 0B00H, 0A30H, 0960H, 08A0H DEFW 07F0H, 0740H, 0690H, 05F0H, 0560H DEFW 04D0H, 0440H, 03C0H, 0350H, 02E0H DEFW 0270H, 0210H, 01C0H, 0170H, 0120H DEFW 00E0H, 00B0H, 0080H, 0050H, 0030H DEFW 0020H, 0010H, 0000H, 0000H, 0010H DEFW 0020H, 0030H, 0050H, 0080H, 00B0H DEFW 00E0H, 0120H, 0170H, 01C0H, 0210H DEFW 0270H, 02E0H, 0350H, 03C0H, 0440H DEFW 04D0H, 0560H, 05F0H, 0690H, 0740H DEFW 07F0H, 08A0H, 0960H, 0A30H, 0B00H DEFW 0BD0H, 0CB0H, 0DA0H, 0E90H, 0F80H DEFW 1080H, 1190H, 12A0H, 13B0H, 14D0H DEFW 1600H, 1730H, 1860H, 19A0H, 1AF0H DEFW 1C40H, 1D90H, 1EF0H, 2060H, 21D0H DEFW 2340H, 24C0H, 2650H, 27E0H, 2970H DEFW 2B10H, 2CC0H, 2E70H, 3020H, 31E0H DEFW 33B0H, 3580H, 3750H, 3930H, 3B20H DEFW 3D10H, 3F00H, 4100H, 4310H, 4520H DEFW 4730H, 4950H, 4B80H, 4DB0H, 4FE0H DEFW 5220H, 5470H, 56C0H, 5910H, 5B70H DEFW 5DE0H, 6050H, 62C0H, 6540H, 67D0H DEFW 6A60H, 6CF0H, 6F90H, 7240H, 74F0H DEFW 77A0H, 7A60H, 7D30H, 8000H, 82D0H DEFW 85B0H, 88A0H, 8B90H, 8E80H, 9180H DEFW 9490H, 97A0H, 9AB0H, 9DD0H, A100H DEFW A430H, A760H, AAA0H, ADF0H, B140H DEFW B490H, B7F0H, BB60H, BED0H, C240H DEFW C5C0H, C950H, CCE0H, D070H, D410H DEFW D7C0H, DB70H, DF20H, E2E0H, E6B0H DEFW EA80H, EE50H, F230H, F620H, FA10H DEFW FE00H
|
|||||||||||||||||
Home Experimente Aufbau einfacher mikroprozessorgesteuerter Geräte Programmierbarer Funktionsgenerator |