UART senden

Gast #424800
Lesenswert?
• ▲
▼
Hallo,
Habe bisher wenig Ahnung von dem, was ich da mache, aber hier kann mir 
bestimmt jemand helfen.

System: Atmega32, AVR Studio 4.12

Ich versuche einfach nur ein Zeichen über die serielle Schnittstelle zum 
PC zu senden. Das klappt solange, wie ich diese ganzen "special function 
register", sprich "UCSRB, UCSRB, ..." direkt im Programm deklariere. Die 
sollten doch eigentlich auch in einer Header-Datei stehen, oder? In der 
"iom32.h" habe ich zumindest die passende Deklaration gefunden. Binde 
ich die Datei ein, meckert der Compiler (Object file not found on 
expected location D:\...).

Wenn mir da mal einer nen Anstoß geben könnte wäre ich froh.

M f G
Sebastian
Gast #424853
Lesenswert?
• ▲
▼
Hallo,

Hatte die Datei eingebunden, allerdings war bei den Projektoptionen der 
falsche Controller eingestellt...
Es mag jedoch noch nicht ganz funktionieren. Hier mal mein erster 
Versuch:


#define    F_CPU 4330000
#define   UART_BAUD_RATE 9600

#include <avr/io.h>
#include <lcd.h>
#include <uart.h>


int main(void)
{
        lcd_init(LCD_DISP_ON);
  lcd_puts ("Senden...");
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
main:
  uart_puts ("a");
goto main;
}


Viel ist da ja nicht dran, aber irgendwie ist da wohl noch was faul. Am 
Hyperterminal kommt absolut nichts an (Baudrate stimmt überein). Habe 
ich was wichtiges vergessen? Denke man muss da nicht mehr viel machen, 
die Fleury Bibliothek müsste ja reichen...

M f G
Sebastian
Gast #424962
Lesenswert?
• ▲
▼
Benutz bitte kein goto!
Für sowas gibt es in C z.B. die while-Schleife.
Warum willst du unbedingt eine Bibliothek benutzen, von deren 
Vorgehensweise du nichts weißt?
Wirf einen Blick ins Datenblatt deines Controllers! Dort findest du zu 
fast jeder Funktion ein (funktionsfähiges) Beispiel.
Wenn es da zu Problemen kommt, kann unsereins wenigstens ins Datenblatt 
gucken und muß sich nicht irgendwelche Libraries herunterladen und 
installieren.
Gast #425195
Lesenswert?
• ▲
▼
Wenn die uart_puts Funktion das 'A' einfach in das UART Senderegister 
schreibt und nicht wartet, bis der Sendevorgang beendet ist (wovon ich 
ausgehe), wirst du nichts sehen können, weil Du mit Deinem "GOTO" (Gott 
beware) zurück an den Anfang springst und dort die UART neu 
initialisierst. Und bei 9600Bd "dauert" ein Zeichen bekanntlich ca. 1ms.
Gast #425339
Lesenswert?
• ▲
▼
@WM-Rahul:
Ich hab es schonmal mithilfe des GCC Tutorials ans laufen bekommen, 
allerdings finde ich die Bibliotheks-Lösung einfacher.

@kbucheg:
Das ist ein normales Nullmodem-Kabel, also gekreuzt... hat bisher auch 
immer damit geklappt.

@Thorsten:
OK.. vll ist goto nicht wirklich sinnvoll, werde es mal mit einzelnen 
Zeichen probieren und ne gewisse Zeit dazwischen warten. Das ganze soll 
erstmal überhaupt funktionieren....


M f G
Sebastian
Gast #425345
Lesenswert?
• ▲
▼
Hallo Sebastion,

für die UART-Library von P.Fleury muss man noch 2 Defines für den gcc 
setzen, ich mache das von Linux aus in einem Makefile:

DEFINES += -DUART_TX_BUFFER_SIZE=16 -DUART_RX_BUFFER_SIZE=16

Die jeweiligen Sizes müssen Potenzen von 2 (8, 16, 32, usw.) sein. Beim 
AVR-Studio sollte das auch irgendwie gehen - hab' ich aber noch nicht 
probiert.

Viel Erfolg
HJ

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.