mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik usart string


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAllo.Arbeite mit den Atmega16L und habe leider ein kleines Problem.
Programiere in c und steuer mit dem Mikrocontroller ein
Bluetoothmodul.
Befehle kann ich dem Modul (über USART )mitteilen und das fuinzt auch
soweit.Die Befehle übertrage ich in   Hex Zahlen .Nun möchte ich aber
zb. eine Adresse wie zb. 12 34 56 78 9A BC über USART versenden.Und
genau da fehlen mir gerade die IDEEN wie ich das sinvoll, und optimiert
hinbekomme.Denke da an einen ARRAY oder so.Kenn jemand vielleicht eine
Lösung?Also die einzelne Zeichen übertrage ich so:
void sende_Bluetooth(unsigned char a)
{
while (! UCSRA & (1<<UDRE)));
UDR =a;
}

Autor: Olaf K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort Ringbuffer.

AVR-Appnote mit C-Code: AVR306

Für Assembler: AVRFreaks Design Note #029 "Implementing FIFO Buffers
in Software"

MfG Olaf

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal.Also zb beispiel möchte ich jetzt "Name" über USART
senden.

meine Sende Funktion steht ja oben.Möchte dann Name byte für byte
übertragen.Hoffe das macht dies verständlicher .Thx schon mal

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also verstehe ich das richtig.Das ich das mit eine  Array machen soll
der dann immer wieder eine stelle (Adresse) nach jedem gesendeten
Zeichen weiterrücken soll?Oder nicht?

Autor: Bjoern Buettner (tishima)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

such mal nach den UART Routinen von Peter Fleury http://jump.to/fleury,
da finde ich ist das ganze sehr anschaulich gelöst. In der Codesammlung
sind auch bereits einige brauchbare Beispielcodes.

mfg,
Bjoern

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Bjöern.Also ich verstehe jetzt schon wie es gemacht wird.Habe
zuätzlich zu mein Funktion die Funktion SendeString(char *s)
geschrieben welche die Zeichen nach Fifo einzelnd übermittel soll.Aber
wie soll ich denn zb "Name" im meinen programm definieren und damit
dann
auch übergeben?also es liegt eher am syntax bei mir .sorry

Autor: Bjoern Buettner (tishima)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uart_puts_P("\r\n-= Luefter Test Aplication =-\r\n");
============

Nocheinmal Fleury UART diese Funktion untersuchen......
Ich fange auch erst mit C an und kann ein bischen Delphi und Basic,
also wenn das fuer mich anschaulich ist, solltest Du das auch
hinbekommen !

mfg,
Bjoern

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi nochmal.
also meine Funktion ist:

void Sendenstring(char *s)
{
   while (*s)
   {
    USART_Transmit(*s);
s++;
}
}
das müßte eiogentlich richtig sein.Mein Problem ist wie definiere ich
jetzt mein String un wie übergebe ich ihn?Bekomme da die ganze Zeit
Fehlermeldung
Möchte gerne "Name" übertragen .Byte für Byte

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe auch noch eine allgemeine Frage.Kann man Die Daten, die man über
USART zu einem anderen Modul schickt über eine TerminalProgramm
überwachen
bzw sehen was man verbrochen hat?

Autor: Witwenbetreuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*s ist eine Zeigervariable die innerhalb deiner Funktion die Adresse
deines String beinhaltet.

volatile char Array_feld_Name[4]; //Deklarieren eines Datenfeld

void main(void)
{
  Array_feld_Name[0]='N'; //Datenfeld mit Ascii-Zeichen füllen
  Array_feld_Name[1]='a'; //geht auch anders
  Array_feld_Name[2]='m';
  Array_feld_Name[3]='e';
  Sendenstring(Array_feld_Name);// Deine Sendefunktion aufrufen
}

void Sendenstring(char *s) //hier wird jetzt die Adresse deines Array
{                          //übernommen
   while (*s)
   {
    USART_Transmit(*s);
    s++;
   }
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht in die Hose. Mit ziemlicher Sicherheit.

Woran erkennt die Funktion "Sendenstring" das Ende des übergebenen
Strings?

   while (*s)

Am Null-Zeichen, mit dem der String terminiert ... sein sollte, aber
nicht ist.

Array_feld_Name muss Platz für (mindestens) fünf Zeichen bieten und
das letzte Array-Element muss mit 0 besetzt werden, da sonst die
Stringendeüberprüfung in "Sendenstring" kein Stringende findet,
sondern munter weiter den Speicherinhalt ausgibt, bis zufällig mal eine
Null vorbeikommt ...

Autor: Witwenbetreuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jap da hab ich gepennt sorry...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll kein Vorwurf sein, ist ja eine der vielen beliebten Möglichkeiten,
interessante Nebeneffekte mit C-Programmen zu erzielen ...

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

Bewertung
0 lesenswert
nicht lesenswert
Und im ürigen muss das ja gar nicht so kompliziert
sein (in diesem Falle)

Ein simples

  Sendenstring( "Name" );

tuts auch.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thx.Ich werde das gleich versuchen

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.wie kann man das mit einem simpleln Sendestring("Name")
implizieren.Das verstehe ich jetzt nicht

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

Bewertung
0 lesenswert
nicht lesenswert
void main(void)
{
  Sendenstring( "Name" );   // Deine Sendefunktion aufrufen
}

Du solltest dir ein C-Buch besorgen.
Das sind C-Grundlagen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.Aber manchmal kann man es einfach nicht mehr!Thx

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja.Aber manchmal kann man es einfach nicht mehr!Thx

Ein Buch besorgen?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.Ja da hast du ja recht.Habe jetzt die Funktion so aufgerufen wie
dues gesagt hast.Bekomme immer die Fehlermeldung
function parameter# 1 incompatible with its declaration

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal deinen Code! Keiner weiß, wie der inzwischen aussieht.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also habe die Funktion um einzelne Bytes zu senden :

void USART_Transmit(unsigned char a)


{
while (!(UCSRA & (1<<UDRE)))
;
UDR=a;
}

dann um einen string zu senden:

void Senden_Von_String( char *s)
{
        while(*s)
        {
                USART_Transmit(*s);
                        s++;
        }
}

nun möchte ich "Name" senden:

Senden_Von_String("Name");

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und auf welchen Aufruf bezieht sich jetzt die Fehlermeldung?

(Ist es wirklich so schwer ein kompilierbares, vollständiges
Program zu posten, sodass wir das einfach mal testweise
durch unsere Compiler jagen um zu sehen, was die dazu zu
sagen haben)

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char *s

ist nicht das gleiche wie
unsigned char *s

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

Bewertung
0 lesenswert
nicht lesenswert
ok !sorry

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

Bewertung
0 lesenswert
nicht lesenswert
sorry ,war der Falsche .nun aber...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich dein erstes Pgm durch den GCC jage, gibt es weder eine
Warnung noch einen Fehler.

Beim 2.ten sagt mir der Compiler
In function 'Change_Bluetooth_Name':
105: error: 'n' undeclared (first use in this function)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was wolltest du eigentlich damit?

#define name n[9]


Hängt das mit dem 'n' in Change_Bloototh_Name zusammen.
Wolltest du etwa eine globale Variable 'n' definieren?

Das geht dann so:


char n[9];



und irgendwo weist du dem was zu:

int main()
{
  ...
  strcpy( n, "Hallo" );

}

oder so:

char n[] = "Hallo";


Auf jeden Fall aber: kauf dir ein Buch!!!

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

Bewertung
0 lesenswert
nicht lesenswert
ja habe ich gesehen.Sorry bin gerade etwas konfus

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.