Hallo,
ich möchte folgendes Vorhaben umsetzen:
Ein Videorekorder kann per remote Zugriff an die Kamera "Sony EVI D70"
einen VISCA Befehl im Format "81 01 04 38 02 FF" schicken (Link zum
Manual: http://www.norbain.co.uk/downloads/manuals/evi-d70%28op%29.pdf).
Nun möchte ich aber andere Dinge tun und Ausgänge schalten, wenn
bestimmte hex-Werte übermittelt werden.
Ich habe mir das so in etwa vorgestellt:
1
Dim Eingang As Byte ' Empfangenes Byte
2
Do
3
If Usr.rxc = 1 Then
4
Eingang = UDR ' Byte aus Empfangsregister lesen
5
' RXC zurücksetzen
6
Select Case Eingang
7
Case 97 ' Befehl a gesendet
8
PortB.0 = 1 ' PortB.0 an
9
Case 65 ' Befehl A gesendet
10
PortB.0 = 0 ' PortB.0 aus
11
Case 117 ' Befehl u gesendet
12
PortB = 255 ' PortB alle an
13
Case 85 ' Befehl U gesendet
14
PortB = 0 ' PortB alle aus
15
Case Else
16
Print "Unbekannter Befehl"
17
End Select
18
End If
19
Loop
20
End
Nur wie bringe ich diese hex-Kette zustande, da auch der Fall eintreten
könnte, dass mehrere Ketten aneinandergereiht ankommen könnten...
Vielleicht hat jmd. ähnliches schon einmal gemacht und kann zumindest
einen Tip geben!?
Danke
Christoph
Bei "81 01 04 38 02 FF" kommen sechs Zeichen. Deine Routine wertet aber
sofort jedes einzelne Zeichen aus.
IMHO solltest du mehrere Zeichen sammeln, bis ein Kommando fertig ist
und dann das Kommando auswerten.
Für mich sieht es im Manual so aus, dass es eine Maximallänge der
Kommandos gibt und jedes Kommando mit FF abgeschlossen ist.
Diese Info kannst du beim Zeichensammeln benutzen.
Die Schreibweise für hexadezimale Darstellung von Zeichen und die
Verarbeitung von Hexzeichen innerhabl von Strings in BASIC ist dir
bekannt?
Hallo!
Ja, Befehle werden mit FF abgeschlossen. Die Routine ist das einige, was
ich gefunden habe und wodran ich mich langhangeln wollte...
Die Befehle haben unterschiedliche Längen. Ich bin völlig frei in der
Wahl der Befehle!
Grds. könnte ich auch nur ein einzelnes Zeichen verwenden..
Ich möchte anhand von mir frei wählbaren Befehlen (die Videorekorder
senden eben hex-Werte - ich kann die aber frei in einem Skript
hinterlegen).
Passender wäre es, wenn ich gleiche Befehle eben wie in dem manual
beschrieben verwenden könnte...
> Die Schreibweise für hexadezimale Darstellung von Zeichen und die> Verarbeitung von Hexzeichen innerhabl von Strings in BASIC ist dir> bekannt?
Da bin ich noch nicht hinter gekommen. Mir soll ja auch keiner was
programmieren. Ich würde mich über einen Tip freuen.
Danke,
Christoph
Verstehe ich nicht.
Willst du statt der "Sony EVI D70" Kamera etwas eigenes anschliessen und
die vom Videorekorder gesendeten (eigentlich für die Kamera gedachten
Befehle) mit eigener Hardware für etwas anderes nutzen?
oder
Willst du dem Videorekorder zusätzliche, selbstdefinierte Befehle bei
bringen?
>> Die Schreibweise für hexadezimale Darstellung von Zeichen und die>> Verarbeitung von Hexzeichen innerhabl von Strings in BASIC ist dir>> bekannt?>> Da bin ich noch nicht hinter gekommen. Mir soll ja auch keiner was> programmieren. Ich würde mich über einen Tip freuen.
Das ist grundsätzliche BASIC Programmierung. Das sollte sich mit einem
BASIC Buch, dem BASIC Manual und Hilfe von BASIC Usern beheben lassen.
Ja, ich möchte die von dem Videorekorder gesendeten Befehle mit eigener
Hardware für etwas anderes Nutzen.
Die Hex Werte können daher auch eigentlich aus einem Zeichen bestehen!
Das Kamera Manual habe ich als Erklärung herangezogen bzw. um die
Befehle darzustellen.
Da ich aber die Befehle in einem Skript für den Videorekorder selbst
festlege kann das ja auch problemlos nur ein Zeichen sein....
Also Videorekorder sendet einen Befehl, den ich selbst vorgebe und der
dann vom uC umgesetzt wird; Ausgang schalten, Servo etc. ...
Danke, Christoph
Hallo,
soweit bekomme ichs hin. Das gesendete Hex-Zeichen bewegt den Servo.
Jetzt habe ich aber ein Problem mit dem 3. "Case-Ablauf". Der hakt
irgendwie...
ein waitms ist fast immer müll. vor allen Dingen dann, wenn Gefahr
besteht, dass der µC ein per UART übertragenes Zeichen nicht mitkriegt,
weil er in der Zwischenzeit mit Warten beschäftigt war.
Hallo kbuchegg,
dass klingt plausibel... Könntest du einen Tip bzgl. einer Alternative
geben.. Wahrscheinlich über einen Timer..?
Aber die 50 ms dachte ich würden zumindest zwischen den beiden oberen
Fällen eine nötige Pause einbringen, bis der Servo seine Position
verändert hat...
Ch Sp schrieb:> Hallo kbuchegg,>> dass klingt plausibel... Könntest du einen Tip bzgl. einer Alternative> geben.. Wahrscheinlich über einen Timer..?>> Aber die 50 ms dachte ich würden zumindest zwischen den beiden oberen> Fällen eine nötige Pause einbringen, bis der Servo seine Position> verändert hat...
Ich weiß ja nicht, was du da eigentlich steuerst. Aber die Ansteuerung
des Servos kann den Servowert durchaus schon wieder verändern, so lange
das Servo noch unterwegs ist. Die muss nicht warten, bis das Servo seine
Position erreicht hat.
Ich habe einen Videorekorder (dort kann ich in einem Script einer Taste
einen Wert/Zeichen in diesem Fall ein Hexwert zuordnen), der an den
ATmega8 einen Hexwert sendet.
Aufgrund dieses Hexwertes soll etwas passieren. Beispielsweise ein Servo
gesteuert (Schwenk-Neiger für feste Kamera) oder Ausgang geschaltet
werden etc.
Nun habe ich festgestellt, dass ich das mit dem Servo (testweise nur
"Schwenken") so hinbekommen würde.
Aber:
der dritte Case macht ärger. Möchte ich zum Beispiel eine LED 3x
aufblinken lassen, funktioniert das nicht über die Taste, die dem
dritten, also untersten Case zugeordnet ist....
Wohl aber: wenn ich mich schrittweise per Incr oder Decr (die Hexzeichen
04 und 06) durch klicke, bekomme ich in der Mitte (~ Winkel 70) ein LED
blinken...
Welchen Weg sollte ich den sonst alternativ gehen, wenn z. B. waitms
nicht geeignet ist?
Danke,
Christoph
Hallo,
ich habe es soweit hinbekommen, dass aufgrund eines einzelnen
Hex-Wertes etwas passiert (nicht mit case, sondern mit Schleifen).
Nun möchte ich meine ursprüngliche Idee, den Befehlssatz von VISCA zu
verwenden, umsetzen!
Sprich der Wert bzw. die Werte: "01060100020301FF" bewirken ein -UP-
bzw. verringern Winkel1 um "1".
Wie sammle ich den Befehl und vergleiche ihn dann mit
"01060100020301FF"?
Hintergrund ist, dass der Videorekorder eine Standard-Bibliothek für
VISCA-Befehle hat. Ich erspare mir die Verwendung einer extra von mir
erstellen Bibliothek, wo pro Steuerbefehl nur ein hex-Wert hintelegt
ist.
1. Problem ist, dass Com1 ein String ist. Da meckert zumindest BASCOM.
Vielen Dank,
Christoph