Nutzung des UARTs.

Gast #581984
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
Angehängte Dateien:
Gast #581997
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
Gast #582006
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?
Gast #582014
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
Gast #582038
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.
Gast #582064
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);
}
Gast #582117
Lesenswert?
• ▲
▼
Nun da alles geht bin ich dabei zu senden UND zu Empfangen.

Nun folgt die Initialisierung für einen ATMega16:
1
#include <avr/io.h>                    
2
#ifndef F_CPU
3
#define F_CPU 8000000UL      
4
#endif              
5

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

9

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

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

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.