Tiny13-Speicheroszilloskop und Logikanalysator

von Hermann Nieder                   

Elektronik-Labor   Projekte   AVR 





Das Interface-Programm von Burkhard Kainka für den ATtiny13 auf der Platine des Lernpakets Mikrocontroller kann mit einem zusätzlichen Kommando  so erweitert  werden, dass der  Mikrocontroller  durch Senden von  5 und einem anschließenden Wert zwischen 1 und 7 dazu veranlasst wird, nun den gerade übermittelten  Teilerfaktor für die  AD-Wandlung zu verwenden. Das Bild oben zeigt das Oszillogramm der Ausgangsspannung eines Sinussignals am Ausgang  eines  Funktionsgenerators mit einem XR2206.  Die Frequenz ist auf 1000 Hz eingestellt. Der  Teilerfaktor  ist 2 . Es wird ein Programm in Visual Basic 5 verwendet, das die oben beschriebene Möglichkeit bereits beinhaltet. Der Teilerfaktor wird mit einer Bildlaufleiste eingestellt und in einem Textfeld angezeigt

...
div_f = HScroll3.Value
Select Case div_f
Case 1: Text9.Text = "2"
Case 2: Text9.Text = "4"
Case 3: Text9.Text = "8"
Case 4: Text9.Text = "16"
Case 5: Text9.Text = "32"
Case 6: Text9.Text = "64"
Case 7: Text9.Text = "128"
End Select


Das betreffende Listenfeld 1 wird gelöscht und zuerst das Kommando 5 und der Teilerfaktor an den ATtiny13 übertragen, bevor 100 für das  Aufzeichnen von 60 Messwerten gesendet wird. 

...
List1.Clear
 n = 0
SENDBYTE 5
DELAY 5
SENDBYTE div_f
DELAY 5
SENDBYTE 100
While n < 61
d = READBYTE
List1.AddItem Str$(d)
n = n + 1
Wend


Man wählt mit einem Textfeld die gewünschte COM-Schnittstelle, hier COM1, öffnet diese und  legt  mit einer Bildlaufleiste eine Linienfarbe und mit einem Optionsfeld eine von drei möglichen Linienbreiten für die spätere grafische Darstellung fest. Mit einer anderen Bildlaufleiste lässt sich anschließend der gewünschte Teilerfaktor einstellen, bevor man die entsprechende Schaltfläche drückt, damit der ATtiny13 eine Einkanal- bzw. eine Zweikanalmessung durchführt und anschließend die betreffenden Bytes an den PC zu überträgt.

Betätigt man die jeweilige Schaltfläche darunter, erfolgt eine grafische Darstellung des zeitlichen Verlaufs der Eingangsspannung/en. Eventuell muss ein gewählter Teilerfaktor geändert werden, um anschließend erneut eine Messung zu starten und die grafische Darstellung dazu durchführen zu lassen, bis man eine brauchbare Abbildung erhält.

Wenn man zuvor im Terminal zum Lernpaket Mikrocontroller den Wert 5 und wie hier anschließend  1 an den ATtiny13 übermittelt hat,
   


erhält man bei unveränderten Einstellungen am Funktionsgenerator bei einer Einkanalmessung    diese grafische Darstellung.  
   
Dies hier sind die Ergänzungen/Änderungen, die am ursprünglichen Programm Interface.asm vorzunehmen sind, wenn man die oben beschriebene Möglichkeit nutzen möchte:   

...
    .def   div_f   = r30   ; neu
    .def   tmp1    = r31   ; neu
...  
 

k1:   cpi    Kom,1
      brne   K5       ;war brne K16
      ldi    A,100
      rcall  WrCOM

k5:   cpi    Kom,5    ;neues Kommando
      brne   K16      
      rcall  RdCOM   
      mov    div_f,A 
      rcall  AdcInit  ;neuen Wert uebernehmen 
...       
AdcInit:
      ;ldi   A,3        
     
      out   ADCSRA,div_f   
      sbi   ADCSRA,ADEN ;AD einschalten
      ret
...




Eine zusätzliche Programmerweiterung außer derjenigen, die oben beschrieben wird, erlaubt es, auch digitale Signale an Pb4 bzw. an Pb4 und Pb3 durch den Mikrocontroller aufzeichnen zu lassen und diese anschließend an einen angeschlossenen PC zu übertragen.

