Home Diverses rund um den Falcon Device LED Ring On
 

16.6 METEX DMM Multimeter


Metex Digital Multimeter am Atari


Die genaue Bezeichnungen der Buchsenbelegung des Multimeters im mitgelieferten Handbuch sind ziemlich irreführend da diese Beschreibung offensichtlich wohl von Laien gemacht wurde. Zudem passt die Kabelbelegung im Urzustand leider nur, wie üblich, an einen PC. Zumindest war das hier so. Es ging erst als ich mit das Kabel passend umgelötet hatte

Die genaue Pinbelegung des Steckers:

Pinbelegung und Beschreibung METEX M-46xx. Die Seitenansicht.

           Oberseite des Gerätes
Meß-Buchsen                      Display
----------------------------------------
           o   DTR
           o   DSR
           o   RX
           o   TX
           o   GND
----------------------------------------

Wie mir nach Anschauen des Schaltplanes klar wurde, erwartet das Multimeter an dem mit "RX" bezeichneten Anschluß eine negative Hilfsspannung. Diese Hilfsspannung wird durch Verbinden von RX (Multimeter) mit RTS (Computer) und Ausschalten von RTS am Computer hergestellt.

Die richtige Verbindung der Anschlüsse des DMM mit der RS232 am Atari ist nun wie folgt, dazu öffen Sie den DB25 Stecker des Kabels:



Abbildung 1 - Die richtige Verschaltung des Metex DMM an Atari



Die Pin-Nummern beziehen sich auf einen 25-poligen Stecker am Atari. Das mit dem Multimeter mitgelieferte Kabel ist also entsprechend zu modifizieren. Das Funktiniert hier schon seit Jahren. Für Atari-Computer mit DB9 Buchse als serielle Schnittstelle sehen Sie bitte unter Stecker, Verbindungskabel oder bei den Modemkabel nach. Hier finden Sie die korrekte Pinbelegung der 9 poligen seriellen Schnittstelle des Atari.

Nochmal die Pinbelegung für die 9- und 25 polige Anschlußbuchse am Atari im vergleich zu einen VOLTKRAFT Meßgerät mit ebenfalls serieller Schnittstelle.

  Stift-     25-pol     9-pol    Bezeichnung
  leiste
     O ---------20-------- 4         DTR
     O --------- 4-------- 7         RTS
     O --------- 3-------- 2         Empfangsdaten (RXD)
     O --------- 2-------- 3         Sendedaten (TXD)
     O --------- 7-------- 5         GND

Folgende GFA-Basic-Programme möge als Beispiel dienen, wie Meßwerte aus dem Metex DMM Multimeter ausgelesen werden können, prinzipbedingt können diese Programme auch auf VOLTCRAFT Instrumente angewand werden.

dum=XBIOS(15,7,0,&X10111000,-1,-1)
PAUSE 50
REM
REM                                 XBIOS 15: Rsconf
REM                                          7 -> 1200 Baud
REM                                          0 -> kein Handshake
REM                                 &X10111000 -> 7 Bit, 2 Stopbits, no Parity
REM
dum=XBIOS(30,&X1000)
REM
REM                                 XBIOS 30: Ongibit
REM                                 RTS ausschalten; Bit 3 von Port A setzen
REM
OPEN "I",#1,"AUX:"                  ! Kanal öffnen
REPEAT
    st_eingabe=0
    REPEAT
        PRINT #1,"D"

Ein weiteres GFA-Basic Programm um ein METEX DMM am Atari zu testen:
Sourcecode von Dr. D.Winkler

