
Tiny13-Speicheroszilloskop und Logikanalysator
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