Das Programm in Visual Basic 5 kommuniziert mit  dem ATtiny13 und sorgt in ähnlicher Weise, wie es oben erläutert worden ist,  hier für eine anschauliche  Darstellung der jeweiligen zeitlichen Verläufe von digitalen Signalen. Im Bild sind dies oben das Eingangssignal eines CMOS-ICs 4024 und unten dasjenige an seinem Ausgang Q0.  Der Taktgenerator mit Schmitt-Trigger-Stufen eines 4093 und der Binärzähler 4024 werden mit einer externen Spannung von 5V betrieben.   Mit je einer Bildlaufleiste lässt sich die Farbe der darzustellenden Linie einstellen, während eine weitere dazu dient, einen Faktor für die Verzögerung beim Einlesen der digitalen Signale festzulegen. Es wurde zunächst die Schaltfläche    „LG-An Pb3 u.Pb4“ betätigt, damit die digitalen Signale an Pb4 und an Pb3 eingelesen und mit einem Druck auf  „Plot 1 und 2“ die grafische Darstellung erfolgte. Links neben den beiden Bildfeldern kann man ergänzend in Textfeldern zusätzlich eine Beschriftung vornehmen. Die Linienbreiten der grafischen Darstellungen lassen sich mit Optionsfeldern in drei Stufen einstellen.



Mit den Schaltflächen „L_Pb4_1“ und „L_Pb4_2“ kann man auch digitale Signale ausschließlich an Pb4 einlesen und ihre zeitlichen Verläufe in verschieden Farben darstellen lassen, wie es z. B. dieses Bild zeigt. Ein zweiter ATtiny13 sendete an Pb3 fortlaufend mit einer Pause von 250 Mikrosekunden das Zeichen 85 an die serielle Schnittstelle des angeschlossenen PCs, und zwar im ersten Fall oben mit 9600 Baud, während dies im zweiten Fall mit 19200 Baud erfolgte.

Dies hier ist ein Auszug aus dem Programmlisting in Bascom AVR für 19200 Baud:

...
Open "comb.3:19200,8,n,1,INVERTED" For Output As #1
Do
Put #1 , 85
Waitus 250
Loop

Der oben vorgestellte Mini-Logikanalysator unter Mitwirkung eines  ATtiny13 hat seine Grenzen. Der Mikrocontroller liest jeweils nur 60 Werte an Pb4 bzw. 30 Werte an Pb4 und an Pb3 ein, bevor diese an den PC  übertragen werden. Aus diesem Grund beginnt man bei der Auswahl eines geeigneten Faktors für die Verzögerung am besten mit dem kleinsten Wert  und vergrößert diesen schrittweise, lässt den Mikrocontroller einlesen, sich den zeitlichen Verlauf darstellen usw.,  bis man eine brauchbare Abbildung erhält. Die Bildfelder lassen sich einzeln und auch gemeinsam löschen.  Um einen  geeigneten Zeitpunkt zum Einlesen mit einer der Schaltflächen „L_Pb4_1“ bzw. „L_Pb4_2“ zu finden, bedarf es ebenfalls einiger Versuche, bis eine grafische Darstellung wie eine  der beiden im Bild oben gelingt. 

Nach den folgenden  zusätzlichen Änderungen/Ergänzungen  am ursprünglichen Programm Interface.asm  kann man den oben beschriebenen einfachen Tiny13-Logikanalysator mit einem bzw. zwei Kanälen nutzen: 

...
k101: cpi   Kom,101   ;Oszi 2 Kanal
      brne  k104    ; war brne K250
Oszi2:ldi   XL,96
      Ldi   XH,0
...
...
k104:                ; einf. Logikanalyse
      cpi   Kom,104  ; 1 Kanal
      brne  k105
      ldi    XL,96
      ldi    XH,0
      ldi    Count2,62
      mov tmp1,div_f
      cbi ddrb,4
Trig:
      sbis   Pinb,4    ; Start bei High
      rjmp Trig
     
o104:
     
      rcall LogAnB4
      st     X+,A
      dec    Count2
      brne   o104      ;61 mal
     
      ldi   XL,96
      ldi   XH,0
      ldi   Count2,61
o105:
      Ld    A,X+
      rcall WrCOM
      dec   Count2
      brne  o105      ;61 mal     
k105:
      cpi   Kom,105  ; 2 Kanaele
      brne  k250
