- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 84

Thema: Gerät über RS232 ansprechen

  1. #51
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Praxistest und DIY Projekte
    Hartnäckige Sache.
    Kannst du bitte deine Source komplett, so wie sie ist, reinstellen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #52
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Code:
    $regfile = "m16def.dat"
    
    $crystal = 19999998                                         'Quarz: 3.6864 MHz
    $baud = 19200
    
    Dim I As Byte
    Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Porta.7 , Rs = Porta.2       ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
    Dim A As Byte
    Config Lcd = 20 * 4                                         'Baudrate der UART: 9600 Baud
    
    Config Pind.1 = Input
    Config Pind.0 = Output
    Config Pinb.3 = Output
    
    
    
    Config Pind.5 = Output
    Config Pind.2 = Input
    
    
    Dim Crc_l As Byte
    Dim Crc_h As Byte
    Dim New As Byte
    Dim Tmp As Byte
    Dim Bcclo As Byte
    Dim Bcchi As Byte
    Dim X As Byte
    Dim Crce As Word
    Dim Crcs As Word
    
    Dim Packets(10) As Byte
    Dim Packete(8) As Byte
    Declare Sub Sendewr
    Declare Sub Empfangewr
    Declare Sub Clc
    Declare Sub Lcdout
    Declare Sub Status
    
    Declare Sub Auswahltyp
    Dim Wrtyp As String * 10
    
    Declare Sub Auswahlanzahl
    Dim Anzahl As Integer
    
    
    Dim Line1 As String * 20
    Dim Line2 As String * 20
    Dim Line3 As String * 20
    Dim Line4 As String * 20
    
    'PowerLED
    Portd.5 = 1
    Portb.3 = 1
    
    'Init Packets
    Packets(1) = 002
    Packets(2) = 050
    Packets(3) = 000
    Packets(4) = 032
    Packets(5) = 032
    Packets(6) = 032
    Packets(7) = 032
    Packets(8) = 032
    Packets(9) = 037
    Packets(10) = 135
    
    'Config Serialin = Buffered , Size = 8
    
    
    
    
    
    
    Do
       'Gosub Auswahltyp
       'Taster 1
       'If Pind.2 = 1 Then
        '  Line2 = "       reset"
    
        '  Print "reset"
        ' Gosub Lcdout
       'End If
    
       'Taster 2
      If Pind.4 = 1 Then
      Gosub Sendewr
      Gosub Empfangewr
          'Gosub Status
    
       End If
    Loop
    
    
    
     '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    'SUBs
    
    Sub Sendewr
    
       Line2 = "   sende Anfrage"
    
    
       Printbin Packets(1) ; 10
    
       Gosub Lcdout
       'Gosub Clc
    Return
    End Sub Sendewr
    
     ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    Sub Empfangewr
       Line2 = "  warte auf Daten"
       'Gosub Lcdout
       Inputbin Packete(1) , 8
       Printbin Packete(1) ; 8
       Crce = Crc16(packete(1) , 6)
       Crc_l = Low(crce)
       Crc_h = High(crce)
    
    
       Cls
       Locate 1 , 1
       Lcd "Empfangenes Paket:"
      Locate 2 , 1
      Lcd "1:" ; Str(packete(1))
      Locate 2 , 5
      Lcd "2:" ; Str(packete(2))
      Locate 2 , 9
      Lcd "3:" ; Str(packete(3))
      Locate 2 , 13
      Lcd "4:" ; Str(packete(4))
      Locate 2 , 17
      Lcd "5:" ; Str(packete(5))
      Locate 3 , 1
      Lcd "6:" ; Str(packete(6))
      Locate 3 , 5
      Lcd "7:" ; Str(packete(7))
      Locate 3 , 9
      Lcd "8:" ; Str(packete(8))
      Locate 4 , 1
      Lcd "CRC_l:" ; Crc_l
      Locate 4 , 12
      Lcd "CRC_H:" ; Crc_h
    
      'Gosub Status
    Return
    End Sub Empfangewr
    
     '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
     'Checksumme berechnen
    Sub Clc
       Bcclo = &HFF
       Bcchi = &HFF
    
    
       Return
    End Sub Clc
    
     '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
     'LCD Ausgabe
    Sub Lcdout
       Cls
       Locate 1 , 1                                             '1. Zeile
       Lcd Line1
       Locate 2 , 1                                             '2. Zeile
       Lcd Line2
       Locate 3 , 1                                             '3. Zeile
       Lcd Line3
       Locate 4 , 1                                             '4. Zeile
       Lcd Line4
       Return
    End Sub Lcdout
    
     '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
     'Status Auswertung
    Sub Status
        If X = 6 Then
             Line3 = "ok"
             Print "kein fehler"
           Else
             Line3 = "Fehler"
             Print "fehler"
          End If
    Gosub Lcdout
    Return
    End Sub Status
    
     '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    End

  3. #53
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    also anscheinend empfängt er alle bytes, aber er ordnet sie falsch.
    byte 6,7,8 stellt er immer vorran.

    wenn ich ein zweites paket sende überschreibt er byte 7, 8 garnicht

    beim dritten paket überschreibt er alle bis auf byte 8

    VERZWEIFLUNG!!!

  4. #54
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich schau' mir dein Programm grad an, bleib locker.

    Wenn du grad in der Panik-Phase bist, die immer irgendwann eintritt, dreh' ein paar Runden ums Haus oder füttere die Katze, kraulen ist noch besser. In dem Zustand sieht man den Wald vor Bäumen nicht mehr.
    (glaub' mir, ich mach das schon länger)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #55
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Guter tipp danke, das problem ist nur dass es sich hierbei um ein projekt für die arbeit ist und ich am 15.nov abgabetermin habe.

  6. #56
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Aaaallsooo:
    Im Programm ist KEIN direkter Fehler, es geht ums Timing

    Vom Sendwr bis zum Inputbin brauchst du offenbar mal zu lange, da geht was verloren.
    du MUSST config serialin = buffered angeben, der Sender schickt nach Empfang sicher sofort los, anders kriegst du die Hälfte nicht mit.
    soweit, sogut.
    aaaaber:
    Der Sender schickt (ziemlich sicher) nicht nur ein Paket, sondern mehrere.
    Es könnte sein, daß er deinen "Bestätigungs-printbin" gleich nach dem Empfangen als Aufforderung versteht, oder es hat andere Gründe.
    Deswegen klappt's ja auch einmal, aber dann nichtmehr.
    Da du ja das Empfangspaket eh' auf dem LCD zeigst, kannst du diesen "Retour-print" ja mal weglassen, vielleicht reicht das schon.
    Sonst muß man sich den Sender näher anschauen.

    Nochmal: DU MUSST den serialin-Buffer nehmen (size = 8 muss reichen, wenn der Sender auch wirklich nur ein Paket schickt)
    Wenn sich der Sender nicht disziplinieren läßt, müssen wir deinen input auf asynchron umstellen. Wenn der einfach drauflosplappert, wird sowas immer wieder passieren.
    Hast du Info, WANNN WER WEM was zu schicken hat ?

    Und such keinen Fehler, da is keiner (s.o)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #57
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Aufgabenstellung:

    also ich hab in diesem fall 12 geräte mit 12 adressen (2-13)
    mein mc soll anfangs sequeziell den status der geräte abfragen und den status am lcd und über usart ausgeben.
    immer wenn ich eine anfrage an eine gerät sende bekomme ich gleich darauf antwort.



    Vom Sendwr bis zum Inputbin brauchst du offenbar mal zu lange, da geht was verloren.
    du MUSST config serialin = buffered angeben, der Sender schickt nach Empfang sicher sofort los, anders kriegst du die Hälfte nicht mit.
    soweit, sogut.
    das hab ich schon versucht, nur dann empfängt er anscheinend garnichtsmehr.
    ich glaub nicht, dass was verloren geht, da ich das packet bei der anfrage ja komplett empfange, halt nur in einer falschen reihenfolge.
    bei weiteren anfragen, bleibt immer das 8byte gleich wie beim ersten und ändert sich nicht.

    Der Sender schickt (ziemlich sicher) nicht nur ein Paket, sondern mehrere.
    nein, er schickt sicher nur ein antwort-paket mit 8bytes + 2bytes crc

    Es könnte sein, daß er deinen "Bestätigungs-printbin" gleich nach dem Empfangen als Aufforderung versteht, oder es hat andere Gründe.
    welchen bestätigungs-printbin?
    ich sende gerät empfängt und gibt darauf antwort

    Da du ja das Empfangspaket eh' auf dem LCD zeigst, kannst du diesen "Retour-print" ja mal weglassen, vielleicht reicht das schon.
    das hab ich nur gemacht, dass ich die packete am pc mitbeobachten kann

  8. #58
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Der Inputbin ist einfach und übersichtlich: Er schreibt ab der angegebenen Addresse ( Packete ( 1 ) ) die nächsten 8 Byte, die er erwischt, strikt aufsteigend rein. Da gibt's keine Querschläger.
    Das hab ich überprüft, das steht so in der Hex-file.
    Wenn also der Sender tatsächlich nur ein paket mit 8 Byte schickt, dann stehen die auch genau so drin, wie sie weggeschickt wurden.
    ( Ich ignoriere mal die Möglichkeit, daß der Sender was verdreht )

    Solange du dich drauf fixierst, daß so ein Buffer schon mal durcheinander kommen kann, hast du schlechte Karten
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #59
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    bis jetzt, hab ich das ganze ja nur mit einem prog das ich geschrieben hab getestet, vielleicht bringt auch das etwas durcheinander. werd mich mal auf den weg machen und es mal schnell in reality testen.

  10. #60
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    bis jetzt, hab ich das ganze ja nur mit einem prog das ich geschrieben hab getestet, vielleicht bringt auch das etwas durcheinander. werd mich mal auf den weg machen und es mal schnell in reality testen.

Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test