www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nutzung des UARTs.


Autor: AVR (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich möchte mich in den UART einarbeiten. Habe dass Toturial 
durchgearbeitet so weit. Möchte nun ein Zeichen senden (Als erster 
Versuch). Im Anhang seht ihr den Quelltext.

Ich vermute, bzw bin mir sicher, dass die Fehler daran liegen, dass ich 
kein Port/ Pin deklariert habe. Ich habe es bisher nicht gemacht, da ich 
nicht sicher bin, ob ich es einfach mit ...

DDRD  = 0xff; ... machen kann. Also als Beispiel.

Der Pin, RX und der Pin TX muss ja jeweils als Ausgang, und der andere 
als Eingang festgelegt werden. Liegt darin mein Fehler?

Muss ich in der Fusebitkonfiguration dem Controller noch erzählen, dass 
ich auf die Zweitfunktion der Pins zugreife?

Danke

Autor: antworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Fehler treten überhaupt auf ?

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
../RS232.c:37: error: 'UDR' undeclared (first use in this function)
../RS232.c:27: error: 'FREQ_' undeclared (first use in this function)
../RS232.c:32: error: 'UCSRA' undeclared (first use in this function)

und so

Autor: xyz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die Include Dateien vergessen.

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Shit, danke. Seh es auch grad.

Hab nun folgende eingebaut:

#include <avr/io.h>

Gibt es noch eine extra für den UART?

Muss ich Ausgänge bzw Eingänge einstellen, oder machen es die Funktionen 
eingenständig?

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

Bewertung
0 lesenswert
nicht lesenswert
AVR wrote:
> Shit, danke. Seh es auch grad.
>
> Hab nun folgende eingebaut:
>
> #include <avr/io.h>
>
> Gibt es noch eine extra für den UART?

Nein.

>
> Muss ich Ausgänge bzw Eingänge einstellen, oder machen es die Funktionen
> eingenständig?

Nein, du musst nichts einstellen.


Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay. Habe dieses nachgefragt, da es noch immernicht übersetzt wird.

../RS232.c:30: error: 'BAUD_' undeclared (first use in this function)
../RS232.c:30: error: (Each undeclared identifier is reported only once
../RS232.c:30: error: for each function it appears in.)
../RS232.c:30: error: 'FREQ_' undeclared (first use in this function)
../RS232.c:30: warning: left-hand operand of comma expression has no 
effect
../RS232.c:31: warning: left-hand operand of comma expression has no 
effect

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es 1 zu 1 aus dem Toturial übernommen. Es ist für einen ATMega 16 
geschrieben. Nun ist mir aufgefallen, dass Baud_ ja in der Formel zur 
Berechnung herangezogen wird und nirgends deklariert ist. Aber wie ? 
Dass Toturial gibt das nicht her.

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

Bewertung
0 lesenswert
nicht lesenswert
Poste nochmal dein jetziges Program.

Aber diesmal bitte nicht als PDF.
Für einfach den Quelltext in das Posting ein (solange
ist der ja nicht) oder hänge dein C-File als Attachment dran.
Das erhöht die Chancen ungemein, dass sich das jemand ansieht.

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>

#ifndef F_CPU
#define F_CPU 8000000UL              //Einstellen der Oszillator - 
Frequenz in Hz
#endif

#define UART_UBRR_CALC (BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)

#define UART_BAUD_RATE 9600

int main (void)
{

UCSRB  |=  (1<<TXEN);
UCSRC  |=  (1<<URSEL)  |  (3<<UCSZ0);

UBRRH  =  (uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE, F_CPU) >> 8);
UBRRL  =  (uint8_t)  UART_UBRR_CALC(UART_BAUD_RATE, F_CPU);


while (!(UCSRA & (1<<UDRE)))
{
}

UDR    =  'x';

return (0);
}

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

Bewertung
0 lesenswert
nicht lesenswert
Nimm das Leerzeichen hier

> #define UART_UBRR_CALC (BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
                        *

raus.
Zwischen Makroname und Argumentliste darf keines sein.


Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke :)

Dass sind immer die besten Fehler. Es läuft.

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun da alles geht bin ich dabei zu senden UND zu Empfangen.

Nun folgt die Initialisierung für einen ATMega16:

#include <avr/io.h>                    
#ifndef F_CPU
#define F_CPU 8000000UL      
#endif              

#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)      
#define UART_BAUD_RATE 9600               


UBRRH  =  (uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE, F_CPU) >> 8);    
UBRRL  =  (uint8_t)  UART_UBRR_CALC(UART_BAUD_RATE, F_CPU);

    
UCSRB = (1<<RXEN)  |  (1<<TXEN);          
UCSRC = (1<<URSEL)  |  (1<<UCSZ1)|(1<<UCSZ0);


Ist diese Fehlerfrei ? Habe ich alle Register korrekt gesetzt ? Habe ich 
auch nichts vergessen ?

Autor: antworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ist diese Fehlerfrei ? Habe ich alle Register korrekt gesetzt ? Habe ich
>auch nichts vergessen ?

Ausprobieren - hängt ja kein Leben von der Funktion ab... hoffe ich :-)

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Hardware habe ich in der Schule. Also frühestens Montag 
ausprobieren. Morgen ist frei. Schade.
Naja vielleicht kann mir ja noch wer damit helfen.

Danke

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.