-         

Ergebnis 1 bis 8 von 8

Thema: RS485 ohne Config Print aber mit Config SerialOut

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340

    RS485 ohne Config Print aber mit Config SerialOut

    Anzeige

    Hi zusammen,

    folgendes Problem, wie Ihr aus dem Titel schon entnehmen könnt, versuche ich Daten über eine RS485 zu Senden ohne die Automatische Sende und Empfangsumschaltung aber dafür mit Ausgangspuffer zu realisieren.

    Ich habe es auf folgendem Weg versucht:

    Code:
    Do
      ' Prüfen ob der Ausgangspuffer leer ist
       If _rs_bufcountw1 = 0 Then
          Waitus 500
          Rs485dir1 = 0                                         ' Auf Empfangsmodus schalten
       End If
    
       ' Alle Daten empfangen
       If _rs_bufcountr1 >= 17 Then
    
                                 Rs485dir1 = 1                  ' Auf Sendemodus schalten
    
                                 Waitus 500
    
                                 ' Sende 17 Bytes aus dem Bytearray ab Position 1
                                 Printbin #1 , S_bus_sendearray(1) , 17 ;
        End If
    Loop
    Nur ist es so, das ich nicht immer alle Daten sauber zurück bekomme. Jetzt meine Frage:
    Kann es sein das meine Wartezeiten vor bzw. nach dem Umschalten der Senderichtung zu kurz sind? Wie lang müssen die Wartezeiten denn Sein?
    Gibt es denn nicht ein Interrupt, welches ausgelöst wird, wenn der Sendepuffer leer ist?
    Oder gibt es einen anderen Weg das Problem zu lösen bzw. abzufragen ob alle Daten gesendet wurden?
    Wie würdet / habt Ihr das Problem gelöst?

    Vielen Dank schon mal.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Also ich habe inzwischen noch was gefunden,
    es gibt das "Transmitt Complete Interrupt", an das muss ich ran kommen.

    Ich muss es für die 2. Hardwareuart aktivieren.
    Zum aktivieren des Interrupts habe ich folgendes aus dem Datenblatt ausgelesen:

    Set Ucsr1b.txcie1

    Aber wie weise ich das Label zu, welches angesprungen wird? Ich habe es so versucht, aber eine Fehlermeldung erhalten.

    On Ucsr1a.txc1 Isr_von _outbuf1

    Könnt ihr mir helfen?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo demmy,
    der Interrupt heißt in Bascom UTXC.
    Schau mal unter Enable in der Bascom Hilfe, da stehen die Interruptnamen und ihre Bedeutung.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Ahh ok Vielen Dank.

    Mein Code sieht jetzt so aus:

    Code:
    Set Ucsr1b.txcie1
    On UTXC1 Txd_Ready
    Do
    
       ' Alle Daten empfangen
       If _rs_bufcountr1 >= 17 Then
    
                                 Rs485dir1 = 1                  ' Auf Sendemodus schalten
    
                                 Waitus 500
    
                                 ' Sende 17 Bytes aus dem Bytearray ab Position 1
                                 Printbin #1 , S_bus_sendearray(1) , 17 ;
        End If
    Loop
    
    Txd_Ready:
      ' Prüfen ob der Ausgangspuffer leer ist
      If _rs_bufcountw1 = 0 Then
          Waitus 500
          Rs485dir1 = 0                                         ' Auf Empfangsmodus schalten
       End If
    Return
    Ich bin mal gespannt, ob das nun so funktioniert?
    Eigentlich müsste ich doch die Zeile " If _rs_bufcountw1 = 0 Then" auch weglassen können oder? Da das Event nur gefeuert wird, wenn der komplette Sendepuffer leer ist?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Ok, es will einfach nicht funktionieren, egal was ich mache.

    RS485 , CONFIG SERIALOUT, das Serial TX complete interrupt vertragen sich wohl nicht zusammen in Bascom kann das sein?

    Ich weiß aktuell nicht weiter. Alles was ich erreichen wollte, war im Hintergrund über eine RS485 Daten zu versenden und zu empfangen.

    Hat niemand mehr eine Idee????

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hast du denn auch die Interrupts global freigegeben (Enable Interrupts)?
    Ansonsten zeige doch mal dein komplettes Programm, sonst müssen wir raten, was dort stehen könnte.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Hi,

    also die globalen Interrupts sind freigegeben. Hmm also es ist so, dass das restliche Programm funktioniert und nur der Teil mit dem Senden der Daten nicht funktioniert. Ich denke das gesammte Programm würde hier den Rahmen sprengen.
    Aber im wesentlichen habe ich den betroffenen Teil weiter oben schon gepostet. Das UTXC1 Interrupt ist das einzige Interrupt, welches ich aktuell verwende. Sonst nur noch 2 Timer die aber einwandfrei funktionieren im Einsatz.

    Im Grunde soll nichts anderes passieren, als in der Hauptschleife zu schauen ob 17 Byte im Eingangspuffer sind. Sind die Bytes da, sollen über den Ausgangspuffer 17 Byte zurück gesendet werden. Da man ja laut Bascom Hilfe zusammen mit dem Ausgangspuffer nicht die automatische Senderichtungsumschaltung verwenden darf, dachte ich ich kann das über das UTXC-Interrupt lösen.
    Könnte es aber sein, das der Ausgangspuffer auch dieses UTXC-Interrupt werwendet und es deshalb nicht geht?

    Mit dem oben gepostetetn Code funktioniert es gelegentlich einmal Daten zu Empfangen und zu senden, danach geht nichts mehr!

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Hat niemand mehr eine Idee?

Ähnliche Themen

  1. Compiler Bug mit CONFIG BASE ?
    Von Searcher im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 30.11.2012, 08:47
  2. Probleme mit Config Print
    Von demmy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 20.07.2012, 15:41
  3. Config SerialOut & Interrupts?
    Von mikron im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 20.07.2011, 19:14
  4. problem mit config serialin=buffered...
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 09.01.2006, 22:57
  5. Config Graphlcd ohne FS und Reset
    Von Marco78 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 10.12.2005, 21:14

Berechtigungen

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