mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Routine zur Handhabung des UART´s entwickeln ?


Autor: Timo Pat (timobile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,
Ich möchte mir im Rahmen eines Projektes nun eine Routine zur Handhabung 
des UART´s am ATMega 16 schreiben.

Ich habe mir folgendes gedacht:

1. Definitionen

   - Baudrate
   - Formel zur Berechnung der Baud - Rate
   - Taktversorgung

2. Initialisierung

   - Einstellen Schreiben und Lesen
   - Einstellen der Baud-Register
   - Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
   - Flush Receive-Buffer

3. Funktionen

   - Sende_Zeichen
   - Sende_Zeichenkette
   - Sende_Ganzzahl
   - Sende_Fliesskommazahl
   - Empfange_Zeichen

Diese Routine möchte ich als 'Header' in spätere Programme einbinden 
können. Dort möchte ich dann "nur noch sagen: Rufe zum Beispiel die 
Funktion Sende_Ganzzahl und übergebe ihr den Wert '123'"

Wieso ich die Funktionen diferenziert schreibe möchte ist einmal der 
Grund, dass ich mich am Toturial orientieren möchte. Zum anderen möchte 
ich den UART „Schritt für Schritt“ begreifen und für ein Projekt 
dokumentieren.

Nun ein paar Fragen zu dem Vorhaben:

a. Fallen euch noch Funktionen ein, die in dem Zusammenhang gleich mit 
abgearbeitet werden könnten ?

b. Sollte man bei den Schritten 1. und 2. noch weitere Einstellungen 
vornehmen ?

c. Ist das Datenformat, welches ich in 2. gewählt habe eine "Gute 
Entscheidung" ?

Werde im nächsten Post den Anfang des Programms, also die Definitionen 
und die Initialisierung posten.

Dann werde ich auf Anregungen oder Kritik warten. Anschließend kommen 
nach und nach die Funktionen.

Wie gesagt, es handelt sich um ein Projekt. Also bitte keine "dumme 
Kommentare", bzw. "Fertige Routinen".

Ich warte auf Anregungen und konstruktive Kritik ...


Vielen Dank

Autor: Timo Pat (timobile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie bereits erwähnt. Die Definitionen und die Initialisierung. Ich bitte 
um konstruktive Verbesserungsvorschläge, um die Prüfung des Quelltextes 
und und und :)

Definitionen:

//Einbinden der Bibiotheken
#include <avr/io.h>                          
//Einstellen der Oszillator - Frequenz in Hz
#define F_CPU 8000000UL               

//Formel zur Berechnung der Baud - Rate
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)      

//Einstellen der Baudrate 
#define UART_BAUD_RATE 9600                       

Initialisierung:
//Einstellen der Baud-Register
UBRRH  =  (uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE, F_CPU) >> 8);    
UBRRL  =  (uint8_t)  UART_UBRR_CALC(UART_BAUD_RATE, F_CPU);

//UART auf 'Schreiben' und 'Lesen' einstellen
UCSRB   =   (1<<RXEN)  |  (1<<TXEN);        

//Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit      
UCSRC   =   (1<<URSEL)  |  (1<<UCSZ1)|(1<<UCSZ0);            
//Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) 
do                    
{
     UDR;
}
while (UCSRA & (1 << RXC));



Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo Pat wrote:
>
> Ich warte auf Anregungen und konstruktive Kritik ...

Da gibts nicht viel Kritik.
Das ist bis jetzt mehr oder weniger 08/15 Standard-UART-Aufsatz.

> c. Ist das Datenformat, welches ich in 2. gewählt habe eine
> "Gute Entscheidung" ?

Welches Datenformat? Auf der UART gibt es kein Datenformat.
Du hast nur die Entscheidung: Übertrage ich binär oder übertrage
ich in Textform. Alles andere ist immer Anwendungsspezifisch.
Ob das jetzt 8 Bit sind oder 7 oder 9, hängt hauptsächlich
davon ab, was die Gegenstelle kann. Aber in der Regel können
alle Gegenstellen 8 Bit.


Wenn du dann soweit bist, kommen die nächsten Fragen auf dich zu:
gepufferte Übertragung, Empfang mittels Interrupt und vor
allen Dingen: Handshake!

Aber sieh erst mal zu, dass du die Kommunikation so zum Laufen
bringst. Das ist im Moment wichtiger, als sich Gedanken über
eine modulare Library zu machen. Die 30 Code Zeilen, auf die
es momentan hinauslaufen wird, sind schnell umgearbeitet.

Autor: Timo Pat (timobile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir Karl heinz erstmal. Okay, dass mit dem Format der Übertragung 
habe ich nun verstanden. Ich übertrage also mit 8 Bit.

Ich habe mich nun eben mit meinem ATMega16 und dessen BEschaltung 
beschäftigt. Ich habe nun einen Max232 angebracht. Die Hardware steht 
nun komplett.

Du schreibst, dass ich zusehen soll, dass ich die Kommunikation 
ersteinmal in Gange bekommen soll.

Reicht für diesen ersten Test nicht einfach meine Deffinition + 
Initialisierung + Senden eines Zeichens ? Ich kann über den PC ja mit 
einem Terminal - Prgramm schauen, ob das Zeichen vom PC empfangen wird 
...


So nun nehmen wir an, die Kommunikation läuft. Der PC erhält das 
gesandte Zeichen. Du schreibst folgendes:

> Wenn du dann soweit bist, kommen die nächsten Fragen auf dich zu:
> gepufferte Übertragung, Empfang mittels Interrupt und vor
> allen Dingen: Handshake!

Sollte ich mir diese Fragen bezüglich der Initiallisierung stellen ?

1. Zur gepufferte Übertragung:

   Was bedeutet "gepufferte Übertragung" genau und wozu wird dieses 
verwendet ? Ich habe gelesen, dass die gepufferte Übertragung dazu da 
ist, die Daten in "Pakete" zu packen und dann zu senden. Aber da ich ja 
sowieso mit 8-Bit-Übertragung arbeite, ist dass denn nicht überflüssig ? 
(Sorry bin ein absoluter Beginner)

2. Zum Empfang mittels Interrupt:
   Das hatte ich vor, ja. Dass bedeutet ja nur, dass immer ein Interrupt 
ausgelöst wird, wenn ein Zeichen/String oder eine Variable ankommt. 
Wodrin liegt hier eigendlich der Vorteil gegenüber der Kommunikation 
ohne Interrupt.

3. Zum Handshake:
   Was ist das ;)

Vielen Dank, dass ihr mir helft. Meine Aufgabe ist es nämlich eine 
Routine mit den Funktionen zu schaffen. Und da muss ich Schritt für 
Schritt vorgehen und alles dokumentieren und verstehen ..



Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/Handshake

;-) Besser kann mans nich erklären

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.