LgAn2:
      ldi   XL,96
      Ldi   XH,0
      Ldi   Count2,31
      mov   tmp1,div_f
      cbi   ddrb,4     ;Eingang
      cbi   ddrb,3     ;Eingang
;Trig2:
;     sbis   Pinb,4    ; Start bei High
;      rjmp   Trig2
       
o106:
      rcall LogAnB4
      St    X+,A
      rcall    LogAnB3
      st    X+,A
      dec   Count2
      brne  o106     ; 31 mal

      ldi   XL,96
      ldi   XH,0
      ldi   Count2,62
o107:
      Ld    A,X+
      rcall WrCOM
      dec   Count2
      brne  O107     ;31 mal


  LogAnB4:
      ldi a,0b00000000
      sbic pinb,4
      ldi a,0b10000000
           
LogAn0:
     
      mov tmp1,div_f
D_lgAn0:
      dec tmp1
      brne D_LGAn0
      ret

LogAnB3:
     
      ldi a,0b00000000
      sbic pinb,3
      ldi a,0b10000000
           
LgAn0:
     
      mov tmp1,div_f
D_lgA0:
      dec tmp1
      brne D_lgA0
      ret   


Interface.asm zu finden auf  www.elektronik-labor.de/AVR/T13oszi.html, dort:   OsziT13_F.zip

Programmlisting in Assembler sowie Programme in Visual Basic 5 zum Beitrag

Download:   T13_Intf_LogAn4.zip     T13_Oszi_LogAn_VB.zip


;Urspruengliche Datei: Interface.asm, Input/Output mit 9600 Baud
;von Burkhard Kainka,
;Aenderungen: neues Kommando 5
;sowie Kommandos 104 und 105, damit
;einfache Logikanalyse moeglich ist


.include "tn13def.inc"

.def A = r16
.def Delay = r17
.def Count = r18
.def Kom = r19
.def B = r20
.def C = r21
.def D = r22
.def Count2 = r23
.def EEadr = r24
.def EEmode = r25
.def div_f = r30 ; neu
.def tmp1 = r31 ; neu



;Port B
.equ TXD = 1
.equ RXD = 2


rjmp Anfang
Anfang:
sbi ddrb,TXD ;Datenrichtung TXD

ldi div_f,3 ;neu
rcall AdcInit
rcall ADCrd
rcall OscKorrektur

Schleife:
rcall RdCOM
mov Kom,A
k1: cpi Kom,1
brne K5 ;war brne K16
ldi A,100
rcall WrCOM

k5: cpi Kom,5 ;neues Kommando
brne K16
rcall RdCOM
mov div_f,A
rcall AdcInit ;neuen Wert uebernehmen

k16: cpi Kom,16
brne K17
rcall RdCOM
andi A,0b00011001
out portb,A
k17: cpi Kom,17
brne K18
rcall RdCOM
andi A,0b00011011
ori A,0b00000010
out ddrb,A
k18: cpi Kom,18
brne K32
ldi A,0 ;PWM initialisieren
out OCR0A, A
ldi A,0x83
out TCCR0A, A
ldi A,0x02
out TCCR0B, A
k32: cpi Kom,32
brne K48
in A,pinb
rcall WrCOM
k48: cpi Kom,48
brne K49
ldi A,2
rcall AD8Bit
rcall WrCOM
k49: cpi Kom,49
brne K56
ldi A,3
rcall AD8Bit
rcall WrCOM

k56: cpi Kom,56
brne K57
ldi A,2
rcall ADCrd
rcall WrCOM
mov A,B
rcall WrCOM

k57: cpi Kom,57
brne K64
ldi A,3
rcall ADCrd
rcall WrCOM
mov A,B
rcall WrCOM
k64: cpi Kom,64
brne K100
rcall RdCOM
out OCR0A,A

k100: cpi Kom,100 ;Oszi 1 Kanal
brne K101
Oszi: ldi XL,96
ldi XH,0
ldi Count2,61

O100: rcall ADCrd8BitB4
st X+,A
dec Count2
brne O100 ;61 mal

ldi XL,96
ldi XH,0
ldi Count2,61
O101:
Ld A,X+
rcall WrCOM
dec Count2
brne O101 ;61 mal

k101: cpi Kom,101 ;Oszi 2 Kanal
brne k104 ; war brne K250
Oszi2:ldi XL,96
Ldi XH,0
Ldi Count2,31

O102: rcall ADCrd8BitB4
St X+,A
rcall ADCrd8BitB3
st X+,A
dec Count2
brne O102 ;31 mal
ldi XL,96
ldi XH,0
ldi Count2,62
O103:
Ld A,X+
rcall WrCOM
dec Count2
brne O103 ;31 mal

k104: ; einf. Logikanalyse
cpi Kom,104 ; 1 Kanal
brne k105
ldi XL,96
ldi XH,0
ldi Count2,62
mov tmp1,div_f
cbi ddrb,4
Trig:
sbis Pinb,4 ; Start bei High
rjmp Trig

o104:

rcall LogAnB4
st X+,A
dec Count2
brne o104 ;61 mal

ldi XL,96
ldi XH,0
ldi Count2,61
o105:
Ld A,X+
rcall WrCOM
dec Count2
brne o105 ;61 mal
k105:
cpi Kom,105 ; 2 Kanaele
brne k250
LgAn2:
ldi XL,96
Ldi XH,0
Ldi Count2,31
mov tmp1,div_f
cbi ddrb,4 ;Eingang
cbi ddrb,3 ;Eingang
;Trig2:
; sbis Pinb,4 ; Start bei High
; rjmp Trig2

o106:
rcall LogAnB4
St X+,A
rcall LogAnB3
st X+,A
dec Count2
brne o106 ; 31 mal

ldi XL,96
ldi XH,0
ldi Count2,62
o107:
Ld A,X+
rcall WrCOM
dec Count2
brne o107 ;31 mal

k250: cpi Kom,250
brne K251
rcall RdRXD
rcall WrCOM

k251: cpi Kom,251
brne K252
in A, osccal
rcall WrCOM

k252: cpi Kom,252
brne K253
ldi EEadr,63
rcall RdEE
rcall WrCOM

k253: cpi Kom,253
brne K254
rcall RdCOM
ldi EEadr,63
rcall WrEE

k254: cpi Kom,254
brne K255
rcall RdCOM
out osccal,A


k255: cpi Kom,255 ;RC-Osc. kalibireren
brne SchleifenEnde
rcall Cal ;20 x Byte 0

SchleifenEnde:
rjmp Schleife

LogAnB4:
ldi a,0b00000000
sbic pinb,4
ldi a,0b10000000

LogAn0:

mov tmp1,div_f
D_lgAn0: ;Warteschleife
dec tmp1
brne D_LGAn0
ret

LogAnB3:

ldi a,0b00000000
sbic pinb,3
ldi a,0b10000000

LgAn0:

mov tmp1,div_f
D_lgA0: ;Warteschleife
dec tmp1
brne D_lgA0
ret




OscKorrektur: ;OSCCAL in EEPROM(63)
ldi EEadr,63
rcall RdEE
in B, osccal
sub B,A
cpi B,5 ;Abweichung <5?
brlo OscCopy
cpi B,252 ;Abweichung >-5?
brsh OscCopy
ret
OscCopy:
rcall WrCOM
ldi EEadr,63
rcall RdEE
out osccal,A
ret

Cal:
in B,osccal
ldi D, 10 ;maximale Abweichung
subi B,10
ldi Count2,20
C1:
out osccal, B
rcall RdRXD ;Zeit messen
subi A,225 ;Byte 0: 225
cpi A,128
brlo C1b
com A
C1b:
cp A,D
brsh C3
rcall Hit
C2:
cpi A,3
brsh C3
rcall Hit
C3:
rcall WrCOM
inc B
dec Count2
brne C1
subi B,10 ;alter Wert in osccal
mov A,C ;neuer Wert
out osccal,A
ldi EEadr,63
rcall WrEE
rcall WrCOM
mov A,B
rcall WrCOM
ret

Hit:
mov C,B ;besserer Osccal-Wert in C
inc A
mov D,A ;kleinerer Grenzwert in D
dec A
ret

RdRXD:
sbis PINB,RXD ;9,6 kBaud, 25/Bit
rjmp RdRXD
ldi A,0
RXD0: inc A ;1
nop ;1
sbic PINB,RXD ;2
rjmp RXD0 ;1, 5 Takte
ret

AD8Bit:
out ADMUX,A
sbi ADMUX,ADLAR ;Left adjust
sbi ADCSRA,ADSC ;Wandlung starten
AD8rdy:
sbic ADCSRA,ADSC
rjmp AD8rdy
sbi ADCSRA,ADSC
AD8rdyb:
sbic ADCSRA,ADSC
rjmp AD8rdyb
in A,ADCH
ret

