01.12.2012 Aufrufe

FUNKAMATEUR – Bauelementeinformation SL (1)610C SL (1)

FUNKAMATEUR – Bauelementeinformation SL (1)610C SL (1)

FUNKAMATEUR – Bauelementeinformation SL (1)610C SL (1)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Listing 1: Die Software zur Ansteuerung des ML 2035/36<br />

über die Centronics-Schnittstelle eines PC<br />

‘**************************************************************<br />

‘ SOFTWARE ZUR ANSTEUERUNG DES ML 2036<br />

‘ PROGRAMMIERSPRACHE: POWERBASIC<br />

‘ ANSCHLUß AN CENTRONICSPORT LPT1<br />

‘ Anschlüsse ML2036 LPT1 (oder 2)<br />

‘ PD Datenbit 7 (Pin 9)<br />

‘ SID Datenbit D0 (Pin 2)<br />

‘ SCK Strobe (Pin 1)<br />

‘ LATI AUTOFEED (Pin 14)<br />

‘**************************************************************<br />

cls<br />

print “ **** SOFTWARE ZUR ANSTEUERUNG DES ML 2036 **** “<br />

print<br />

shared LPTXD%, LPTXC%<br />

shared FOUT<br />

call portadresse ‘ Portadresse wählen<br />

print<br />

‘ Hier kann das Hauptprogramm stehen<br />

‘ z.B.<br />

do<br />

cls<br />

print “ Funktionswahl “<br />

print “ 1 <strong>–</strong> Ausgabe einer konstanten Frequenz “<br />

print “ 2 <strong>–</strong> Wobbeln “<br />

print “ 3 <strong>–</strong> Programmende “<br />

input “ Ihre Wahl (1, 2 oder 3) ? “, FKT<br />

select case FKT<br />

case 1<br />

call EINE.FREQUENZ (FOUT)<br />

case 2<br />

call WOBBELN<br />

case 3<br />

end ‘ Programmende<br />

end select<br />

loop<br />

‘-------------------------------------------------------------------------------<br />

SUB WOBBELN<br />

input “untere Frequenz ? “, FMIN<br />

input “obere Frequenz ? “, FMAX<br />

input “Zeit in Sekunden bis zum nächsten Frequenzwechsel ? “, t<br />

do<br />

print “ich wobble, Abbruch mit einer Taste“<br />

for i= FMIN to FMAX STEP 0.5<br />

FOUT = i<br />

call SCHIEBEREGISTER (FOUT)<br />

delay t<br />

if instat then i=FMAX ‘ Test, ob Taste<br />

next i<br />

loop until instat ‘ Tastendruck beendet<br />

TASTE$=INKEY$ ‘ Wobbelfunktion<br />

END SUB<br />

‘-------------------------------------------------------------------------------<br />

SUB EINE.FREQUENZ (FOUT)<br />

FREQUENZ:<br />

input “Frequenz 0...32767.5 Hz (0,5-Hz-Schritte) ? “, FOUT<br />

if FOUT < 0 then goto FREQUENZ ‘ testen auf Grenzwert<br />

if FOUT >32767.5 then goto FREQUENZ<br />

call SCHIEBEREGISTER (FOUT)<br />

END SUB<br />

END<br />

‘-------------------------------------------------------------------------------<br />

SUB SCHIEBEREGISTER (FOUT)<br />

SCKHIGH% = 0 ‘ negiert<br />

SCKLOW% = 1<br />

LATIHIGH% = 1 ‘ verknüpft mit SCK, damit SCK<br />

LATILOW% = 3 ‘ bei LATI nicht beeinflußt wird<br />

SR& = FOUT*2 ‘ entspricht FOUT * 2^23/FCLKIN mit FCLKIN= 4194304 (Hz)<br />

‘ als Taktfrequenz SR=Schieberegisterwert des ML2035<br />

SRBYTE?=bits?(SR&) ‘ niederwertiges Byte abschneiden<br />

SRBYTE?=SRBYTE? AND 127 ‘ PD-Bit auf Low halten<br />

out LPTXD%, SRBYTE?<br />

out LPTXC%, SCKLOW%<br />

out LPTXC%, SCKHIGH% ‘ SCK takten, Bit übernehmen<br />

out LPTXC%, SCKLOW%<br />

for i=1 to 15 ‘ jetzt noch 15* schieben<br />

shift right SR&,1 ‘ macht dann 16 Bit<br />

SRBYTE?=bits?(SR&)<br />

SRBYTE?=SRBYTE? AND 127<br />

out LPTXD%, SRBYTE?<br />

out LPTXC%, SCKLOW% ‘ SCK takten, Bit übernehmen<br />

out LPTXC%, SCKHIGH%<br />

out LPTXC%, SCKLOW%<br />

next i<br />

out LPTXC%, LATIHIGH%<br />

out LPTXC%, LATILOW% ‘ LATI takten, Daten in<br />

out LPTXC%, LATIHIGH% ‘ ML2036-LATCH übernehmen<br />

END SUB<br />

‘-------------------------------------------------------------------------------<br />

SUB PORTADRESSE<br />

PORT:<br />

LPT1D%=&H378<br />

LPT1C%=&H37A<br />

LPT2D%=&H278<br />

LPT2C%=&H27A<br />

