Beamer-Steuerung über RS232 Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro
Autor |
|
|
|
BID = 518135
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Ja, dann such mal nach RC5-Code und AVR.
Wenn deine FB keinen RC5 ausspruckt, dann viel Spaß beim selbstentwickeln der Empfängerroutine. Wobei ich das für ein paar andere FBs schon gemacht habe - lohnt nicht wirklich, wenn man nen Standard nutzen kann, sollte man das machen..
_________________
|
|
BID = 519184
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
|
SO, nächstes Problem.
Das mit RC5 hab ich mal hinten angestellt.
Ich hab noch einen weiteren Beamer (Hitachi), der wiederum mit ganz anderen Zeichen angesteuert werden will.
Und zwar mit 7-Byte-Zeichenfolgen, die ich in HEX-Schreibweise vorliegen habe. Nun ist es so, dass da auch Hex-Werte wie 00 oder 03 vorkommen.
Nun meine Frage:
Wie kann ich solche Zeichen über RS232 ausgeben? (in Bascom-AVR)
also: Wie kann ich solche Hex-Werte angeben (mit der Print-Routine möglich? Zur Not auch über eine Variable)
Alles in Bascom-AVR...
Ciao,
Wolfgang |
|
BID = 519192
LeoLöwe reloaded Schreibmaschine
Beiträge: 1407 Wohnort: Meine
|
|
BID = 519198
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
So, irgendwie ist das komisch:
ich probier irgendwas, kriegs nicht raus, poste es und kriegs dann raus...
Vielleicht weil ichs gepostet hab?
Egal.
Jedenfalls, das Ausgeben hab ich schon geschafft.
Jetzt muss ich nur noch empfangen und auswerten.
Der Beamer gibt eine 3-Byte-Folge zurück, bei der sich nur das mittlere Byte ändert.
Je nach Wert dieses Bytes muss ich jetzt LEDs schalten.
Jetzt weiß ich beim abfragen wieder nicht, wie ich eine Variable (Typ String?) unter Angabe der Hexwerte abfrage...
Ciao,
Wolfgang
|
BID = 519200
Racingsascha Schreibmaschine
Beiträge: 2247 Wohnort: Gundelsheim
|
Die Hex-Dec-Wandlung kann auch der Windows-Taschenrechner in der wissenschaftlichen Einstellung.
Zitat :
| Jetzt weiß ich beim abfragen wieder nicht, wie ich eine Variable (Typ String?) unter Angabe der Hexwerte abfrage... |
Was gibt denn die Empfangsfunktion als Datentyp raus? Sollte eigentlich in der "Anleitung" der Funktion drinstehen (wenn es denn eine gibt...).
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 519204
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
Wie gesagt, eine 3-byte-Folge.
Diese kann die drei verschiedenen Werte 1D 00 00 bis 1D 01 00 annehmen.
Ciao,
Wolfgang
|
BID = 519209
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Also, "Hex"-Werte sind genauso Zahlen wie ASCII-Kodes, Dezimalzahlen oder Oktalzahlen. Eben nur mit einer anderen Schreibweise und Basis.
Daher ist es doch logisch, dass
&H80 das gleiche ist wie 128 (positive Ganzzahl).
In Basic schreibt man "Hexwerte", genauer Zahlen zur Basis 16 mit dem Präfix "&H".
Zur anderen Frage:
Zitat :
| die drei verschiedenen Werte 1D 00 00 bis 1D 01 00 |
Wieso drei? Ich denke, nur das mittlere, also erste Byte ändert sich. Wenn dem so ist, dann testest du die Bytes links und rechts davon auf &H1D und &H00. Wenn das zutrifft, kannst du das Byte in der Mitte auswerten. In C ist das einfach, in Basic muss man, soweit meine Kenntnisse stimmen, den Klimmzug über "mid" machen:
if mid(eingabestring, 1, 1) = "\x1D" And mid(eingabestring, 3, 1) = "\x00" then
if mid(eingabestring, 2, 1) = "\x00" then led_aus
elseif mid(eingabestring, 2, 1) = "\x01" then led_an
else
fehler
end if
Irgendwie so wird das aussehen. Dass das das reinste Gekrüppel ist, sieht jeder Programmierer...
Achso, keine Ahnung ob Bascom Escapesequenzen wie oben gezeigt erlaubt, aber sonst müsste man ja nocht das Byte in eine Zahl umrechnen lassen, ums mit einer vergleichen zu können. Warum ist Basic so unlogisch. Ein String besteht nur aus Zahlen, wann lernen die das mal...
In C sieht sowas sogar fast süß aus...:
if(strEingabe[0]==0x1d && strEingabe[2]==0)
(strEingabe[1]==0x01) ? LED_AN : LED_AUS;
_________________
|
BID = 519394
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
So, erstmal ein dickes THX @ DonComi...
Ich poste mal meinen Code und hätte gerne Rückmeldung, ob es von vorneherein zum scheitern verurteilt ist...
HAb den Beamer leider erst nächste Woche zum ausprobieren verfügbar...
Code : |
Dim B As Integer , M As Long , L As Byte , W As Long , N As Long , O As Long , P As String * 7 , Q As String * 3 , R As String * 1
Sub Status3
Print Chr(&Hbeef03060019d3020000600000) 'Status beim Beamer anfragen
Input , Q
'Q = "{029}{001}{000}"
R = Mid(q , 2 , 1)
If Mid(q , 1 , 1) = "{029}" And Mid(q , 3 , 1) = "{000}" Then
If Mid(q , 2 , 1) = "{000}" Then Portc.4 = 0
If Mid(q , 2 , 1) = "{000}" Then Portc.5 = 1
If Mid(q , 2 , 1) = "{001}" Then Portc.4 = 1
If Mid(q , 2 , 1) = "{001}" Then Portc.5 = 0
If Mid(q , 2 , 1) = "{002}" Then Portc.4 = 1
If Mid(q , 2 , 1) = "{002}" Then Portc.5 = 1
Else
Portc.5 = 0; Portc.4 = 0
End If
O = 0
End Sub
|
|
So, jetzt gibt er mir den Anfrage-String schon mal gar nicht aus. Wenn ich jedes Byte als eigenen CHR(...) schreibe, geht es...? Sind es zu viele Bytes?
R hab ich versuchsweise definiert, um in den ganzen If-Abfragen nicht immer mit MID arbeiten zu müssen...
MfG,
Wolfgang
|
BID = 519397
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Moin
Zitat :
| Print Chr(&Hbeef03060019d3020000600000) 'Status beim Beamer anfragen |
Holla. Das geht natürlich nicht.
Chr will ein Byte haben, in ein Byte passen aber nur &H00 - &HFF, also 8 Bits.
Du versuchst dem hier ne riesen Zahl zu übergeben.
Du kannst einen String machen, der 7 Bytes lang ist, wie bereits geschehen, und dort die einzelnen Bytes platzieren mit
String = "{&Hbe}{&Hef}..."
Print String
Ob man Hexadezimale Zahlen in dieser {} Schreibweise nutzen darf, wie ich oben, weiß ich nicht. Ich mag die Sprache nicht.
Sonst musst du halt alle Zahlen nach dezimaldarstellung umrechnen.
Zitat :
|
If Mid(q , 2 , 1) = "{000}" Then Portc.4 = 0
If Mid(q , 2 , 1) = "{000}" Then Portc.5 = 1 |
Wenn du vorher R den Wert mid(blabla) zuordnest, warum machst vergleichst du nicht einfach R mit den Konstanten?
Außerdem musst du nicht für jede Operation das Byte erneut abfragen, du kannst auch
if R="{000}" then
bla
bla
end if
schreiben.
Kost weniger Rechnzeit, Speicherplatz und Nerven.
---
Was mich bei dieser Sprache so nervt, ist, dass man solche Klimmzüge wie Chr() und Asc() und mid() braucht.
_________________
|
BID = 519405
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
Wie gesagt, was der Beamer genau ausgiebt, kann ich nicht sagen. Ich weiß nur, dass es 3 Bytes sind mit den Werten 1DH, 00H, 00H; wobei das mittlere Byte zwischen 00H und 02H variieren kann.
Ich habs mal umgeschrieben...
Code : |
Dim B As Integer , M As Long , L As Byte , W As Long , N As Long , O As Long , P As String * 7 , Q As String * 3 , Q1 As String * 3 , Q2 As String * 3 , Q0 As String * 3 , S As String * 13
Q0 = "{029}{000}{000}"
Q1 = "{029}{001}{000}"
Q2 = "{029}{002}{000}"
Sub Status3
S = "{190}{239}{003}{006}{000}{013}{211}{002}{000}{000}{096}{000}{000}"
Print S
Input , Q
If Left(q , 3) = Q0 Then
Portc.4 = 0
Portc.5 = 1
Elseif Left(q , 3) = Q1 Then
Portc.4 = 1
Portc.5 = 0
Elseif Left(q , 3) = Q2 Then
Portc.4 = 1
Portc.5 = 1
Else
Portc.5 = 0
Portc.4 = 0
End If
O = 0
End Sub
|
|
So, ich hoffe meine ersten Lernschritte nerven euch nicht schon...
MfG,
Wolfgang
|
BID = 519410
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Jetzt vergleichst du doch Redundanzen!
Also, du willst doch folgendes, abgesehen vom Ausgeben irgendeiner Zeichenfolge zum Beamer jetzt mal im Pseudokode:
variable a, 3 Byte lang
eingabe <- a
wenn zeichen1 von a = 1d und zeichen3 von a = 0
dann
teste zeichen2 = 0
dann
led aus
sonst, wenn zeichen2 = 1
dann
led an
sonst, wenn zeichen2 = 2
led an
ansonsten
ungültig
ende wenn
Übersetzt man diesen Pseudokode nach Basic würde es etwa so aussehen:
Dim Status as Byte
Dim Bytes as String *3
'jetzt irgendwie drei Zeichen nach String bekommen, k.A. wie input genau funktioniert...
'Abfragen:
if mid(bytes, 1, 1) = "{&H1D}" And mid(bytes, 3, 1) = "{&H00}" then
Status = Asc(mid(bytes, 2, 1))
Select Case Status
case 0:
'led aus
case 1:
'led an
case 2:
'was anderes'
case else
'ungültiger Befehl
End select
end if
So könnte das aussehen. Ist natürlich schwer, wenn man grade begonnen hat. Und was micht maßgeblich an dieser Sprache ärgert habe ich ja bereits verdeutlich. Sie ist stellenweise einfach dermaßen unlogisch und umständlich
_________________
[ Diese Nachricht wurde geändert von: DonComi am 1 Mai 2008 21:53 ]
|
BID = 521013
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
So, Hallo mal wieder.
Hänge jetzt noch bei einem anderen Problem, das momentan dringlicher ist. Ich möchte mit diesem Programm nämlich drei verschiedene Geräte steuern können.
Eines davon ist fertig implementiert, bei dem zweiten fehlt mir nur noch die (in den letzten Beiträgen durchgekaute) Statusabfrage, die ich leider immer noch nicht testen konnte.
Das dritte ist ein DVD-Player.
An diesen möchte ich Play, Pause und Skip senden können. Das klappt bereits.
Nun mein Problem: Auch von diesem möchte ich den Status (Play, Pause, Stop bzw. keine Kommunikation mit dem Gerät) angezeigt bekommen über zwei Leds.
Ich wollte es eigentlich wie bei den Beamern auch probieren, dass ich alle 1-2 Sekunden eine Statusabfrage mache.
Jetzt habe ich das Problem, dass der DVD-Player ständig irgendwelche Messages verschickt (End of Track usw...), wodurch ich irgendwie immer falsche Rückmeldungen auf die Statusabfrage bekomme (noch irgendwelche Bytes im Buffer...)
Ich habe es schon über Clear SerialIn versucht, aber irgendwie hat auch das (bisher) nicht funktioniert.
Nun war meine Überlegung, Die Meldungen des Players auszuwerten, und daraus den Status auf die Leds zu übertragen.
Jetzt ist die Frage, ob ich dann im Interrupt-Betrieb arbeiten muss, oder im Buffered-Modus oder oder...
Hier bin ich (wieder mal) mit meinem Latein am Ende, und würde mich sehr über Tips freuen.
Ich werde selber auch weiter probieren, und Lösungen bzw. Ideen posten...
MfG,
Wolfgang
P.S.:
Der komplette Code kommt im nächsten Post, hab ich grad noch nicht zur Hand...
|
BID = 521235
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
So, im Anhang mein kompletter Code.
Ich freue mich über Verbesserungen, da dies wie gesagt mein erstes Programm ist...
Ciao,
P.S: Außerdem findet ihr im Anhang das Protokoll des DVD-Players...
WOlfgang
[ Diese Nachricht wurde geändert von: gang-himself am 12 Mai 2008 21:34 ]
[ Diese Nachricht wurde geändert von: gang-himself am 12 Mai 2008 21:36 ]
|
BID = 521341
KaiserV Gerade angekommen
Beiträge: 1 Wohnort: Pforzheim
|
Hi Wolfgang,
ich finde dein Projekt echt interessant und will auch versuchen so etwas nachzubauen, obwohl es schon reichen würde wenn ich meinen Beamer damit steuern kann, da es dann eh fest verbaut wird.
Naja da ich noch ein absoluter Anfänger bin (gut ein bisschen programmieren kann ich ^^) wollte ich mich nochmal vergewissern ob du das alles mit dem MyAVR Board (Conrad Nummer 190831 - 62) realisiert hast, bevor ich noch was falsches bestelle.
Was bräcuhte ich noch um loszulegen? Warscheinlich ein 0 Modem Kabel und einen 230V Wandler bzw. wie schließe ich da den Strom an?
Falls du oder auch jemand anders noch ein guten Tipp für einen Anfänger hat, freu mich über jede Hilfe.
Gruß
V. Kaiser
|
BID = 522222
gang-himself Gelegenheitsposter
Beiträge: 50 Wohnort: Regensburg
|
Hi KaiserV,
ja, auf dem MyAVR-Board (die LPT, RS232-Variante) ist alles notwendige verbaut. Sogar viel zu viel...
Programmiert hab ich in BASCOM-AVR, weil das eine komplette Entwcklerumgebung ist, die in der Demo-Version Programme bis 2k schreiben kann, was dir in diesem Fall dicke reicht...
Auf dem Board sind Spannungswandler verbaut, die mit einem Input von 9V DC arbeiten. D.h. ein billiges 9V-Netzteil und fertig...
Und ob NullmodemKabel oder ModemKabel hängt von dem verwendeten Beamer ab... (Sanyo/Eiki verwenden Nullmodemkabel)
Ciao,
Wolfgang
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 4 Beiträge verfasst © x sparkkelsputz Besucher : 182385993 Heute : 722 Gestern : 6874 Online : 819 24.11.2024 6:59 0 Besucher in den letzten 60 Sekunden ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.103364944458
|