- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 33

Thema: Optimieren von UART-Komunikation, bitte um Meinungen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    @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. #2
    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. #3
    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. #4
    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. #5
    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. #6
    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. #7
    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.

Ä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
  •  

LiFePO4 Speicher Test