input “LPT1 oder LPT2 benutzen (1 oder 2 eingeben) ? “,LPT<br />

if LPT < 1 or LPT > 2 then goto PORT<br />

if LPT = 1 then LPTXD% = LPT1D% : LPTXC% = LPT1C%<br />

if LPT = 2 then LPTXD% = LPT2D% : LPTXC% = LPT2C%<br />

END SUB<br />

‘-------------------------------------------------------------------------------<br />

Listing 2: Unterprogramm für die 8031/51-Familie<br />

; ======== MODUL für ML2035/2036 ========<br />

Praktische Elektronik<br />

; Funktion : serielles Interface für programmierbare<br />

; Sinusgeneratoren ML2035 und ML 2036<br />

; Prozessor : 80C31 / 80C32 und kompatible<br />

; EPROM : ab 0000H ...<br />

; RAM : kein externer RAM erforderlich<br />

; Anschlüsse :<br />

; Controller Port1 ML2035 / ML2036<br />

; P1.7 PD<br />

; P1.0 SID<br />

; P1.1 SCK<br />

; P1.2 LATI<br />

; Register : Register der aktiven Bank<br />

; R0 Low-Byte für Frequenz<br />

; R1 High-Byte für Frequenz<br />

; R3 Bitzähler (16 Bit)<br />

; Vereinbarungen<br />

; Spezialfunktionsregister SFR:<br />

ACC equ 0E0H ; Akku<br />

P1 equ 090H ; Port 1<br />

SP equ 081H ; Stackpointer<br />

;<br />

LFREQ equ 11H ; Low- und Highbyte Frequenz<br />

HFREQ equ 22H ; werden hier nur zu Testzwecken festgelegt,<br />

; sonst kommen diese Werte von anderen Programmteilen<br />

.org $0 ; Startadresse<br />

ljmp START<br />

; hier folgen die Startadressen für die Interrupts<br />

; ...<br />

; -------------------------------------------------------------------------------<br />

; Programmstart ab 100H, irgendwo muß es ja losgehen<br />

.org 100H<br />

START mov SP,#40H ; Stackpointer —> oberer RAM<br />

; Port 1 initialisieren, zur Übersichtlichkeit einzeln<br />

clr P1.0 ; Datenbit = 0<br />

clr P1.1 ; SCK = 0<br />

clr P1.2 ; LATI = 0<br />

clr P1.7 ; PD = 0 —> aktiv<br />

; ... hier stehen evtl. andere Programmteile<br />

; -------------------------------------------------------------------------------<br />

; Hauptprogramm zur Demonstration als unendliche Schleife<br />

ML2036 lcall POWDN ; ML2036 in Power-down-Modus<br />

; ... hier können noch andere Befehle stehen<br />

lcall NOTPDN ; Power-down aufheben<br />

; zur Demonstration laden wir hier R0 und R1 mit Direktwerten<br />

mov R0,LFREQ ; Lowbyte für Frequenz in R0<br />

mov R1,HFREQ ; Highbyte für Frequenz in R1<br />

lcall SERIF ; Unterprogr. zur Übergabe der<br />

; Frequenzdaten aufrufen<br />

; ... hier können noch andere Befehle stehen<br />

sjmp ML2036 ; relativer Sprung zurück<br />

; -------------------------------------------------------------------------------<br />

; serielles Interface<br />

SERIF mov R3,#10H ; Bytezähler auf 8 für Low-Byte<br />

mov ACC,R0 ; Lowbyte holen<br />

LBYTE clr P1.0<br />

jnb ACC.0,TAKT1 ; teste Akkubit 0, Sprung bei Low<br />

setb P1.0 ; Akkubit war H —> P1.0 kopieren<br />

TAKT1 setb P1.1 ; SCK takten<br />

clr P1.1<br />

rr A ; Akkuinhalt schieben<br />

djnz R3, LBYTE ; Bitzähler erniedrigen und Sprung zurück,<br />

; wenn noch nicht 0, das ganze nochmal für Highbyte<br />

mov R3,#10H ; Bytezähler auf 8 für High-Byte<br />

mov ACC,R1 ; Highbyte holen<br />

HBYTE clr P1.0<br />

jnb ACC.0,TAKT2 ; teste Akkubit 0, Sprung bei Low<br />

setb P1.0 ; Akkubit war H —> P1.0 kopieren<br />

TAKT2 setb P1.1 ; SCK takten<br />

clr P1.1<br />

rr A ; Akkuinhalt schieben<br />

djnz R3, LBYTE ; Bitzähler erniedrigen und Sprung zurück,<br />

; wenn noch nicht 0, alle Bits übergeben,<br />

; in Latch des ML2036 schreiben<br />

setb P1.2 ; LATI takten<br />

clr P1.2<br />

ret<br />

; -------------------------------------------------------------------------------<br />

; die Unterprogramme zur Power-down-Steuerung<br />

POWDN setb P1.7 ; Power down PD auf H<br />

mov R0,00H ; 0000H als PD-Wert<br />

mov R1,00H<br />

lcall serif ; serielles Interface<br />

ret<br />

NOTPDN clr P1.7 ; ML 2036 aktivieren PD auf Low<br />

ret<br />

; -------------------------------------------------------------------------------<br />

FA 4/95 • 385

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!