Software

Home



Visual Basic Programm

Die Software setzte ich in Visual Basic 6 um. Der Quelltext sieht wie folgt aus:



Dim Eingang As String

Dim counter As Integer

Private Sub cmdabout_Click()

frmabout.Visible = True

Form1.Enabled = False

End Sub



Private Sub cmdclear_Click()

lstbox.Clear

End Sub



Private Sub cmdexit_Click()

End

End Sub



Private Sub cmdport_Click()

MSComm1.CommPort = Text2.Text

MSComm1.Settings = "9600,N,8,1"

MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case comEvReceive: Eingang = Eingang + MSComm1.Input

End Select

counter = counter + 1

If counter = 2 Then

counter = 0

Eingabe = 0

End If

Text1.Text = Eingang

End Sub



Private Sub cmdstart_Click()

cmdstop.Enabled = True

cmdclear.Enabled = True

cmdstart.Enabled = False

End Sub



Private Sub cmdstop_Click()

Text1.Text = ""

cmdstop.Enabled = False

cmdstart.Enabled = True

End Sub



Mittels einer DLL wird der USB-Anschluss zu einem virtuellen COM-Port umgewandelt. Das heißt man programmiert nur noch einen COM-Port, anstatt einen USB-Port.

Mithilfe von Microsoft Comm.Control, welche man noch zu den Komponenten hinzufügen muss, kann man den virtuellen COM-Port verwalten (öffnen, schließen etc.)

Zusätzlich habe ich noch bestimmte Buttons mithilfe einer Funktion gesperrt, wenn z. B. Start oder Stop aktiv ist. (So lässt sich der Start-Button nur einmal drücken, danach ist der Start Button gesperrt und es muss zuerst der Stop-Button gedrückt werden.

Zusätzlich kann man die listbox löschen, in der die gewünschten Daten gespeichert worden sind.

Wichtig ist auch noch zu erwähnen dass der Zähler abwarten muss bis 2 Byte übertragen worden sind. Dieser muss dann wieder null gesetzt werden, da sonst immer weiter gezählt werden würde.



Die zusätzliche DLL, welche benötigt wurde, um einen virtuellen COM-Port zu erzeugen, wurde von der Firma FTDI-Chip zum download bereitgestellt.



Als kleinen Anhang habe ich noch ein 'About'-Fenster eingefügt, wo die Informationen über die Software zu sehen sind (Ersteller / Bearbeiter).



Das Projekt wird demnächst insofern erweitert, dass man die gewonnenen Werte in einer Datei (Excel oder einem vergleichbaren Programm) abspeichern kann.





Pic-Programm


Da der PIC keinen richtigen ADC hat wird mit Hilfe des Komparators die Spannung gemessen. Die analoge Spannung wird immer mit Vref (2,5V) verglichen und je nachdem ob die Spannung an RA1 höher oder niedriger ist wird der Ausgang RA3 auf 'high' oder auf 'low' gesetzt so dass die eingehende Spannung immer um Vreff "rumeiert". Dieser Vorgang wird 1024 mal wiederholt (10 bit). Dabei wird gezählt wie oft der Ausgang RA3 auf 'low' war und somit die Spannung gemessen (Ux=0V->0x 'low' gesetzt. Ux=5V->1024x 'low' gesetzt). Das Zählergebnis wird dann ins RS232 Register geschrieben und von der Hardware gesendet.


Programm (da das Programm direkt aus MPlab kopiert ist kommen die Zeichen so zustande (wenn ein ; vorgestellt ist hat der nachfolgende Text in der Zeile keine ausführende Funktion und dient nur zur Erklärung).






Das Programm für den PIC sieht wie folgt aus:

;

; Prozessor-Takt 4 MHz

;


; Includedatei für den 16F628 einbinden


#include <P16f628A.INC>


ERRORLEVEL -302 ; SUPPRESS BANK SELECTION MESSAGES


; Configuration festlegen:

; Power on Timer, kein Watchdog, HS-Oscillator, kein Brown out, kein LV-programming

__CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF



; Variable festlegen

counter equ 0x20 ;

result_l equ 0x22 ;

result_h equ 0x23 ;


;**************************************************************

; Programmanfang


org 0


;**************************************************************

; Initialisierung *********************************************


init

clrf INTCON ; Interupt disable


; initialisierung des adc**************************************

bsf STATUS, RP0

movlw 0xEC ; Vref ein, Vref zu RA2

movwf VRCON ; LowRangeMode, VR = 12 = 2,5 V

bcf TRISA, 3 ; RA3 output des 'DAC'

bcf STATUS, RP0

movlw 0x06 ; 2 Komparatoren mit Referenzspannung

movwf CMCON ; Comp1 out = RA3



;**************************************************************



; USART initialisieren

BSF STATUS,RP0 ; Bank1

MOVLW B'10000100' ; Sender: RS232

MOVWF TXSTA

BCF STATUS,RP0 ; Bank 0

MOVLW 0x90 ; Empfänger: RS232

MOVWF RCSTA


; USART Baudrate einstellen

BSF STATUS,RP0 ; Bank1

MOVLW D'12' ; Set Baud rate 19,2 kBPS bei 4 MHz

MOVWF SPBRG

BCF TXSTA, BRGH ; BRGH=0

BCF STATUS,RP0 ; Bank 0



;**************************************************************


mainloop

call CAdc ; wandeln



RS232out

btfss PIR1,TXIF ; ist Sender leer ?

goto RS232out ; nein, noch nicht leer

movfw result_l

movwf TXREG ; und in den RS232-Sender schreiben



goto mainloop


;**************************************************************

; Wandeln der spannung*****************************************

CAdc

clrf counter

clrf counter+1

clrf result_l

clrf result_h

movlw 0x03 ; 2 Komparatoren mit Referenzspannung

movwf CMCON

loop

btfsc CMCON, C1OUT ; ist Komparator High oder low

goto complow ; low

comphigh

nop ; high

bcf PORTA, 3 ; 'DAC' = 0

incfsz result_l, f ; zählen der 'Spannung'

goto eat2cycles

incf result_h, f

goto endloop

complow

bsf PORTA, 3 ; 'DAC' = 1

nop

goto eat2cycles

eat2cycles

goto endloop

endloop

incfsz counter, f ; Zahl der Zyklen Zählen

goto eat5cycles

incf counter+1, f

movf counter+1, w

andlw 0x04 ; nur Bit 2 einblenden

btfsc STATUS, Z ; Bit 2 =1 ? 1024 Zyklen vorbei?

goto loop ; nein

goto exit ; ja

eat5cycles

goto $+1

nop

goto loop

exit

movlw 0x06 ; 2 Komparatoren mit Referenzspannung

movwf CMCON ; Comp1 out = RA3

return


end







zum Anfang

Home