Moin Leute,
so, nach langer Zwangspause habe ich nun endlich alles beisammen, Schrittmotor mit Endstufe von nanotech und auch ein Steuerprogramm für den Mega32 geschrieben (mein erster Microcontroller-Programmierversuch) und es funktioniert sogar! Ich möchte per RS232 n Motoren ansprechen (erstmal nur einen zu testen).
Es gibt da jedoch folgendes Problem:
Es funktioniert nur mit dem Terminal-Emulator der Bascom-Entwickungsumgebung. Wenn ich z.B. das Terminal v1.9b von der RN-Control CD benutze, gehts nicht. Das Windows Hyperterminal hängt sich bei meiner Eingabe sogar auf, die Begrüßungsausgabe vom uC kommt jedoch noch an. Hier mal der Code, wie gesagt, es sind meine ersten Schritte in Sachen Programmierung:
Code:
' -------------- RN-Control übliche _____________________
Declare Function Tastenabfrage() As Byte
$regfile = "m32def.dat"
$framesize = 40
$swstack = 40
$hwstack = 64
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte
Dim Ton As Integer
I2cinit
Start Adc
'Sound Portd.7 , 400 , 450 'BEEP
'Sound Portd.7 , 400 , 250 'BEEP
'Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-Control V1.4 *****"
Print "Steuerung des Schrittmotortreibers SMC11"
Print
' -------------- Ende RN-Control übliche _____________________
Config Pina.1 = Output
Config Pina.2 = Output
Config Pina.3 = Output
Declare Sub Serial0charmatch()
Declare Sub Auseinanderklabustern()
Declare Sub Drive(motor2drive As Integer)
' ---------------------------------------------------------------
Config Serialin = Buffered , Size = 9 , Bytematch = 13
Enable Interrupts
' ---------------------------------------------------------------
Dim Drive_data As String * 7
Dim M As String * 7 , D As String * 7 , T As String * 7
Dim Incoming_data As String * 7
Dim Motor2drive As Integer
Dim Direction2drive As Integer
Dim Time2drive As Long
Dim Motornumbers As Integer
Dim Direction As Integer
Dim Maxtime As Long
Motornumbers = 0
Direction = 1
Maxtime = 99999
' ---------------------------------------------------------------
Do
!NOP
Waitms 500
Loop
End
' ---------------------------------------------------------------
Sub Serial0charmatch()
'Daten vom Buffer auslesen
Input Incoming_data Noecho
Drive_data = Incoming_data ' drive_data from incoming_data (RS232)
'Print "Data recieved"
'Print Incoming_data
Print Drive_data
'Print "Data send"
Clear Serialin
If Drive_data <> "Nononono" And Len(drive_data) = 7 Then
Call Auseinanderklabustern
Incoming_data = "Nononono"
Else
Print "WRONG INPUT, have to be 7 numbers (MotornumberDirectionTime): MDTTTTT"
End If
End Sub
' ---------------------------------------------------------------
Sub Auseinanderklabustern()
Local E As Integer
M = Left(drive_data , 1)
Print "Motornumber (0..99): " ; M ' M is motor (0..99)
D = Mid(drive_data , 2 , 1)
Print "Direction (0:forward, 1:reverse): " ; D ' D is direction (0:forward, 1:reverse)
T = Right(drive_data , 5)
Print "Time [ms] (0..99999): " ; T ' T is time im ms (0..99999)
Motor2drive = Val(m)
Direction2drive = Val(d)
Time2drive = Val(t) / 2 ' 500Hz
If Motor2drive > Motornumbers Or Direction2drive > Direction Then
Print "Only Motor Nr.0 installed"
Print "For Direction choose 0 or 1"
Else
Call Drive(motor2drive)
End If
End Sub
Dim N As Long
Sub Drive(0)
For N = 1 To Time2drive
Porta.1 = 0
Waitus 1000
Porta.1 = 1
Waitus 1000
Porta.2 = Direction2drive
Porta.3 = 1 'Enable modus checken
Next N
Print "Fertig!"
End Sub
Wo ist der Unterschied zwischen dem Bascom Terminal und dem "normalen" Hyperterminal? Warum werden meine Eingaben im normalen nicht verabeitet? Fehler der Baudrate etc. kann ich eigentlich ausschließen, hatte alles etliche male überprüft....
Grüße,
rob
Lesezeichen