ADCrd:
out ADMUX,A
sbi ADCSRA,ADSC ;Wandlung starten
AD10rdy:
sbic ADCSRA,ADSC
rjmp AD10rdy
sbi ADCSRA,ADSC
AD10rdyb:
sbic ADCSRA,ADSC
rjmp AD10rdyb
in B,ADCL
in A,ADCH
ret

AdcInit:
;ldi A,3

out ADCSRA,div_f
sbi ADCSRA,ADEN ;AD einschalten
ret

ADCrd8BitB4: ;8 Bit ADC2
ldi A, 34
out ADMUX,A
sbi ADCSRA,ADSC
AD4rdy:
sbic ADCSRA,ADSC
rjmp AD4rdy
sbi ADCSRA,ADSC
AD4rdyb:
sbic ADCSRA,ADSC
rjmp AD4rdyb
in A,ADCH
ret

ADCrd8BitB3: ;8 Bit ADC3
ldi A, 35
out ADMUX,A
sbi ADCSRA,ADSC
AD3rdy:
sbic ADCSRA,ADSC
rjmp AD3rdy
sbi ADCSRA,ADSC
AD3rdyb:
sbic ADCSRA,ADSC
rjmp AD3rdyb
in A,ADCH
ret




RdCOM: sbis pinb,RXD ;Empfangen
rjmp RdCOM
ldi Delay,58
D1: dec Delay
brne D1
ldi A,0
ldi Count,8
L1: lsr A
sbic pinb,RXD
ori A,128
ldi Delay, 38
D2: dec Delay
brne D2
dec Count
brne L1
ldi Delay, 38
D3: dec Delay
brne D3
com A
ret

WrCOM: sbi portb,TXD ;Senden
ldi Delay,38
D4: dec Delay
brne D4
ldi Count,8
L2: sbrc A,0
rjmp OFF
rjmp ONt
ONt: sbi portb,TXD
rjmp BitD
OFF: cbi portb,TXD
rjmp BitD
BitD: ldi Delay,38
D5: dec Delay
brne D5
lsr A
dec Count
brne L2
cbi PORTB,TXD
ldi Delay,38
D6: dec Delay
brne D6
ret


RdEE: sbic EECR,EEWE
rjmp RdEE
out EEAR,EEadr
sbi EECR,EERE
in A,EEDR
ret

WrEE: sbic EECR,EEWE
rjmp WrEE
ldi EEmode,0
out EECR,EEmode
out EEARL,EEadr
out EEDR,A
sbi EECR,EEMPE
sbi EECR,EEPE
ret




Dim Y1alt, Y2alt, Y1neu, Y2neu, n, f_w1, f_w2, k, dw, h_s3, i, div_f

Private Sub Check1_Click()
If Check1.Value Then
OszilloskopTiny13_2.Height = 5915
Else
OszilloskopTiny13_2.Height = 7695
End If

End Sub

Private Sub Command10_Click()
'Skala
Picture1.DrawWidth = 1
For i = 0 To 40
Picture1.Line (24 + i * 10, 275)-(24 + i * 10, 280), QBColor(1)
Next i
For i = 0 To 8
Picture1.Line (24 + i * 50, 275)-(24 + i * 50, 285), QBColor(1)
Next i

End Sub

Private Sub Command1_Click()
x = 0
'Linienbreite
Picture1.DrawWidth = dw
Y1alt = Val(List1.List(0))
'Es wurden 61 Werte eingelesen
Y1alt = Val(List1.List(1))
Y1alt = 275 - Val(List1.List(0))
While x < 61
d = Val(List1.List(x))
Y1neu = 275 - d
Picture1.Line (x * 6 + 24, Y1alt)-((x + 1) * 6 + 24, Y1neu), QBColor(f_w1)
Y1alt = Y1neu
x = x + 1
Wend
End Sub

Private Sub Command11_Click()
List1.Clear
End Sub

Private Sub Command2_Click()
List1.Clear
List2.Clear
End Sub

Private Sub Command3_Click()
List1.Clear
List2.Clear
SENDBYTE 5
DELAY 5
SENDBYTE div_f
DELAY 5
SENDBYTE 101
While n < 62
d = READBYTE
'ADC3-Werte
List2.AddItem Str$(d)
n = n + 1
d = READBYTE
'ADC2-Werte
List1.AddItem Str$(d)
n = n + 1
Wend
End Sub

