-         

Ergebnis 1 bis 8 von 8

Thema: Fernbedienung über RS232 mit komischem Verhalten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2006
    Beiträge
    5

    Frage Fernbedienung über RS232 mit komischem Verhalten

    Anzeige

    Hallo ihr da draußen,

    ich habe mich mal wieder dran gemacht mein Hobby etwas voranzutreiben. Nun ist es so, ich habe mein Roboterchassie fertig und habe nun alle Elektronik aufgeschraubt. Ich steuer über ein mega128Funk Board, das klappt soweit hervoragend. Schon fast verwunderlich das alles ohne ein Problem.
    Ich habe zum Test erstmal eine simple, manuelle Steuerung über die Nummerntasten programmiert. Das alles mit einer Casestruktur. Das sieht dann so aus:
    Code:
    $regfile = "m128def.dat" ' Bei Mega 128 "
    $framesize = 64
    $swstack = 64
    $hwstack = 64
    $crystal = 16000000                                         
    $baud = 19200                                               
    $baud1 = 9600                                              
    '----------------------Motortreiber Konfiguration--------------------------------
    Config Ping.1 = Output
    Led_rot Alias Portg.1
    
    Config Ping.0 = Output
    Led_gruen Alias Portg.0
    
    Config Pinb.4 = Output
    Motorboard_richtung1 Alias Portb.4
    
    Config Pinb.5 = Output
    Motorboard_richtung2 Alias Portb.5
    
    Config Pina.1 = Output
    Motorboard_reset Alias Porta.1
    
    Config Pine.3 = Output
    Motorboard_pwm1 Alias Porte.3
    
    Config Pine.4 = Output
    Motorboard_pwm2 Alias Porte.4
    
    '----------------------Funksender & Empfänger Konfiguration--------------------------------
    Config Ping.0 = Output                                    
    Lcdpower Alias Portg.0
    
    Config Portc = Output
    
    Config Pine.2 = Output
    Rdy_hostempfangsbereit Alias Porte.2                    'Auf Low setzen wenn Empfangsbereit für Daten vom Funkmodul
    Config Pine.5 = Input
    Bsy_funkmodulsendebereit Alias Porte.5                  'Ist Low wenn Funkmodul frei zum senden
    
    Open "com2:" For Binary As #2                             'Ausgabe über zweite serielle Schnittstelle (MAX)
    Sound Portg.2 , 400 , 450                                    'BEEP bei RN-Mega128Funk
    Sound Portg.2 , 400 , 250                                    'BEEP bei RN-Mega128Funk
    Sound Portg.2 , 400 , 450                                    'BEEP bei RN-Mega128Funk
    Config Serialin = Buffered , Size = 2                       'Empfangsbuffer für Funkmodul anlegen
    Config Serialout1 = Buffered , Size = 100                'Ausgabebuffer für normalse RS232
    Enable Interrupts
     
    Config Timer3 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    
    '--- Eigentliches Programm ---
    
    Dim P As Word
    Dim Empfang As Byte
       Motorboard_reset = 1
       Rdy_hostempfangsbereit = 0
     
    Do
    Empfang = Inkey()
    
    Select Case Empfang
    
       Case 56
          Motorboard_reset = 1
          Motorboard_richtung1 = 0
          Motorboard_richtung2 = 1
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 8"
          Pwm3b = 750
          Pwm3a = 750
    
       Case 53
          Motorboard_reset = 1
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 5"
          Pwm3b = 0
          Pwm3a = 0
    
       Case 50
          Motorboard_reset = 1
          Motorboard_richtung1 = 1
          Motorboard_richtung2 = 0
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 2"
          Pwm3b = 750
          Pwm3a = 750
    
       Case 52
          Motorboard_reset = 1
          Motorboard_richtung1 = 0
          Motorboard_richtung2 = 0
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 6"
          Pwm3b = 750
          Pwm3a = 750
    
       Case 54
          Motorboard_reset = 1
          Motorboard_richtung1 = 1
          Motorboard_richtung2 = 1
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 4"
          Pwm3b = 750
          Pwm3a = 750
    
        Case 55
          Motorboard_reset = 1
          Motorboard_richtung1 = 1
          Motorboard_richtung2 = 0
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 4"
          Pwm3b = 0
          Pwm3a = 750
    
         Case 57
          Motorboard_reset = 1
          Motorboard_richtung1 = 1
          Motorboard_richtung2 = 0
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 4"
          Pwm3b = 750
          Pwm3a = 0
    
    End Select
    
    Waitms 150
    
    Loop
    End
    Wenn ich nun die Steuerung durchführe muss ich die Tasten immer zweimal drücken damit beide Motoren abschalten oder laufen. Wenn ich nur einmal z.B. die 8 drücke, zum vorwerts fahren, fängt erst ein Motor an zu laufen, drücke ich nochmal die 8, dann dreht auch der Zweite. Ich habe nun schon einen Tag damit verbracht herrauszufinden warum, aber ich komm nicht drauf. Es ist auch total unlogisch da die Anweisung in einem Case steht. Ich kann mir nur vorstellen, dass das ein Timming Problem ist. Kennt wer diesen Effekt und kann mit weiterhelfen.

    MfG Jolly

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    das hört sich aber eigenartig an.
    Wie weit kommt denn die Programmausführung voran innerhalb eines Case, also wird z.B. das Print "Eingabe..." ausgegeben?
    Wieso hast du oben im Programm Interrupts aktiviert?
    An deiner Stelle würde ich das Select Case... vorläufig umbauen in if, else if, ... um zu sehen ob der Fehler mitwandert.
    Fehler in der Elektronik kannst du ausschließen, oder? Konntest du die Motoren zuvor bereits einwandfrei ansteuern?

    Grüße,
    Bernhard

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2006
    Beiträge
    5
    So ich habe jetzt noch mal Printbéhele zu jeden Programmpunkt eines Casefalls zugeführt. Diese werden sobald ich einmal die z.B. 8 eingebe komplett ausgeführt.
    Also der Boardaufbau ist zu 100%er Sicherheit korrekt und zum Punkt Interrups, diese habe ich aus dem Beispelprogramm übernommen. Wenn ich den Befehl entnehme funktioniert das Ganze nicht mehr. Hmmm ich komm nicht weiter. Ist sehr sehr merkwürdig.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Ich würde testhalber mal eine kleine Pause (z.b. 4 NOP) zwischen die pwmx Anweisungen setzen. Wie reagiert es, wenn Du beide Werte zweimal zuweist? (Nur als Test). Oder halt direkt an Mark Albers wenden. Er ist meist recht fix mit Antworten.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2006
    Beiträge
    5
    Soooo endlich daheim von der laaaaangen Arbeit heute. Hab mich gleich mal dran gesetzt und ein paar Sachen ausprobiert.
    Wenn ich eine Pause zwischen den Befehlen einfüge, bleib der Effekt das Gleiche. Ich muss jeden Befehl zweimal eintippen. Ach noch was zu dem Fehler, wenn ich zum Beispiel Vorwärts anklicke fährt eine Seite wie geplant mit volldampf und die andere nur mit halber Kraft. Drücke ich dann Stop bleibt die mit halber Kraft stehen und die andere Seite regelt von voller auf halbe Kraft herunter. Nochmal getippt und es bleibt alles stehen. ?!?! Wie auch immmer

    Ich habe jetzt aber den Befehl mal so umgeschrieben:

    Code:
       Case 56
          Motorboard_reset = 1
          Motorboard_richtung1 = 0
          Motorboard_richtung2 = 1
          Bsy_funkmodulsendebereit = 0
          Print "Eingabe 8"
          Pwm3b = 750
          Pwm3a = 750
          Pwm3b = 750
          Pwm3a = 750
          Print "Eingabe 8 nochmal"
    und siehe da es klappt! Aber warum. Schön ist das nicht! Vieleicht doch nenn Hardwareseitiges Problem ? Hat noch wer eine Idee?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Da würde ich mal mit Mark Albert Kontakt aufnehmen. Ein Versuch würde mich noch interessieren: Was passiert, wenn Du die Werte nicht direkt sondern per Variable zuweist?

    Wert=750
    pwm3a=wert
    pwm3b=wert

    Edit:
    Welche Version von Bascom nutzt Du?
    Die Werte werden in 2 Schritten als 2 Byte (Hi und Lo) ins Register geschrieben. Wenn dann nur ein Wert übernommen wird, erklärt das die halbe Kraft. Könnte also ein Compiler Fehler sein. In den Optionen mal die Optimierung abgeschaltet? Was passiert, wenn Du nur 8Bit Werte nutzt?
    Geändert von peterfido (15.11.2011 um 17:19 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2006
    Beiträge
    5
    Hallo peterfido,

    also ich habe gestern noch genau diesen Fall ausprobiert:

    Ich habe eine Variable gebildet Speed als Integer und habe dieser den Wert 1000 zugewiesen. Diese habe ich dann an die Pwm3a und Pwm3b übergeben. Jedoch ohne Erfolg der Fehler bestand weiterhin.

    Der die Funktion Optimize im Compiler ist abgeschaltet aber auch da egal ob an oder aus, der Fehler bleibt bestehen.

    Ich nutze die Bascomverision 1.11.9.5

    Und auch mit 8Bit Werten, der Effekt bleibt der Gleiche. Leider

    Verzwigt und Verzwackt, dennoch danke ich dir für die Anregungen.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Da rate ich erstmal zur Aktualisierung von Bascom. Seit Deiner Version ist vieles passiert.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. komisches Verhalten ATmega8 und RS232
    Von MDKMurdoc im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 31.05.2015, 10:37
  2. "fernbedienung" über RS232 "so lange wie tast
    Von jcrypter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 20.08.2010, 08:48
  3. Fernbedienung über Funk oder IR?
    Von Schwabe1987 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 21.12.2006, 13:23
  4. Über RC Fernbedienung Led schalten
    Von Luppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 04.05.2006, 13:30
  5. Fernbedienung über Druckerport
    Von RCO im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 13.06.2004, 20:51

Berechtigungen

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