Forum: Mikrocontroller und Digitale Elektronik UART


von Sebastian Kucharski (Gast)


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?

von Sebastian Kucharski (Gast)


Lesenswert?

das ganze natürlich am besten in bascom!

danke

von Florian Pfanner (Gast)


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

von Dieter Brüggemann (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.