* now enable interrupt, since UART library is interrupt controlled
37
*/
38
sei();
39
40
/*
41
* Transmit string to UART
42
* The string is buffered by the uart library in a circular buffer
43
* and one character at a time is transmitted to the UART using interrupts.
44
* uart_puts() blocks if it can not write the whole string to the circular
45
* buffer
46
*/
47
uart_puts("String stored in SRAM\n");
48
49
/*
50
* Transmit string from program memory to UART
51
*/
52
uart_puts_P("String stored in FLASH\n");
53
54
55
/*
56
* Use standard avr-libc functions to convert numbers into string
57
* before transmitting via UART
58
*/
59
itoa(num,buffer,10);// convert interger into string (decimal format)
60
uart_puts(buffer);// and transmit string to UART
61
62
63
/*
64
* Transmit single character to UART
65
*/
66
uart_putc('\r');
67
}
Auf dem Computer kommt bei mir aber immer nur <0> an und das seeehr oft,
also ganz komisch die Sache.
Wisst Ihr an was das liegen könnte?
Grüße und gute Nacht!
naja, das ist der code von fleury, meiner ist genau so aufgebaut. Wenn
ich ein zeichen empfange, hab ich im terminal achtmal <0>. Bei einem
string sieht das dann echt schon wild aus.
Also empfangen tu ich, aber immer nur diese zeichenfolge. Was bedeuten
diese nullen in klammern?
Hoffe ihr könnt mir helfen
UART verzweifelter schrieb:> Ich sagte ja, ich hab es so umgeschrieben, es ist alles wirklich so, wie> es bei mir sein soll.
Das war nicht die Frage.
Die Frage war: Hast du kontrolliert (mit einem Experiment) ob die von
dir im Programm gemachte Aussage "Mein µC arbeitet mit 4Mhz" auch den
Tatsachen entspricht?
http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
okay, also die platine läuft mit 16mhz ich habe das mit f_cpu
eingestellt. Bei meiner initialisierung habe ich 9600 per define
eingestellt. Jetzt hab ich ebenfalls mit uart_puts eine ausgabe gemacht.
Ich probier es heute abend mal mit einem anderen uart.
Grüße
UART verzweifelter schrieb:> okay, also die platine läuft mit 16mhz ich habe das mit f_cpu> eingestellt.
Das allein reicht nicht. Mit dieser Angabe sagst du dem Compiler, dass
das Programm auf einem uC laufen wird, dessen Beschaltung und die Fuses
so eingestellt sind, dass er mit 16MHz läuft.
Das mußt du jetzt aber am uC mit der Programmer-Software auch noch
entsprechend einstellen... :-o
Hast du die Taktfrequenz mit einer blinkenden LED kontrolliert?
Und falls du dich fragst, warum wir hier auf diesem einen Punkt so
herumreiten:
Die überwiegende Mehrheit (>95%) aller UART Probleme sind genau auf
dieses Problem zurückzuführen: Der µC arbeitet mit einer ganz anderen
Taktfrequenz (meistens 1Mhz) als der, mit der dann die Konstanten für
die UART Beschickung ausgerechnet werden.
Also das Problem mit der LED hab ich auch nicht gehabt, also die LED
blinkte genau wie ich es wollte.
Ich versuche mal einen anderen UART evtl. hat der eben was.
Evtl passt auch was in der Initialisierung nicht. Ich hab die Baud-Rate
mit #define definiert und dann an die Funktion übergeben.
Hallo Leute,
also an was es jetzt lag kann ich beim besten Willen NICHT sagen. Auf
jeden Fall geht es jetzt...
Ich habe in der Fleury Lib eine Funktion uart_getc();
In dieser kann ich Fehler / Keine Daten erkennen und das Zeichen
abspeichern, bzw als Echo zurückzu senden.
Wenn ich jetzt aber per PC zum Beispiel LED12 senden will, bekomm ich ja
fünf Zeichen rein.
Jetzt kann ich die in ein Array speichern und mit dem String "LED12"
vergleichen oder?
Also das Kommando annehmen und verarbeiten. Aber wie genau geh ich hier
vor?
Ich habe da noch nicht so viel Erfahrung, was arbeiten mit Srings
angeht.
Grüße
UART verzweifelter schrieb:> Wenn ich jetzt aber per PC zum Beispiel LED12 senden will, bekomm ich ja> fünf Zeichen rein.
Genau
> Jetzt kann ich die in ein Array speichern
kannst du.
Allerdings solltest du in diesem Array eine Stringterminierung machen,
denn genau so gehts ja dann weiter: Mit Stringverarbeitung.
> und mit dem String "LED12"> vergleichen oder?
Ja. Dazu musst du einen String haben.
> Also das Kommando annehmen und verarbeiten. Aber wie genau geh ich hier> vor?
Mit STringverarbeitung.
Dazu stellt dir C einige Basisfunktionen zur Verfügung. Dein C-Buch hat
da mit Sicherheit ein ganzes großes Kapitel darüber, weil das eine
wichtige C-Grundfertigkeit ist, mit STrings umgehen zu können.
Wie? Du hast kein C-Buch.
Du wirst eines brauchen! Es gibt noch so vieles in C, was man wissen und
können sollte und ein C-Buch bringt dir das alles sukzessive in kleinen
Schritten bei.
Also kauf dir eines!
In der Zwischenzeit kannst du hier mal die absoluten Grundlagen über
Strings in C nachlesen. Das ist allerdings kein Ersatz für ein C-Buch!
http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F