Moin Leute,
wollt mal fragen, ob sich schonmal jemand mit dem DALI-Protokoll beschäftigt hat? Über den DALI-BUS kann man Lampen per digitalem Signal steuern/dimmen. Ich habe schon fertige Programme gesehen, die dies können und auch in LabVIEW erstellt wurden. Ich tu mich aber leider etwas schwer mit dem Thema , da ich noch nicht viel mit LabVIEW gearbeitet habe
. Mich würde intressieren, ob jemand mal nen VI entwurfen hat, auf dem man aufbauen kann.
Wäre halt cool, wenn jemand mal ne Idee hat, wie man die Commandos dynamisch erstellt. Außerdem bin ich noch nicht so ganz fit, was die Signalausgabe betrifft. Ich stelle mir vor, dass man das Signal seriell ausgibt. Ein Befehl besteht aus 19bit bei 1200bit/s. Ich kann zwar die Sendeleitung (TX) high und low setzten
, doch wie gebe ich eine ganze Serie von bits aus?
Kann man der seriellen Schnittstelle auch sagen, mit welcher Spannung das Signal ausgegeben werden soll, oder hängt das vom PC Typ ab? Z.B. meine ich, dass mein Laptop +-6V ausgibt für High und Low. Das benötigte Signal liegt aber bei <6,5V (L) und >9,5V (H). Klar könnte man die Spannung über eine Elektronik hochsetzten, wäre doch aber per Software befehl sicherlich einfacher.
Danke für eure Antwort
' schrieb:...
Wäre halt cool, wenn jemand mal ne Idee hat, wie man die Commandos dynamisch erstellt. Außerdem bin ich noch nicht so ganz fit, was die Signalausgabe betrifft. Ich stelle mir vor, dass man das Signal seriell ausgibt. Ein Befehl besteht aus 19bit bei 1200bit/s. Ich kann zwar die Sendeleitung (TX) high und low setzten, doch wie gebe ich eine ganze Serie von bits aus?
Mit einer Schleife, die das Bitarray deines Signals an die RS232 schreibt.
Das Problem wird nur sein das Du die 1200bit/s nicht so ohne weiteres ohne lowleveltreiber in LV erreichst. Denn LV hat eine Zykluszeit (Sprich kleinste nutzbare Zeiteinheit von 1ms).
Und die RSR232 funktionen von VISA können WIMRE nur 8bit +1start/stopp-bit, dafür aber bis 115kbit/s
Zitat:Kann man der seriellen Schnittstelle auch sagen, mit welcher Spannung das Signal ausgegeben werden soll, oder hängt das vom PC Typ ab? Z.B. meine ich, dass mein Laptop +-6V ausgibt für High und Low. Das benötigte Signal liegt aber bei <6,5V (L) und >9,5V (H). Klar könnte man die Spannung über eine Elektronik hochsetzten, wäre doch aber per Software befehl sicherlich einfacher.
Nein das geht nicht so einfach, nach dem RS232 Standard sollten es AFAIK >+-7V sein.
Was spricht denn gegen einen µC der einen UART für den DALI-Bus nutzt und auf der anderen seite eine "normale" RS232 od. USB od. Ethernet hat?
Gruß, Rob
Ja gut, geht dann wohl nicht ohne µC. Hab da auch schon ne Idee. Ist halt extra Aufwand und extra Kosten.
Aber wie kann man denn bestimmte Befehle per Seriell ausgeben?
Das VISA VI nimmt Strings an und gibt die dann ja auch irgendwie aus. Wie kann man denn jetzt nen Befehl setzten der aus einem Binärwort besteht. Z.B. 1010 usw. Gibt man dann den String in Hex an oder wie funktioniert das. Es gibt da ja auch so nen LabVIEW Beispiel "Seriell Write and Read.VI". Da wird folgender String ausgegeben: *IDN?rn. Was soll ich denn mit *IDN anfangen? Soll man da nen Hexwert eintippen, der dann 1010usw bedeutet?
' schrieb:Ja gut, geht dann wohl nicht ohne µC. Hab da auch schon ne Idee. Ist halt extra Aufwand und extra Kosten.
Aber wie kann man denn bestimmte Befehle per Seriell ausgeben?
Das VISA VI nimmt Strings an und gibt die dann ja auch irgendwie aus. Wie kann man denn jetzt nen Befehl setzten der aus einem Binärwort besteht. Z.B. 1010 usw. Gibt man dann den String in Hex an oder wie funktioniert das. Es gibt da ja auch so nen LabVIEW Beispiel "Seriell Write and Read.VI". Da wird folgender String ausgegeben: *IDN?rn. Was soll ich denn mit *IDN anfangen? Soll man da nen Hexwert eintippen, der dann 1010usw bedeutet?
Da wird halt jedes ASCII-Zeichen im String nacheinander als binärwärt übertragen
Bau doch mal ne Schleife, die dir die Werte von 0..255(dez)=0..FF(hex) auf die RS232 ausgibt. Dann kann man das mit dem Oszi gut erkennen.
Das "*IDNrn" ist der SCPI-Befehl für ein MEssgerät, welches SCPI kann, sich zu identifizieren. Also praktisch ein "Hallo, Wer da?" des PCs in einer Sprache die viele Geräte kennen.
Gruß, Rob
' schrieb:Da wird halt jedes ASCII-Zeichen im String nacheinander als binärwärt übertragen
Bau doch mal ne Schleife, die dir die Werte von 0..255(dez)=0..FF(hex) auf die RS232 ausgibt. Dann kann man das mit dem Oszi gut erkennen.
Das "*IDNrn" ist der SCPI-Befehl für ein MEssgerät, welches SCPI kann, sich zu identifizieren. Also praktisch ein "Hallo, Wer da?" des PCs in einer Sprache die viele Geräte kennen.
Gruß, Rob
Ja OK, klar werden bei Seriell die Daten nacheinander übertragen. Ich werd dann man ne Schleife bauen und das Oszi bemühen. Danke für die Infos
Also ich werd noch nicht so richtig schlau aus LV.
Visa:Schreiben überträgt jedes Stringzeichen als ASCII.
D.h. wenn ich im String eine 0 eingebe, dann sieht LV eine 30h oder 48dez. und gibt 110000 aus. Ich will aber, dass LV den Binärwert für ein bestimmten Hexwert oder Dezimalwert ausgibt. Ich geb z.B. 14D5FDCD vor und LV baut daraus ne Menge Einsen und Nullen. Wenn ich aber diesen Hexwert in den Taschenrechner eingebe, dann kommt aber was anderes raus, als ich am Oszi sehen kann. Mal davon abgesehen, dass das Binärwort auch noch so dargestellt wird, dass das LSB am Anfang steht, natürlich nach dem Startbit
. BSP: 30h=110000->am Seriellen PIN3=Startbit
000011Stoppbit.
Und gleich noch ne Frage hinterher:
ich gebe mit dem VISA String "CD" aus, was in Hex 43+44 bedeutet. Wie schon gesagt, bekomme ich die Werte mit dem LSB voran ausgegeben, zwischen den Werten wird wieder ein Start- und Stoppbit gesetzt. Kann man vermeiden, dass Start-und Stoppbit zwischendurch gesetzt werden, sodass er 43 und 44 als eine Bitfolge ausgibt? Muss man da mit Abschlusszeichen arbeiten?
Kann da mal jemand ne Info zu schreiben. DANKE
OK, ich komm der Sache näher!!
Wichtig ist, wenn man was in den "VISA:Schreiben String" schreiben möchte, dass man vorher beim Eingabe String den Haken für "Hexadezimalanzeige" setzt. Dann liest das Tool auch super den Hexwert. Und Hexwerte sind viel praktischer als ASCII!!!
Doch leider ist die Ausgabe auf 8bit beschränkt, wenn man 2 Bytes ausgeben möchte, schiebt LV immer ein Start- und Stoppbit zwischen die Werte. (BSP: siehe oben)
Wenn man jetzt die beiden Bytes noch in nen Array oder Puffer schreiben könnte, dann könnt man auch sicherlich alles aufeinmal ausgeben.
Nochmal zur Info, DALI besteht aus 19bit, also
1Start
8Adresse
8Commando
2Stopp
Aber das Problem löst sich sicherlich auch noch.
Gruß aus dem Badenländle
Hmm, das DALI Problem hat sich leider noch nicht wirklich gelöst. Aber ich hab mir gerade mal ein WinDim Kabel und die WinDim Software 4.0e ausgeliehen. Hier kann man sehr schön sehen, wie die das mit ihrer Software machen. Ich kann zwar am Oszi die 19bit vom DALI-Protokoll nicht so richtig erkennen, aber man kann das Signal schön mit LV nachbauen und sogar die Lampen steuern. Eine einfache Hex-Seriell Ausgabe und die Lampen funzen. Für alle die noch Intresse an diesem WinDim Kabel haben sei gesagt, dass dieses 300,-EUR teure Kabel nix besonderes ist. Dieses Kabel hat einen seriellen Anschluss. Im Stecker befindet sich ein wenig Elektronik, und zwar
eine Drossel
ein High and Low side driver IR2101
ein PIC 14139e
ein paar Dioden, Kondensatoren und Widerstände.
Was an diesem Kabel 300,-EUR wert sein soll versteh ich nicht wirklich. Aber da hier ein PIC genutzt wurde, kann man dies wahrscheinlich nicht so einfach nachbauen. Aber mit ein wenig Zeit bekommt man das auch raus. So machen es die Chienesen schließlich auch.
Also ich bleib weiter am Ball
Gruß