- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Wieso funktioniert es über das Terminalprogramm

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180

    Wieso funktioniert es über das Terminalprogramm

    Hallo,

    ich "kämpfe" schon lange Zeit mit der Übertragung über RS485.
    Mittlerweile ist es mir gelungen, mehrere Module an einen Bus zu hängen und die Steuerung der einzelenen Module über ein Terminalfenster am PC zu ermöglichen.
    Bei der Eingabe eines Steuerungsbefehls am T-Fenster schaltet das jeweilige Modul und gibt eine Rückmeldung über den Bus den ich sowohl am T-Fenster als auch auf einem LCD Display sehe.
    Jetzt möchte ich gerne über einen Taster an einem Modul, ein anderes Steuern.
    Der Taster sendet exakt das über den Bus, was ich vorher am T-Fenster eingegeben habe.
    Ich sehe den Text im T-Fenster.
    Leider schalten die Module nicht.
    Ich lasse mir jetzt im T-Fenster anzeigen was im Modul (nach der Interrupt auslösung) ankommt. Das Ergebnis sind wieder lauter wirre Zeichen.

    Woran kann das liegen?

    Tobias

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180
    Hallo,

    hier habe ich noch einmal meine Sende und Empfangsfunktionen zusammen gestellt:

    Sender
    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 4800
    
    Config Pinc.0 = Input
    Config Pinb.2 = Input
    
    
    Dim I As Byte
    Dim Key As Byte
    Const Keys = 2
    
    Do
    
    
     For I = 1 To Keys
     Key = I
     Select Case Key
     Case 1 : Debounce Pinc.0 , 0 , Key_o1 , Sub
     Case 2 : Debounce Pinb.2 , 0 , Key_o2 , Sub
    
     End Select
    
    Next
    
    Loop
    
    
    ' Tasterfunktionen
    
    Key_o1:
    
    Gosub Abfrage
    
    Return
    
    
    ' Abfrage der angeschlossenen Module
    
    Abfrage:
    
       Portd.2 = 1
       Waitms 5
       Print "test"
       Portd.2 = 0
    
       Return
    
    
    Key_o2:
    
    Return


    Empfänger:

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 4800
    
    
    Dim S As String * 10
    Dim A As String * 10
    Dim Z As String * 10
    
    Dim V As Word
    
    
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
    
    
    Do
    
    
    
    Loop
    
    
    ' **** RS485 Aktivieren und Bus prüfen
    
    
    Onrxd:
    
     V = V + 1
    
     S = S + Chr(udr)
    
     If Len(s) > 3 Then
        A = S
          Goto Pruefung
    
    
     Else
     End If
    
    
     Return
    
    '****************************************************
    
    
    Pruefung:
    
     Z = Mid(a , 1 , 2 )
    
     Gosub Zustand
    
    
       A = ""
       S = ""
    
    
    Return
    
    '****************************************************
    
    Zustand:
    
    
    
       Disable Urxc
       Disable Interrupts
    
    
       Config Portd.2 = Output
    
       Waitms 5
       Portd.2 = 1
    
       Print "Angekommen" ; S
    
       Print "Zustand"
    
       Waitms 5
       Portd.2 = 0
    
       Config Portd.2 = Input
    
       Enable Urxc
       Enable Interrupts
    
    
       A = ""
    
    
      Return
    Wie gesagt, wenn ich am angeschlossenen Terminalprogramm unter Win XP das Wort "test" eingebe, meldet sich der empfänger und bestätigt mir mit der Rückmeldung "Angekommen test".
    Sende ich dies über den Sender so erhalte ich nur wirre Zeichen.

    Tobias

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Zunächst mal, Du hast vermutlich n Fehler in der Senderoutine:


    Portd.2 = 1
    Waitms 5
    Print "test"
    Portd.2 = 0

    Also Du schaltest den 485 Busbaustein auf Senden, mit

    Portd.2 = 1

    Dann warteste 5ms um sicherzustellen, dass der Bus auch wirklich auf senden ist, soweit richtig.

    Dann verwendeste den Print Befehl zum Senden, das kann man auch so machen, der Haken ist, dass das Programm dann schon auf
    Portd.2 = 0 geht, obwohl das Senden selbst noch nicht abgeschlossen
    ist. Du hast übersehen, das der Mega8 nen Sendepuffer hat, der mit dem
    Print beschrieben wird und dann die Zeichen in die UART schiebt,
    während das Programm schon weiter läuft.
    Du musst also sicherstellen, dass der Bus erst umgeschaltet wird, wenn
    auch wirklich die Daten raus sind und nicht noch was im Puffer hängt.
    Am Einfachsten machste das mit dem TXC - Flag.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180
    oh - das wusste ich nicht.
    ich ging in der Tat davon aus, dass der Printbefehl zunächst vollständig ausgeführt wird und erst dann der Port wieder auf 0 gesetzt wird.

    Kannst du mir sagen wie ich ein TXC-Flag einbauen muss?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Portd.2 = 1
    Waitms 5
    Print "test"
    do
    loop until ucsra.txc=1
    reset ucsra.txc
    waitms 5
    Portd.2 = 0
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180
    Danke Vitis,
    das werde ich mir auf jeden Fall auch noch einbauen.

    Leider hat es daran nicht gelegen.

    Ist es möglich dass die Lage des Busses auf der Platine ein Rolle spielt?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    bei 4800 Baud normalerweise noch nicht, solange kein Kurzer drinne ist.
    beim LTC485 hab ich pullups und pulldowns auf den busleitungen
    und n Abschlusswiderstand sollte auch drauf sein.
    Hatte da mal Probleme mit floatenden Pegeln auf'm bus ohne
    das.
    Dann natürlich der Kardinalsfehler: AB-Tausch?
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180
    beim AB Tausch geht aber doch gar nichts mehr

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Nichts mehr? Oh doch, es sind dann nachwievor Zustandsänderungen
    von H nach L, nur eben invertiert und ich hab bei eigenen
    Projekten festgestellt, das der Controller dann irgendwo mal
    n Startbit findet, das zwar keins ist aber halt ähnlich und schon
    läuft die UART los. Da kommt dann wirklich nur noch Mist raus
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    52
    Beiträge
    180
    o.k. ich habe das Problem identifiziert!

    Meine Schaltung mit der ich den Bus am PC abhöre (RS232-RS485) ist die Ursache.
    Ich habe ihn weggenommen und schon klappts!

    Jetzt habe ich aber noch ein zweites Problem gefunden.
    Wenn ich meine ISP Leitung, die am LPT Anschluss des PC's angeschlossen ist wegnehme, versteht der Controller auch nichts mehr.
    Woran liegt das?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test