-
        

Ergebnis 1 bis 3 von 3

Thema: [Beispiel Komponente] UART Interrupt und Datenpaket Übertragung / parsen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266

    [Beispiel Komponente] UART Interrupt und Datenpaket Übertragung / parsen

    Anzeige

    Hallo,
    nachdem in einem andere Thread danach gefragt wurde habe ich eine kleine Beispielkomponente für einen Atmega 644P (Achtung 2 Uarts) erstellt, in der ich zeige wie man über den USART interrupt basiert Daten liest und wie man ein simples Paketdatenprotokoll parst.

    Das Datenformat für das Beispiel ist:
    Code:
    STARTBEDINGUNG | LÄNGE | n * Datenbyte 
    
    n muss der LÄNGE entsprechen
    STARTBEDINGUNG und LÄNGE sind jeweils Bytes.

    Der Code ist meiner Ansicht nach gut kommentiert und wurde in der Form bereits in einem Projekt von mir verwendet, jedoch habe ich alle überflüssigen Teile entfernt.
    Über Nachfragen würde ich mich natürlich freuen.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    ... über den USART interrupt basiert Daten liest ... STARTBEDINGUNG | LÄNGE | n * Datenbyte ...
    Klar, genau so ein Protokollablauf (flexibel mit 0 .. 8 Datenbytes, max. derzeit 12 -- hab aber Deinen Code nicht durchgelesen) läuft bei mir seit längerer Zeit auf meinen m1284ern, jüngste Ergebnisse sind zum Beispiel hier und hier. Das hatte ich in meiner Variante auch an Gerhard weitergeben ;.-.)

    Dabei habe ich hier festgestellt, dass die interruptgetriebene Serielle bei der Ausgabe deulich runtergebremst wird, wenn Puffersize des Ringspeichers und Länge der vom µController gesandten Strings nicht sonderlich passen und hatte als Grund zu wenig Speicher vermutet. Mittlerweile bekomme ich mit je einem Ringspeicher für RX und TX von 128 bytes bei meinem 20MHzer 256 kBd ( UBRR = 4) mit nem UART/U SB-Umsetzer mit FTDI bei teils heftiger DatenAUSGABE bequem hin; eine höhere Baudrate gibt mein Terminalprogramm nicht her . . .

    Meine ausführliche Befehlsdokumentation/Bedienungsanleitung wird leider in den üblichen Fenstern (CODE, HTML oder PHP) nicht formatrichtig wiedergegeben - daher verzichte ich darauf diese Beispiel zu präsentieren. Die gabs aber auf der Hannoveraner Makerfaire ;.-.)
    Geändert von oberallgeier (01.10.2013 um 09:56 Uhr)
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Also mein Code würde bis zu einer Länge von 255 Datenbytes funktionieren. Allerdings verwende ich einfachheits halber nicht mal einen Ringbuffer sondern nur ein einfaches Array zum zwischenspeichern. An der Stelle könnte man z.B. ansetzen um noch mehr Leistung herauszuholen, jedoch hatte ich bisher keinerlei Probleme in dieser Hinsicht auch wenn ich das Verfahren für beide UARTS gleichzeitig verwendet habe, allerdings kann ich mir ein solches Verhalten bei großen Datenmengen durchaus vorstellen. Mein Beispiel zielt jedoch nicht darauf ab die größte Leistung zu erreichen sondern ein gut verständliches Einstiegsbeispiel zu geben.

Ähnliche Themen

  1. RFM12 und AVR Funkmodul mit Uart Übertragung
    Von Ripper121 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 15.10.2010, 14:21
  2. Interrupt während Graphlcd- und UART-Ausgabe
    Von malthy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 10.08.2010, 10:40
  3. Probleme mit UART und TIMER Interrupt
    Von MT2009 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 15.06.2010, 15:20
  4. String am AVR parsen und zerlegen
    Von n0Br4iN3r im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 10.11.2005, 11:42
  5. Probleme mit Rowalts UART-Beispiel und dem ATMEL
    Von popi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 18.08.2005, 18:26

Berechtigungen

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