Private Sub Command4_Click()

n = 0
OpenString = "COM" + Text1.Text + ":9600,N,8,1"
i = OPENCOM(OpenString)
Label1.Caption = "geöffnet"
If i = 0 Then MsgBox ("Schnittstelle nicht verfügbar")
TIMEINIT
TIMEOUTS 300
RTS 1
DTR 1
End Sub

Private Sub Command5_Click()
Picture1.Cls
n = 0
End Sub

Private Sub Command6_Click()

CLOSECOM
Label1.Caption = "geschlossen"
n = 0
End Sub

Private Sub Command7_Click()
List1.Clear
n = 0
SENDBYTE 5
DELAY 5
SENDBYTE div_f
DELAY 5
SENDBYTE 100
While n < 61
d = READBYTE
List1.AddItem Str$(d)
n = n + 1
Wend
End Sub

Private Sub Command8_Click()
List2.Clear
End Sub

Private Sub Command9_Click()
x = 0
'Linienbreite
Picture1.DrawWidth = dw
Y1alt = Val(List1.List(0))
Y2alt = Val(List2.List(0))
'Es wurden 2*31 Werte eingelesen
Y1alt = 275 - Val(List1.List(0))
Y2alt = 275 - Val(List2.List(0))
While x < 31
d = Val(List1.List(x))
Y1neu = 275 - d
Picture1.Line (x * 12 + 24, Y1alt)-((x + 1) * 12 + 24, Y1neu), QBColor(f_w1)
d = Val(List2.List(x))
Y2neu = 275 - d
Picture1.Line (x * 12 + 24, Y2alt)-((x + 1) * 12 + 24, Y2neu), QBColor(f_w2)
Y1alt = Y1neu
Y2alt = Y2neu
x = x + 1
Wend
End Sub

Private Sub Form_Load()
'Zuvor muss Interface.hex in den auf der
'Platine des Lernpakets Mikrocontroller
'verwendeten ATtiny13 übertragen worden sein.

n = 0
k = 0
dw = 1
Shape1.Visible = True
Label8.Visible = True
HScroll1.Visible = True
Command3.Visible = True
Command9.Visible = True
List1.Visible = True
'Command2.Visible = True
'Label3.Visible = True
Label11.Visible = True
'Label6.Visible = True
Text18.Visible = True
Picture1.DrawWidth = dw

Label1.Caption = "geschlossen"
RTS 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
CLOSECOM
End Sub

Private Sub HScroll1_Change()
f_w1 = HScroll1.Value
Shape1.FillColor = QBColor(f_w1)
End Sub

Private Sub HScroll2_Change()
f_w2 = HScroll2.Value
Shape2.FillColor = QBColor(f_w2)
End Sub

Private Sub HScroll3_Change()
div_f = HScroll3.Value
Select Case div_f
Case 1: Text9.Text = "2"
Case 2: Text9.Text = "4"
Case 3: Text9.Text = "8"
Case 4: Text9.Text = "16"
Case 5: Text9.Text = "32"
Case 6: Text9.Text = "64"
Case 7: Text9.Text = "128"
End Select
End Sub

Private Sub Option1_Click()
dw = 1
End Sub

Private Sub Option2_Click()
dw = 2
End Sub

Private Sub Option3_Click()
dw = 3
End Sub

Private Sub Option4_Click()

Command8.Visible = True
Shape1.Visible = False
Label8.Visible = False
HScroll1.Visible = False
Command3.Visible = False
Command9.Visible = False
List1.Visible = False
Command1.Visible = True
Command7.Visible = True
Command11.Visible = False
'Label3.Visible = False
'Label6.Visible = False
Label11.Visible = False
End Sub

Private Sub Text17_Change()
If Val(Text17.Text) < 100 Then
Text12.Text = "50 "
Text18.Visible = True
End If
End Sub


Private Sub Option5_Click()
Command8.Visible = False
Shape1.Visible = True
Label8.Visible = True
HScroll1.Visible = True
Command3.Visible = True
Command9.Visible = True
Command1.Visible = False
Command7.Visible = False
List1.Visible = True
Command8.Visible = False
Command11.Visible = True
'Label3.Visible = True
'Label6.Visible = True
Label11.Visible = True
End Sub