0 ' Testprogramm fuer DMM M-4650CR
1 '
2 DEFINT "I-N"
3 DEFSNG "A-H,O-Z"
4 '
5 CLS
6 PRINT @(2,26);"Testprogramm fuer DMM M-4650 CR"
7 PRINT @(4,27);"(c) by Dr. D.Winkler 1992"
8 PRINT
9 XBIOS (,15,7,0,%10111000,-1,-1,-1)' setze: 1200,n,7,2
10 OPEN "V",1'                         AUX: oeffnen (RS232)
11 POKE $FF8800,14'                    Soundchip Register anwaehlen
12 Iold_Rts%= PEEK($FF8800)'            alten Wert lesen
13 POKE $FF8802,Iold_Rts% OR %1000'     RTS auf true
14 PRINT #1,"C"'                       und los geht's
15 '
16-Flush'                              Empfangspuffer leeren
17 BIOS (Ir%,1,1)
18 IF Ir%<>-1 THEN GOTO Start
19 INPUT #1,A$
20 GOTO Flush
21 '
22-Start
23 INPUT "   Zeitkonstante (s): ";Isec%
24 PRINT
25 PRINT "   Ende des Tests mit <CR>"
26 PRINT
27 IF Isec%<1 THEN Isec%=1' nicht oefters als 1 mal pro Sekunde
28 ON TIMER Isec% GOSUB Ask_Data' alle Isec einen Messwert anfordern
29 PRINT
30 '
31-Wait_Data
32 IF MID$( INKEY$ ,4,1)= CHR$(13) THEN GOTO Ende
33 BIOS (Ir%,1,1)' liegt ein Zeichen von RS232 vor ?
34 IF Ir%<>-1 THEN GOTO Wait_Data' nein -> warten
35 '
36 INPUT #1,A$'     Wert vom DMM holen
37 PRINT TIME$ ,A$' und auf dem Bildschirm ausgeben
38 GOTO Wait_Data
39 '
40-Ask_Data' Routine wird vom BASIC alle Isec Sekunden aufgerufen
41 PRINT #1,"D"
42 RETURN
43 '
44-Ende
45 ON TIMER Isec% GOSUB 0'    keine weiteren Datenanforderungen
46 POKE $FF8800,14'          Register wieder herstellen
47 POKE $FF8802,Iold_Rts%
48 CLOSE
49 END
   ! Meßwert anfordern
        st_messwert=0
        REPEAT
            st_messwert=BIOS(1,1)   ! Meßwert verfügbar? BIOS 1: Bconstat
        UNTIL st_messwert<>0
        a$=INPUT$(14,1)             ! Meßwert einlesen
        CLS
        PRINT AT(1,1);a$;           ! Meßwert auf Bildschirm ausgeben
        PAUSE 50
        st_eingabe=BIOS(1,2)        ! Tatstatureingabe? BIOS 1: Bconstat
    UNTIL st_eingabe<>0
    eingabe$=CHR$(INP(2))           ! Tastatureingabe holen
UNTIL eingabe$="q"                  ! Programm beenden?
dum=XBIOS(29,&X11110111)
REM
REM                                 XBIOS 29: Offgibit
REM                                 RTS wieder einschalten;
REM                                 Bit 3 von Port A löschen
REM
CLOSE#1                             ! Kanal wieder schließen
END

Metex-Multimeter an Atari



Leitung an Pin 4 (RTS) des Sub-D-Steckers (bei mir gelb) abtrennen, dann klappt es. Zum Ausprobieren genügt ein beliebiges Terminal-Programm mit den Parametern: 1200 Bps, keine Parität, 7bit, 2 Stopbits, kein Handshake.

Auf XBIOS-Ebene geht's aber noch eleganter:
DW>11 POKE $FF8800,14' Soundchip Register anwaehlen
DW>12 Iold_Rts%= PEEK($FF8800)' alten Wert lesen
DW>13 POKE $FF8802,Iold_Rts% OR %1000' RTS auf True11
XBIOS(Iold_Rts%,28,0,14) ' I/O-Port A auslesen mit giaccess()12
XBIOS(R,30,%1000)' RTS auf HIGH mit ongibit()
DW>46 POKE $FF8800,14'Register wieder herstellen
DW>47 POKE $FF8802,Iold_Rts%46 XBIOS(R,28,Iold_Rts%,14 OR 2^7) 'Register restaurieren

Auf Hardware-Ebene könnte Dir nämlich irgendein Programm, das auch den Soundchip adressiert (z.B.Crazy Sounds) in die Quere kommen.

 Minimal-Testprogramm fuer DMM M-4650CR1

 2 DEFINT "I-N"
 3 DEFSNG "A-H,O-Z"
 4
 5 CLS
 6 PRINT @(2,26);"Testprogramm fuer DMM M-4650 CR"
 7 PRINT @(4,27);"(c) 1992"
 8 PRINT
 9 XBIOS (,15,7,0,%10111000,-1,-1,-1)' setze: 1200,n,7,210 OPEN"V",1'
   AUX: oeffnen (RS232)11 POKE $FF8800,14' Soundchip Register anwaehlen
