- 12V Akku mit 280 Ah bauen         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 33

Thema: Optimieren von UART-Komunikation, bitte um Meinungen

  1. #21
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Anzeige

    Praxistest und DIY Projekte
    @MagicWSmoke
    Hab mir gerade deinen code genauer angeschaut ... das "rcvd_char = UDR" muss ich glaub ersetzen durch "rcvd_char = inkey()"
    und
    "Incr db_index" ... soweit ich mich erinner gibts kein "Incr (Var)" in Bascom. Da fall ich selber immerwieder drauf rein.

    OK muss mich selber berichtigen... Incr (Var) ... gibt es doch... es war i++ was nicht geht.
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von JoeM1978 Beitrag anzeigen
    Hab mir gerade deinen code genauer angeschaut ... das "rcvd_char = UDR" muss ich glaub ersetzen durch "rcvd_char = inkey()"
    Wie kommst Du darauf?

  3. #23
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    OK. habs in der Bascom-hilfe dann letztendlich doch gefunden UDR ist das Data-Register vür UART.
    Also lese ich damit direkt aus dem Register.

    Was mich stutzig macht... mit "On Urxc Uart_get_char" im Header spuckt er mir ne fehlermeldung aus,
    wenn ich serialin configurieren will...
    liest er dann also jedes einzelne zeichen sofort über die isr aus ?
    Dann ist also hier nix mit Buffer verwenden drinn wenn ich das recht sehe.
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

  4. #24
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von JoeM1978 Beitrag anzeigen
    OK. habs in der Bascom-hilfe dann letztendlich doch gefunden UDR ist das Data-Register vür UART.
    Das würdest Du auch im Datenblatt finden.
    Was mich stutzig macht... mit "On Urxc Uart_get_char" im Header spuckt er mir ne fehlermeldung aus,
    wenn ich serialin configurieren will...
    Klar, verwendet ja auch den selben Interrupt.
    liest er dann also jedes einzelne zeichen sofort über die isr aus ?
    Dann ist also hier nix mit Buffer verwenden drinn wenn ich das recht sehe.
    Sobald ein Zeichen eintrifft, wird die ISR aufgerufen, das UDR gelesen und passend verarbeitet, gepuffert wird's in buff().
    Das ist genauso eine gepufferte Empfangsroutine, wie sie Bascom per gepufferten Serialin aufbaut, nur eben darauf spezialisiert, einen bestimmten Datenblock zu empfangen.

  5. #25
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    ok... also ist das sozusagen wie der gepufferte Empfang... nur eben "manuell".

    Dann muss ich aber nochmal was hinterfragen...
    bei 9600baud, meinst da könnte es passieren, das während dieser "manuellen Bufferroutine" ein zweites Zeichen schon ankommt ?
    Würde das in einer "warteschleife hängen oder einfach verworfen werden ?
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von JoeM1978 Beitrag anzeigen
    ok... also ist das sozusagen wie der gepufferte Empfang... nur eben "manuell".
    Ich würd' eher sagen eine andere Version des gepufferten Empfangs.
    bei 9600baud, meinst da könnte es passieren, das während dieser "manuellen Bufferroutine" ein zweites Zeichen schon ankommt ?
    Keine Chance

    9600 Baud sind 9600 Bits pro Sekunde, ein Zeichen sind mit Start- und Stopbit rund 10 Bits, also sind's rund 960 Zeichen pro Sekunde, das sind etwas mehr als 1 mS für ein Zeichen.
    In dieser Zeit hat der µC ca. 8000 Takte zur Verfügung, meine gepufferte Routine braucht so ca. 140-200 Takte pro Aufruf.

    Bei 400000 Baud würdest Du an Grenzen stoßen.
    Würde das in einer "warteschleife hängen oder einfach verworfen werden ?
    Ohne Handshake gehen Zeichen verloren, wenn der UART-Puffer voll ist und nichts mehr aufnehmen kann.

  7. #27
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    joa... und da die routine eh sofort bei jedem zeichen aufgeht sollte das kein problem sein.

    Jetzt muss ich nur aufpassen, das ich bei anderen ISR keine gravierenden Verzögerungen reinbekomm.
    Denn dann könnte es doch seltsame auswirkungen haben, je nachdem welche ISR höherer priorität hat.

    Betreffs deinem Code... die Array buff() und data_block() ...
    Gibts eine schnellere möglichkeit ein Array zu löschen als eine For_Next-Schleife ?
    Denn wenn ich unterschiedlich lange Messages Empfange wäre es schon störend, wenn der Inhalt der vorherigen noch drinn steht.
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

  8. #28
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von JoeM1978 Beitrag anzeigen
    Denn dann könnte es doch seltsame auswirkungen haben, je nachdem welche ISR höherer priorität hat.
    Sobald eine ISR aktiv ist, sind alle anderen gesperrt, d.h. eine Endlosschleife in einer anderen ISR kann alles blockieren.
    Eine Priorität gibt's nur dann, wenn mehrere Interruptanforderungen anstehen und Interrupts erlaubt sind, dann wird derjenige mit höchster Priorität zuerst ausgeführt.
    Gibts eine schnellere möglichkeit ein Array zu löschen als eine For_Next-Schleife ?
    Memcopy() mit entsprechender Option ist recht schnell. Aber das ist unnötig, stört doch nicht, wenn da was drinsteht. Du musst nur wissen, wie lange die Nutzdaten tatsächlich sind.
    Wenn Du hier die Länge in eine zusätzliche Variable kopierst, weißt Du das immer.
    Code:
    tmp = memcopy(buff(1) , data_block(1) , db_index)
      data_block_len = db_index

  9. #29
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Eine Priorität gibt's nur dann, wenn mehrere Interruptanforderungen anstehen und Interrupts erlaubt sind, dann wird derjenige mit höchster Priorität zuerst ausgeführt.
    Dann ist also innerhalb der ISR ein "Disable Interupts"... und
    ind der letzten Zeile "Enable Interupts" sowieso nutzlos, da das automatisch gesperrt ist.

    Die aktuelle Datenblock-Länge zu speichern ist eine Möglichkeit. Stimmt.

    In die Gegenrichtung... also Daten senden mach ich am einfachsten über
    Print"{irgendwas}";
    ?
    oder wäre es sinnvoll das ebenfalls über das Register zu schicken ?

    Ich hab gelesen, das das UDR das Register ist für I/O ... also sprich für beide Richtungen.
    Ist das Problematisch, wenn Während dem Senden daten empfangen werden ?
    Das gibt doch dann nur durcheinander vermute ich mal.
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Man kann auch Interrupts in einer ISR extra erlauben, "nested interrupts", aber das ist nicht ungefährlich und hat 'ne Menge Tücken.

    Print ist problemlos benutzbar, nur mit allem wie Input usw. würdest Du Probleme haben, weil sich die URXC sofort die Daten greift. Geht aber trotzdem, einfach den Interrupt verbieten.

    Nein, ist kein Problem. Schreibt z.B. ein Print auf das UDR, so hat das keinen Einfluss auf daraus gelesene Werte, das wird wie zwei unterschiedliche Register unter einem Namen behandelt.

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Daten von Software UART nach Hardware UART weiterleiten
    Von kusli im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 06.10.2008, 21:24
  2. Anfängerprojekt - Bitte um Hilfe und Meinungen
    Von Al_Andaluz im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 22
    Letzter Beitrag: 20.06.2007, 10:27
  3. frequenzverhalten von mosfets optimieren...
    Von Bibiman im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 18.03.2007, 10:37
  4. Erster UART Versuch... schaut mal bitte kurz drüber...
    Von popi im Forum C - Programmierung (GCC u.a.)
    Antworten: 19
    Letzter Beitrag: 25.07.2006, 20:16
  5. BL-521 - Bluetooth RS232 Converter (Eure Meinungen Bitte !!)
    Von PabloEscoba im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 11.05.2006, 16:56

Stichworte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad