- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: RS232 Senderoutine Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718

    RS232 Senderoutine Problem

    Hallo Zusammen,
    ich habe ein Problem in Bascom.

    Und zwar soll ein PC Terminal Befehle an einen Mega8 schicken, und dann von diesem aus über SoftUART an einen Mega32.

    Die Verbindung zwischen PC & Mega8 funktioniert.
    Allerdings funktioniert das SoftUART zum Mega32 nicht richtig.

    Hier das Programm des Mega8:
    Code:
    '//////////Ports Konfigurieren\\\\\\\\\\
    
    Config Serialin = Buffered , Size = 40                      'RS232 per Interrupt buffern
    Config Serialout = Buffered , Size = 40
    
    Open "COMC.3:9600,8,n,1" For Output As #1                   'Txd zum M32
    
    Enable Interrupts
    
    
    '//////////Aliasnamen <Start>\\\\\\\\\\
    Dim Serinput As Byte
    Dim Command As String * 24
    Dim Items As Byte
    Dim Arr(2) As String * 10
    
    '//////////Hauptprogramm <Start>\\\\\\\\\\
    
    Do
       Gosub Communicate                                        'Bluetooth PC Kommunikation
    Loop
    
    Communicate:
    If Ischarwaiting() = 1 Then
    Serinput = Inkey()                                          'Ein Zeichen holen
    
    While Serinput > 0                                          ' Solange noch Zeichen in der Warteschleife sind
    
    If Serinput = 13 Then                                       ' Zeile ende
    
       Items = Split(command , Arr(1) , " ")
    
       If Command = "move forward" Then
          Print "forward"
          Print #1 , "forward"
          Print #1 , 13
       End If
    
       If Command = "move stop" Then
          Print "stop"
          Print #1 , "stop"
          Print #1 , 13
       End If
    
       Command = ""                                             ' Neu initialisieren
    
    Else
       Command = Command + Chr(serinput)
    End If
    
    Serinput = Inkey()
    Wend
    
    End If
    Return
    
    Close #1
    End
    Und hier das des Mega32:
    Code:
    Do
    If Ischarwaiting() = 1 Then
    Serinput = Inkey()                                          'Ein Zeichen holen
    
    While Serinput > 0                                          ' Solange noch Zeichen in der Warteschleife sind
    
    If Serinput = 13 Then                                       ' Zeile ende
    
    'Commands Abfragen
       If Command = "forward" Then
          Speed_left = 200
       End If
    
       If Command = "stop" Then
          Speed_left = 1
       End If
    
       Command = ""                                             ' Neu initialisieren
    
    Else
       Command = Command + Chr(serinput)
    End If
    
    Serinput = Inkey()
    Wend
    
    End If
    Loop
    Es wird nur der 1. Befehl ausgeführt.
    Also wenn ich am PC forward printe spring der Motor am M32 an.
    Wenn ich dann stop printe passiert aber nichts mehr.

    ABER: Wenn ich den M32 direkt mit dem PC verbinde geht es.

    Es muss also am SoftUART liegen, ich weiß nur überhaupt nicht warum das net geht, bzw nur einmal.

    SEROUT hab ich auch schon probiert.

    Ich hoffe das Problem ist noch relativ übersichtlich.

    Gruß
    Lenox
    RGB-IR-Lampe, Catwiesel Bot, PC Terminal, Schrittmotoransteuerung, Elektroschocker, Stundenplan... www.stefan-reible.de

  2. #2
    Neuer Benutzer Öfters hier Avatar von TobiWan
    Registriert seit
    17.12.2006
    Ort
    Friedrichshafen
    Alter
    35
    Beiträge
    15
    Hi,

    mit welcher Taktfrequenz läuft dein Mega8? Vielleicht kommt er mit dem internen Takt und zwei UARTs nicht mehr nach...

    Evtl. mal mit einer niedrigeren Baudrate zum Mega32 fahren und wenn möglich mit einem LCD schauen, was ankommt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    Mit 16 Mhz.
    Ein LCD anzuschließen wäre mit sehr großem Aufwand verbunden, ich werd wohl mal die Baudrate runterschrauben.

    Laut Oszilloskope kommt ein Signal heraus, nur blöd das ich nicht messen kann welches.
    RGB-IR-Lampe, Catwiesel Bot, PC Terminal, Schrittmotoransteuerung, Elektroschocker, Stundenplan... www.stefan-reible.de

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    Mir ist eben noch ne Idee gekommen.
    Einfach beide Hardware Rxds und Txds verbinden und dann zum Pc.
    Zusätzlich dann noch eine Busy Leitung für Txd, damit nicht beide gleichzeitig senden (per Software).
    RGB-IR-Lampe, Catwiesel Bot, PC Terminal, Schrittmotoransteuerung, Elektroschocker, Stundenplan... www.stefan-reible.de

  5. #5
    Neuer Benutzer Öfters hier Avatar von TobiWan
    Registriert seit
    17.12.2006
    Ort
    Friedrichshafen
    Alter
    35
    Beiträge
    15
    Auch eine gute Idee, aber es wäre auch interessant zu wissen, warum das nicht wie ursprünglich gedacht ging :-D

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    30
    Beiträge
    1.641
    Ich hab gerade ein ähnliches problem. ich versuche mit nem M32 an nen M8 Befehle zu senden. Diese werden aber nicht richtig ausgeführt. So soll er bei "vor" den Motor langsam beschleunigen, ich hör aber nur ein Klicken. Wenn ich dem m8 einfah hart eincode , dass der empfangene text "vor" ist (einfach input text durch text = "vor" ersetzt), dann läuft alles.

    der m32 hat soft-uart, der m8 halt hardware-uart. Der m32 rennt mit 16 Mhz, der m8 mit 1Mhz, beide sind auf 9600 eingestellt und der m32 auf 8m1, da ich nicht wusste ,wo ich das beim m8 einstellen muss.

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $baud = 9600
    
    Dim Text As String * 16
    Dim Speed As Byte
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config Portc.2 = Output
    Config Portc.3 = Output
    
    A Alias Portc.0
    B Alias Portc.1
    C Alias Portc.2
    D Alias Portc.3
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    
    Speed = 50
    Do
    'Input Text    hab ich wie beschrieben auskommentiert, stattdessen halt text = "vor" geschrieben
    
    Text = "Vor"
    
    If Text = "Vor" Then
       A = 0
       B = 1
       C = 0
       D = 1
       Speed = 50
       Do
          Compare1a = Speed
          Compare1b = Speed
          Waitms 4
          Speed = Speed + 1
       Loop Until Speed = 150
    End If
    
    If Text = "Rueck" Then
       A = 1
       B = 0
       C = 1
       D = 0
       Do
          Compare1a = Speed
          Compare1b = Speed
          Waitms 2
          Speed = Speed - 1
       Loop Until Speed = 150
       Waitms 1000
    End If
    
    If Text = "Links" Then
    A = 1
    B = 0
    C = 0
    D = 1
    End If
    
    If Text = "Rechts" Then
    A = 0
    B = 1
    C = 1
    D = 0
    End If
    
    If Text = "Stop" Then
    A = 0
    B = 0
    C = 0
    D = 0
    End If
    
    If Text = "Kurverechts" Then
    A = 0
    B = 1
    C = 0
    D = 1
    Do
          Compare1a = Speed
          Waitms 2
          Speed = Speed - 1
       Loop Until Speed = 50
    End If
    
    If Text = "Kurvelinks" Then
    A = 0
    B = 1
    C = 0
    D = 1
    Do
          Compare1b = Speed
          Waitms 2
          Speed = Speed - 1
       Loop Until Speed = 50
    End If
    Loop
    
    End
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Portc.1 = Output
    Config Portd.2 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    
    Open "comd.7:9600,8,n,1" For Input As #1
    Open "comd.6:9600,8,n,1" For Output As #2
    
    Dim Entfernung As Integer
    Dim Text As String * 16
    
    Text = "Vor"
    Do
    
       Waitms 500
       Portc.1 = 1
       Waitms 500
       Portc.1 = 0
    
       Print #2 , "Vor"
    
    
    
    Loop
    
    
    
    
    End
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

  7. #7
    Neuer Benutzer Öfters hier Avatar von TobiWan
    Registriert seit
    17.12.2006
    Ort
    Friedrichshafen
    Alter
    35
    Beiträge
    15
    Ich habe schon öfteren von Problemen mit UART und 1 MHZ gehört, kann das aber selber nicht bestätigen, da noch nie probiert Vielleicht liegt's daran.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    30
    Beiträge
    1.641
    Nein, das ganze war eigene Blödheit. Ich hab gerade eben entdeckt, dass man besser nicht den Sendepin vom Atmega32 auf den pin legen sollte, an dem auch der Beeper angeschlossen ist

    Jetzt funktionierts.
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    30
    Beiträge
    1.641
    Der Mist funzt doch nicht. Ich weiß echt nicht, was ich da falsch baue.
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test