Dim Y1alt, Y2alt, Y1neu, Y2neu, n, f_w1, f_w2, k, dw, h_s3, i, div_f

Private Sub Check1_Click()
If Check1.Value Then
OszilloskopTiny13_2.Height = 5915
Else
OszilloskopTiny13_2.Height = 7695
End If

End Sub



Private Sub Command1_Click()
x = 0
'Linienbreite
Picture1(0).DrawWidth = dw
Y1alt = Val(List1.List(0))
'Es wurden 62 Werte eingelesen
Y1alt = Val(List1.List(1))
Y1alt = 150 - Val(List1.List(0))
While x < 62
d = Val(List1.List(x))
Y1neu = 150 - d
Picture1(0).Line (x * 6 + 24, Y1alt)-((x + 1) * 6 + 24, Y1alt), QBColor(f_w1)
Picture1(0).Line ((x + 1) * 6 + 24, Y1alt)-((x + 1) * 6 + 24, Y1neu), QBColor(f_w1)
Y1alt = Y1neu
x = x + 1
Wend
Text2.ForeColor = QBColor(f_w1)
End Sub

Private Sub Command11_Click()
List1.Clear
End Sub

Private Sub Command12_Click()
'Skala
Picture1(0).DrawWidth = 1
For i = 0 To 40
Picture1(0).Line (24 + i * 10, 150)-(24 + i * 10, 155), QBColor(1)
Next i
For i = 0 To 8
Picture1(0).Line (24 + i * 50, 150)-(24 + i * 50, 160), QBColor(1)
Next i
End Sub

Private Sub Command13_Click()
'Skala
Picture1(1).DrawWidth = 1
For i = 0 To 40
Picture1(1).Line (24 + i * 10, 150)-(24 + i * 10, 155), QBColor(1)
Next i
For i = 0 To 8
Picture1(1).Line (24 + i * 50, 150)-(24 + i * 50, 160), QBColor(1)
Next i
End Sub

Private Sub Command14_Click()
Picture1(0).Cls
n = 0
End Sub

Private Sub Command15_Click()
Picture1(1).Cls
n = 0
End Sub

Private Sub Command16_Click()
List2.Clear
n = 0
div_f = HScroll3.Value
SENDBYTE 5
DELAY 10
SENDBYTE div_f
DELAY 10
SENDBYTE 104
While n < 62
d = READBYTE
'ADC3-Werte
List2.AddItem Str$(d)
n = n + 1
Wend
Label13.Caption = Str$(div_f)
End Sub

Private Sub Command2_Click()
Picture1(0).Cls
Picture1(1).Cls
n = 0
End Sub

Private Sub Command3_Click()
List1.Clear
List2.Clear
n = 0
div_f = HScroll3.Value
SENDBYTE 5
DELAY 10
SENDBYTE div_f
DELAY 10
SENDBYTE 105
While n < 62
d = READBYTE
'Werte von Pb4
List1.AddItem Str$(d)
n = n + 1
d = READBYTE
'Werte von Pb3
List2.AddItem Str$(d)
n = n + 1
Wend
Label12.Caption = Str$(div_f)
Label13.Caption = Str$(div_f)
End Sub

Private Sub Command4_Click()

n = 0
OpenString = "COM" + Text1.Text + ":9600,N,8,1"
i = OPENCOM(OpenString)
Label1.Caption = "geöffnet"
If i = 0 Then MsgBox ("Schnittstelle nicht verfügbar")
TIMEINIT
TIMEOUTS 300
RTS 1
DTR 1
End Sub

Private Sub Command5_Click()
'Linienbreite
x = 0
Picture1(1).DrawWidth = dw
Y1alt = Val(List2.List(0))
'Es wurden 31 Werte eingelesen
Y1alt = Val(List2.List(1))
Y1alt = 150 - Val(List2.List(0))
While x < 62
d = Val(List2.List(x))
Y1neu = 150 - d
Picture1(1).Line (x * 6 + 24, Y1alt)-((x + 1) * 6 + 24, Y1alt), QBColor(f_w2)
Picture1(1).Line ((x + 1) * 6 + 24, Y1alt)-((x + 1) * 6 + 24, Y1neu), QBColor(f_w2)
Y1alt = Y1neu
x = x + 1
Wend
Text3.ForeColor = QBColor(f_w2)
End Sub