12 Iold_Rts%= PEEK($FF8800)'           alten Wert lesen
13 POKE $FF8802,Iold_Rts% OR %1000'     RTS auf true
14 PRINT#1,"C"' und los geht's
15
'16-Flush'Empfangspuffer leeren
17 BIOS (Ir%,1,1)
18 IF Ir%<>-1 THEN GOTO Start
19 INPUT #1,A$
20 GOTO Flush
21
'22-Start
23 INPUT "   Zeitkonstante (s): ";Isec%
24 PRINT
25 PRINT "   Ende des Tests mit <CR>"
26 PRINT
27 IF Isec%<1 THEN Isec%=1'nicht oefters als 1 mal pro Sekunde
28 ON TIMER Isec% GOSUB Ask_Data' alle Isec einen Messwert anfordern
29 PRINT
30
'31-Wait_Data
32 IF MID$( INKEY$ ,4,1)=CHR$(13) THEN GOTO Ende
33 BIOS (Ir%,1,1)' liegt ein Zeichen von RS232 vor ?
34 IF Ir%<>-1 THEN GOTO Wait_Data' nein -> warten
35 '36 INPUT #1,A$'     Wert vom DMM holen
37 PRINT TIME$ ,A$' und auf dem Bildschirm ausgeben
38 GOTO Wait_Data
39
'40-Ask_Data' Routine wird vom BASIC alle Isec Sekunden aufgerufen
41 PRINT#1,"D"42 RETURN
43
'44-Ende
45 ON TIMER Isec% GOSUB 0'    keine weiteren Datenanforderungen
46 POKE $FF8800,14'          Register wieder herstellen
47 POKE $FF8802,Iold_Rts%48 CLOSE
49 END


Ein Hardwarezusatz zum Temperaturmessen

Autor leider Unbekannt.

Hallo allerseits, endlich bin ich wieder online, und jetzt kann es auch mit dem Thermometer-Treiber losgehen. Weil ich das Proggi komplett in Assembler geschrieben habe und es deshalb entsprechend kurz ist, habe ich es einfach UU-coded an die Mail angehängt. Außerdem gibt's noch eine kleine GFA-BASIC-Routine, die man leicht in eigene Programme integrieren kann.

_Hardware_*Thermometer   2xNPN (z.B. BC548B)       ST-Druckerport*


                                          ________________(2)
                                       | / c             Data 0
                     (9)____[***]______|/Data
                            1kOhm     b|\
                                       | \ e
                                          +---------------(25)
                                       | / e             Masse
                     (10)___[***]______|/Clock
                            1kOhm     b|\
                                       | \________________(11)
                                          c              Busy

Die mit 1,5V anliegenden Daten werden über Treiberstufen auf den normalerweise mit Pull-Ups versehenen Druckerport gegeben. Sollte das ausirgendeinem Grund nicht der Fall sein, sind die Leitungen 2 (Data 0) und 11(Busy) über 4k7-Widerstände an +5V (z.B. vom Joystickport) zu legen.

Software

Zur Inbetriebnahme muß lediglich derTreiber THERMO.PRG im AUTO-Ordner oder manuell gestartet werden. Er benutzt die XBRA- und Cookie-Kennung 'THRM' (die Mail an Julian geht heute raus). Der Cookie-Wert zeigt auf eine Struktur aus 2 Words: Das erste (vorzeichenbehaftete) Word enthält die Temperatur * 10 (also z.B. 254 für 25.4 Grad). Steht dort allerdings 2550 (255 Grad...), ist bei der Auswertung ein Fehler aufgetreten - dieser Fall sollte nur auftreten, wenn das Modul nicht angeschlossen ist oder noch keine Daten angekommen sind - das Thermometer liefert seine Daten standardmäßig nur alle 10sec. In der GFA-BASIC-Routine habe ich die Fehlererkennung noch erweitert:
Auch bei einem fehlenden Treiber oder gar einem fehlenden Cookie Jar wird eine Temperatur von 255 Grad zurückgegeben. Bis jetzt wird übrigens noch keine Fahrenheit-Auswertung unterstützt. Das zweite Word enthält die 13 Bits vom Thermometer. D1 bis D13 sind unver-ändert in den Bits 0 bis 12 enthalten. Diese Daten sind eigentlich nur für Erweiterungen wie Fahrenheit-Auswertung sinnvoll, da auch in den Original-Daten nur die Temperatur enthalten ist.

