- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: String seriell entgegen nehmen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2008
    Beiträge
    10

    String seriell entgegen nehmen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich will über die serielle Schnittstelle alle Ports (B, C und D) steuern. Wie hier unter Interrupts steht nehme ich mit diesem code einen string entgegen:

    On URXC OnRxD
    Enable URXC
    Enable Interrupts

    ...

    OnRxD:
    i = UDR
    Return
    Ich dachte mir ich sende um beispielsweise PC3 einzuschalten c31 (also Port C, Nummer 3, Zustand ein), fürs ausschalten c30 (bessere Vorschläge?).

    Nun wird ja der Onrxd-Teil bei jedem Zeichen das reinkommt ausgeführt. Ich sende und empfange also prinzipiell drei Zeichen. Wie liest man eine Nachricht nun am schnellsten/elegantesten ein?

    Muss ich hierfür ein viertes "Stopzeichen" mitschicken (-> c31 und ein Array füllen solange bis das Stopzeichen kommt, oder geht das irgendwie einfacher?

    Und wie gehe ich mit c31, c30 (oder was auch immer) um? In Delphi würde das hier gehen:

    Port + erstesElement + . + zweitesElement + " " = + " " + drittesElement

    was dann soviel heisst wie

    PortC.3 = 1
    So oder so ähnlich. Das Prinzip sollte ersichtlich sein. In Bascom muss ich hierfür doch keine riesige verschachtelte Case/If-Anweisung machen, oder?
    Error 505 - Signature not found

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Hallo Predat0r!

    Nun wird ja der Onrxd-Teil bei jedem Zeichen das reinkommt ausgeführt. Ich sende und empfange also prinzipiell drei Zeichen. Wie liest man eine Nachricht nun am schnellsten/elegantesten ein?

    Muss ich hierfür ein viertes "Stopzeichen" mitschicken (-> c31 und ein Array füllen solange bis das Stopzeichen kommt, oder geht das irgendwie einfacher?
    Z.B so: Du hast eine Variable, die immer den Index des zuschreibenden Zeichens im String hält. Bei jedem Interrupt schreibst Du das empfangene Zeichen an diese Position und erhöhst die Indexvariable. Sollt das Zeichen ein Enter sein, ist der String vollständig und Du kannst ihn auswerten.

    ...In Bascom muss ich hierfür doch keine riesige verschachtelte Case/If-Anweisung machen, oder?
    Doch, leider musst Du genau das machen. Ein Alternative wär vllt, ein Array anzulegen, wo die Zustände alles Ports gespeichert sind. Dann könnte man das Array indirekt über das erste Zeichen im Sting adressieren und am Ende alle Ports mit dem Inhalt des Arrays aktualisieren.

    MfG Mark

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2008
    Beiträge
    10
    So mit der Indexvariable habe ich es im Moment, kam mir so umständlich vor .


    Und wenn ich eine funktion vom PC aus aufrufen möchte, geht das also auch nur so?

    OnRxD:
    i = UDR
    if i = "meineSub" then
    call meineSub
    end if
    Return
    NICHT gehen würde

    OnRxD:
    i = UDR
    call i
    Return
    Das würde doch einiges vereinfachen. Aber dafür braucht man wohl eine objektorienterte Programmiersprache...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    49
    Beiträge
    377

    Re: String seriell entgegen nehmen

    Zitat Zitat von Predat0r
    Nun wird ja der Onrxd-Teil bei jedem Zeichen das reinkommt ausgeführt. Ich sende und empfange also prinzipiell drei Zeichen. Wie liest man eine Nachricht nun am schnellsten/elegantesten ein?
    Hallo Predat0r!

    Vielleicht ist CONFIG SERIALIN etwas für dich:
    http://halvar.at/elektronik/kleiner_...om_computer_2/

    mfg
    Gerold
    :-)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2008
    Beiträge
    10
    Hi Gerold,

    erstmal danke für die ganzen Beiträge von dir. Vor allem die Screenshots von den Fuse-Bits, einmalig für Anfänger! Hat mich bereits gerettet.

    SerialIn sieht schonmal gut aus. Habe mal deinen Quellcode kopiert, kannst du was mit dieser Fehlermeldung anfangen?

    Bild hier  

    Nur den Quarz habe ich auf 16,0 geändert. Der Fehler verschwindet erst mit auskommentieren von Bytematch.

    Habe das auch mal in mein Projekt eingebettet, dort kommt der gleiche Fehler. Sollte also definitiv am Config SerialIn Parameter Bytematch liegen, nicht an den anderen "Statisten" wie den Compiler-Einstellungen ($...) oder ähnliches.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    49
    Beiträge
    377
    Zitat Zitat von Predat0r
    Habe das auch mal in mein Projekt eingebettet, dort kommt der gleiche Fehler. Sollte also definitiv am Config SerialIn Parameter Bytematch liegen
    Hallo Predat0r!

    Zwei Möglichkeiten fallen mir im Moment ein, warum es nicht funktionieren könnte:

    1.) Du verwendest eine ältere oder neuere Bascom Version, die mit diesem Befehl Probleme hat. Ich arbeite mit Version 1.11.9.1.

    2.) Es hat sich irgend ein unsichtbares Zeichen beim Kopieren des Codes eingeschlichen, welches jetzt Probleme bereitet. Es wäre toll, wenn du Bascom beenden, den Computer neu starten und das Programm manuell (nicht kopieren) neu eingeben könntest.

    Mehr fällt mir im Moment nicht dazu ein. :-(

    mfg
    Gerold
    :-)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2008
    Beiträge
    10
    Ich hab die freie 4kb beschränkte 1.11.7.9.

    Config SerialIn nimmt überhaupt keinen dritten Parameter. Laut Onlinehilfe hat es auch nur zwei Parameter. Hatte bisher nur in die Hilfe auf der MCS Homepage nachgeschaut.

    Bild hier  

    Ich nehme an, deine Bascom-Version hat in der OH den Parameter Bytematch mit aufgeführt?

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    49
    Beiträge
    377
    Zitat Zitat von Predat0r
    Ich hab die freie 4kb beschränkte 1.11.7.9.
    Hallo Predat0r!

    Dann ist die Lösung ja einfach. Installiere dir die neueste Demo-Version. :-)

    mfg
    Gerold
    :-)

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad