www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Empfangen mit dem Microcontroller


Autor: Carl Carlson (keine_ahnung)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

Ein Mitstudierender und ich versuchen im Moment, Daten die vom Rechner 
kommen mit dem Microcontroller zu empfangen.

Im web und der uni-bibliothek haben wir uns so gut es ging mit der 
Methode "empfangen" vertraut gemacht.
Das Programm funktioniert aber leider nicht so, wie wir es uns 
vorgestellte haben.
Wir hoffen auf einige tipps und tricks von euch.

Im Anhang findet ihr das C-Programm und die Headerdatei die wir benutzt 
haben.

gruß

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for(;;)
  {

  *pt_empfangene_daten = uart_getc_wait();

  pt_empfangene_daten++;          //zählt pointer pt1 hoch, setz damit 
Adresse im Array ein weiter
  }


is das nicht ne Endlosschleife? irgendwann wird dein Speicher überlaufen 
und nix passiert....

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Schade, das ich von C nicht so viel Ahnung habe, aber hier gibt's ein 
Tutorial in Assembler. Sehr schön und verständlich.
Ich habe mir einen Buffer im Variablenbereich eingerichtet und dort 
werden einlaufende Zeichen (der UART macht's mit Interupt) eingetragen.
Ich benötige dafür ein Zeigerregister für die Adresse des Buffers und 
zwei Offsetvariablen, um für Lese- und Schreibzugriffe die Adresse von 
der Basisadresse des Buffers zu berechnen. Sind die Lese- und 
Schreiboffsets gleich, ist kein neues Zeichen gekommen. In der ISR wird 
beim Eintreffen eines neuen Zeichens die Offsetvariable für 
Schreibzugriffe erhöht und auf die Größe des Buffers geprüft. Ist sie 
größer, setzt man sie auf 0 und fängt wieder bei der Basisadresse an. 
(Ringpuffer) Anschließend addiert man die Offsetvariable auf die 
Basisvariable und trägt das eingetroffenen Zeichen ein. Im zyklischen 
Programm (polling) vergleicht man Lese- und Schreiboffset. Ist ein 
Unterschied, erhöht man den LeseOffset, vergleicht ihn mit der 
Puffergröße und setzt ihn evtl. zurück. Anschließend addiert man auf die 
Basisadresse den Leseoffset und holt sich das eingetroffene Zeichen zur 
Bearbeitung. Ich hoffe, es war verständlich.
Gruß oldmax

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.