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