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:
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....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
Grüße,
rob







Zitieren

Lesezeichen