Private Sub Command6_Click()

CLOSECOM
Label1.Caption = "geschlossen"
n = 0
End Sub

Private Sub Command7_Click()
List1.Clear
n = 0
div_f = HScroll3.Value
SENDBYTE 5
DELAY 10
SENDBYTE div_f
DELAY 10
SENDBYTE 104
While n < 62
d = READBYTE
'ADC3-Werte
List1.AddItem Str$(d)
n = n + 1
Wend
Label12.Caption = Str$(div_f)
End Sub

Private Sub Command8_Click()
List2.Clear
End Sub

Private Sub Command9_Click()
x = 0
Picture1(0).DrawWidth = dw
Y1alt = Val(List1.List(0))
'Es wurden 62 Werte eingelesen
Y1alt = Val(List1.List(1))
Y1alt = 150 - Val(List1.List(0))
While x < 32
d = Val(List1.List(x))
Y1neu = 150 - d
Picture1(0).Line (x * 12 + 24, Y1alt)-((x + 1) * 12 + 24, Y1alt), QBColor(f_w1)
Picture1(0).Line ((x + 1) * 12 + 24, Y1alt)-((x + 1) * 12 + 24, Y1neu), QBColor(f_w1)
Y1alt = Y1neu
x = x + 1
Wend
'Linienbreite
x = 0
Picture1(1).DrawWidth = dw
Y1alt = Val(List2.List(0))
'Es wurden 31 Werte eingelesen
Y1alt = Val(List2.List(1))
Y1alt = 150 - Val(List2.List(0))
While x < 32
d = Val(List2.List(x))
Y1neu = 150 - d
Picture1(1).Line (x * 12 + 24, Y1alt)-((x + 1) * 12 + 24, Y1alt), QBColor(f_w2)
Picture1(1).Line ((x + 1) * 12 + 24, Y1alt)-((x + 1) * 12 + 24, Y1neu), QBColor(f_w2)
Y1alt = Y1neu
x = x + 1
Wend
End Sub

Private Sub Form_Load()
'Zuvor muss Interface.hex in den auf der
'Platine des Lernpakets Mikrocontroller
'verwendeten ATtiny13 übertragen worden sein.

n = 0
k = 0
dw = 1
Shape1.Visible = True
Label8.Visible = True
HScroll1.Visible = True
Command3.Visible = True
Command9.Visible = True
List1.Visible = True
'Command2.Visible = True
'Label3.Visible = True
Label11.Visible = True
Command8.Visible = True
'Label6.Visible = True
Text18(0).Visible = True
Picture1(0).DrawWidth = dw

Label1.Caption = "geschlossen"
RTS 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
CLOSECOM
End Sub

Private Sub HScroll1_Change()
f_w1 = HScroll1.Value
Shape1.FillColor = QBColor(f_w1)
Text2.ForeColor = QBColor(f_w1)
End Sub

Private Sub HScroll2_Change()
f_w2 = HScroll2.Value
Shape2.FillColor = QBColor(f_w2)
Text3.ForeColor = QBColor(f_w2)
End Sub

Private Sub HScroll3_Change()
div_f = HScroll3.Value
Text9.Text = Str$(div_f)
End Sub

Private Sub Option1_Click()
dw = 1
End Sub

Private Sub Option2_Click()
dw = 2
End Sub

Private Sub Option3_Click()
dw = 3
End Sub

Private Sub Option4_Click()

Command8.Visible = True
Shape1.Visible = False
Label8.Visible = False
HScroll1.Visible = False
Command3.Visible = False
Command9.Visible = False
List1.Visible = False
Command1.Visible = True
Command7.Visible = True
Command11.Visible = False
'Label3.Visible = False
'Label6.Visible = False
Label11.Visible = False
End Sub

Private Sub Text17_Change()
If Val(Text17.Text) < 100 Then
Text12.Text = "50 "
Text18(0).Visible = True
End If
End Sub


Private Sub Option5_Click()
Command8.Visible = False
Shape1.Visible = True
Label8.Visible = True
HScroll1.Visible = True
Command3.Visible = True
Command9.Visible = True
Command1.Visible = False
Command7.Visible = False
List1.Visible = True
Command8.Visible = False
Command11.Visible = True
'Label3.Visible = True
'Label6.Visible = True
Label11.Visible = True
End Sub



Elektronik-Labor   Projekte   AVR