Ein Bug?

Unter ungünstigen Umständen kommt es beim Einlesen der Temperaturdaten zu Abstürzen. Dieses Problem ist bei mir bis jetzt nur im GFA-BASIC-Interpreter aufgetreten, und weil es so selten auftritt, konnte ich die Fehlerursachenoch nicht aufspüren. Ich übernehme aber keine Haftung für verlorengege-gangene Daten... Wie man im UUE gut sehen kann, ist der Cookie Jar (der bei Bedarf neu an-gelegt wird) im TEXT-Segment enthalten. Das schadet zwar nichts, kostetaber ein paar Bytes (egal - das kB ist noch nicht voll). In der nächsten Version wird er aber im BSS-Segment stehen.

Rechtlicher Status

Der Treiber ist Freeware und darf nur unverändert beliebig oft weitergegebenwerden. Das GFA-BASIC-Programm dagegen ist Public-Domain und darf auch verändert werden vielleicht gibt's ja auch daran noch etwas zu feilen.

Begin UUE-Code:

table
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_begin 644
THERMO.PRGM8!H   .0                             "!O  0\? $ W>@ #-WH !3=zMZ
<0?H!]F$  4QA'DAZ !X_/  F3DY<CT'Z I!A  $V0F<O#C\\ #%.04YUyM2KD   6@9@1A  "^('D
 6@0H%2@208)A@,@E1(4DUF#$'Z CUA  $ 8  !xM"$J"9P)@X+*#9C0,@P   !!F#$'Z <QA  #B8
 ZB!Y   %H$/Z .I3@2+8wM(MA1R?_Z(WP    0__P@26%<(+P     (6C__  $(7Q42%)-__@A?
@C_vM_!'\  >( ! XB  (@  '$<"( B/Y   !     M@C_    MP   $ "+D   #_uM^@,(^0
/_Z"0CY    __H53G4C^0  !"H   %"(_D   0F   !8B/\   !tM1@  !"HC_#%!628   0F(_P
%\   %H$YU6$)2051(4DT     (_P     sM   %H"/Z__    0J(_H "   !"9.U@    !(4#\\
E.05R/3G4_/  !/SP rM3$Y!         !
qM                                                            pM
                                      !80E)!oM5$A230     )]@
#0H;<"!496UP97)A='5R92!$<FEV97(@&W$-"E9E<G-InM;VX@,2XP+B
H8RD@,3DY,R!B>2!/;&4@4&%H; T*  =4;V\@;6%N>2
H,38ImM(&-O;VMI97,@:6YS=&%L;&5D+B!0;&5A<V4@=7-E(&%N;W1H97(@<')O9W)AlM;2!T;R!I;G
-T86QL('1H92!*87(N#0H
!T1R:79E<B!A;')E861Y(&EN<W1AkM;&QE9"X-"@!$<FEV97(@:6YS=&%L;&5D+@T* %A"4D%42%)-
    BY    jM__H-2.=\ "(Y   $NB0!DKH F"/"   #B@R!    9&L0,_P      @H3_  ,iM
#CA(Z 'HT.O[R$?P #X@ %CB(  @#  !G! ."8 (#PC/"   ""K(\  !FhM.#@\   ( @ ,9P0(Q
/.@("10 /V$4Z NA% D4 #\K\  K813H"X$4"10 /gMROP 9-A%,\0   ((4P$3P0   XY,WP ^"+D
 #_^A%.<P     ,     , >f-!B@*!A0!R! ()#X(  $3e d

Und nochmal im Klartext:

FUNCTION temperatur
LOCAL cjar,zeiger,cname$,cvalue  cjar=LPEEK(&H5A0)
IF cjar=0
RETURN 255
ENDIF
CLR zeiger
DO    cname$=MKL$(LPEEK(cjar+zeiger))   cvalue=LPEEK(cjar+zeiger+4)
EXIT IF cname$=STRING$(4,0) OR cname$="THRM"
ADD zeiger,8
LOOP  IF cname$=STRING$(4,0)
RETURN 255
ENDIF
RETURN
DPEEK(cvalue)/10
ENDFUNC






Copyright © Robert Schaffner (support@doitarchive.de)
Letzte Aktualisierung am 23. Dezember 2003
Home Diverses rund um den Falcon Device LED Ring On