www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART


Autor: Sebastian Kucharski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bins wieder! Ich hoffe ich werde nicht irgendwann nervig. Mit meinem 
Projekt bin ich aber schon ganz schön weit gekommen und das nur mit 
Eurer Hilfe! Aber jetzt zu meiner Frage:

Ich möchte zwischen dem Rechner und meinem Mirkocontroller Board eine 
ART Datenübertragung machen über die serielle Schnittstelle, wo ich zum 
Bespiel die Eingänge HI oder LOW schalten kann oder wo ich einen Timer 
Aktivieren kann oder wo ich die Eingänge abfragen kann.

Erste Mäglickeit ist Stings zu senden z.B.
PUT PORT D 1    - z.B. setze Port D1 auf HI
oder
GET PORT D 1    - z.B. frage Port D1 ab.

Ist es sinnvoll es so zu machen oder es in ein Protokol zu verpacken 
z.B.
PUT = 00001111
GET = 11110000

u.s.w.

Wie macht man sowas am besten?

Wie steuert man mit einem Programm am besten einen AVR?

Autor: Sebastian Kucharski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ganze natürlich am besten in bascom!

danke

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde das ganze per Interrupt aufbauen: Ist ein Zeichen fertig 
empfangen, so wird es einem buffer-array zugeführt. Sollte das Zeichen 
eine bestimmte taste sein(z.B.Enter) so wird der buffer ausgewertet. 
über diesen weg ist es einfacher wenn du nur einzelne zeichen nimmst 
z.B. r p b für read port B oder so. In diesem fall must du nur das 1. 3. 
u. 5. Zeichen auswerten. Der Controller führt dann die Anweisung aus, 
sendet das Ergebnis zurück (evt. auch über Interrupt) und kehrt dann in 
den normalen Porgrammablauf zurück. Ich hab mal ein kleines Projekt so 
aufgebaut. Hat auch halbwegs funktioniert...

Gruß, Florian

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian

Bau doch einfach eine Schleife, die auf ein Zeichen von der Seriellen 
Schnittstelle wartet.

dim portd = output
Dim A As Byte
start:
Do                  'start loop
 A = inkey()        'look for character
 loop until A > 0   'is variable > 0

  if a = 65 then      'Zeichen = A
    Portd = 255         'Bedingung
  end if
  if a = 66 then      'Zeichen = B
    portd = 0         'Bedingung
  end if
goto start


Wenn du viele Befehle schicken willst, bietet sich "select case" an. 
Kann mit einem terminal Prg gut testen.

MFG
Dieter

PS: nur ein Vorschlag, geht bestimmt anders und besser

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.