De- Encoder für Types-Zustände

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

DeadDealer

Betreff: De- Encoder für Types-Zustände

BeitragSo, Apr 17, 2005 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Smile

Ich bastel grad an einem Hardwareprojekt, welches mit Code aus BlitzPlus laufen soll.
Hier der Thread dazu: http://www.moddinggods.de/wbb2...6&sid=
Das ganze soll Software-mäßig ähnlich laufen, wie die inpout32.dll:
Der dll wird z.B. ein Dezimalwert übergeben. Die setzt dann z.B. die Datenausgänge entsprechend. beim Wert 3 Ausgang 1 und 2, bei 255 alle 8 an.

Das "CLC-Projekt" besteht aus insgesamt fast 300 LEDs, die man alle einzeln ansteuern kann. jede LED wird in der Software durch ein eigenes Type-Element vertreten.

BlitzBasic: [AUSKLAPPEN]

Type lightRed
Field name$ ;Name des einzelnen Types
Field xPos# ;X-Position im Fenster
Field yPos# ;Y-Position
Field angle# ;für Positionsberechnung
Field size# ;Radius des Bildes
Field l_color ;Farbe des Bildes
Field image_on,image_off ;bilder des ein- und ausgeschalteten Types
Field space# ;nur wieder für position wichtig
Field active ;das hier sagt dem Type, welchen Zustand es hat/haben soll
End Type


Allein 240 davon bilden einen Leuchtkreis:

user posted image

Bei meinem "Umwandler" soll das genauso laufen wie bei der inpout32.dll, aber ich brauche größere Zahlen. Binärwerte fallen da rauß. Eine 60-stellige Binärzahl ergibt eine viel zu große Dezimalzahl, daher will ich direkt Dezimal- oder Hexadezimalwerte übergeben.
Daher soll jede LED einer Farbe einen HEX-Wert bekommen, somit einen ganz individuellen Zahlenwert. will man jetzt mehrere LEDs einschalten, müßte man nur die zugehörigen Werte addieren, und hätte einen einfach zu übergebenen HEX-Wert wie 123DEF bla bla

BlitzBasic: [AUSKLAPPEN]

;initiieren
clc_initiate(lpt1,blabla)

;alles aus
clc_allOff()

;rote LEDs 1-x einschalten
clc_turnOn_HEX(123ABC)

;rote LED 9 ebenfalls einschalten
clc_addOn_HEX(A9)

...............

ich bräucht dann aber noch eine Funktion, die mir aus diesem Gesamtwert wieder sagt, welche LEDs an, und ausgeschaltet werden sollen. Als Endausgabe in Form von Hardware wird das ganze über den Parallelport mittels CLOCK und DATA Signal an Schieberegister weitergegeben, die dann die LEDs entsprechend schalten sollen.


Ich hoffe das war jetzt nicht zu kompliziert beschrieben. Bin im Moment noch in der Planung und hab nur bischen Code zum testen der Types.

Alfadur

BeitragSo, Apr 17, 2005 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich dich richtig verstanden, du übergibst zb den hexwert 173B2B und du willst dann das er dann zb aus der 17 die stunden liest, aus 3B die minuten und 2B die sekunden?

dann versuch mal das :

BlitzBasic: [AUSKLAPPEN]

Function time(Hexwert)
stunden=(hexwert And $FF0000)/$10000
minuten=(hexwert And $FF00)/$100
sekunden=hexwert And $FF
Print stunden+\":\"+minuten+\":\"+sekunden
End Function


time($173B2B)

WaitKey()



falls ich dich nich richtig verstanden habe, vergiß es einfach .-)
A Cray is the only computer that runs an endless loop in less than four hours.
 

DeadDealer

BeitragSo, Apr 17, 2005 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Alfadur hat Folgendes geschrieben:
hab ich dich richtig verstanden, du übergibst zb den hexwert 173B2B und du willst dann das er dann zb aus der 17 die stunden liest, aus 3B die minuten und 2B die sekunden?

dann versuch mal das :

BlitzBasic: [AUSKLAPPEN]

Function time(Hexwert)
stunden=(hexwert And $FF0000)/$10000
minuten=(hexwert And $FF00)/$100
sekunden=hexwert And $FF
Print stunden+\":\"+minuten+\":\"+sekunden
End Function


time($173B2B)

WaitKey()



falls ich dich nich richtig verstanden habe, vergiß es einfach Wink


nicht ganz so. das was ich brauche, ist noch banaler. Die Zeitberechnung steht schon, nur ergibt sich in der Ansteuerung der LEDs ein großes Problem. Ich zeig mal ein anderes Pic:

user posted image

soweit sogut, die Zeit wird angezeigt. die weißen LEDs sind nur als Stundensegmente da, aber der im Moment dazu gehörende Code ist einfach sch*** ... ach seht es euch selbst an Wink

BlitzBasic: [AUSKLAPPEN]

; White lights (hour marks)
For w.lightW = Each lightW
w\xPos# = centerX+((spaceMin+w\space)*Cos(w\angle + angleLocal ))
w\yPos# = centerY+((spaceMin+w\space)*Sin(w\angle + angleLocal ))
If showTime_toggle=1 Then
If w\name=\"W60\" Or w\name=\"W1\" Or w\name=\"W2\" Or w\name=\"W5\" Or w\name=\"W6\" Or w\name=\"W7\" Or w\name=\"W10\" Or w\name=\"W11\" Or w\name=\"W12\" Or w\name=\"W15\" Or w\name=\"W16\" Or w\name=\"W17\" Or w\name=\"W20\" Or w\name=\"W21\" Or w\name=\"W22\" Or w\name=\"W25\" Or w\name=\"W26\" Or w\name=\"W27\" Or w\name=\"W30\" Or w\name=\"W31\" Or w\name=\"W32\" Or w\name=\"W35\" Or w\name=\"W36\" Or w\name=\"W37\" Or w\name=\"W40\" Or w\name=\"W41\" Or w\name=\"W42\" Or w\name=\"W45\" Or w\name=\"W46\" Or w\name=\"W47\" Or w\name=\"W50\" Or w\name=\"W51\" Or w\name=\"W52\" Or w\name=\"W55\" Or w\name=\"W56\" Or w\name=\"W57\" Then
showLightMarks=1
Else
showLightMarks=0
EndIf
Else
showLightMarks=0
EndIf
selectImage(w\name,w\image_off,w\image_on,w\xPos,w\yPos,mouseCursor,MouseX(),MouseY(),0,showLightMarks)
Next


Die einzelne Zeile unter If showTime_toggle=1 Then ist mir ein Dorn im Auge! Beim Durchlaufen kontrolliert die Schleife jede einzelne LED, ob sie an sein soll. Funktioniert, aber totaler Code-Salat *g*

Machen wir mal ein einfaches Dezimal-Rechenbeispiel, wie es aussehen sollte:

BlitzBasic: [AUSKLAPPEN]

; Werte für einzelne LEDs
white1=1
white2=2
white3=3
;...

;LEDs 1,8 und 25 sollen an sein
whiteGet=white1+white8+white25 ;ergibt als Gesamtwert 34

Function clc_turnOn(getLights,LightColor$=\"white\")
;hier sollen jetzt alle Types des Typs \"weiße LEDs\" durchgegangen werden und entsprechend dem Wert \"getLights\" ein- und ausgeschaltet werden
End Function

clc_initiate(lpt1,blagngn)
clc_turnOn(34) ;LED 1, 8 und 25 gehen an, alle anderen aus

BladeRunner

Moderator

BeitragSo, Apr 17, 2005 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst da nicht um Binäre Schalter herumkommen, denn dein obiges Beispiel kann ja so nicht funktionieren.
Wenn du "3" hast, schaltet er nun nummer 3 an? oder nummer 1+ nummer 2?
Daher musst du wohl 2 Ints als flags nehmen, dann hättest du 64 bit Speicherbandbreite.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

DeadDealer

BeitragSo, Apr 17, 2005 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Du wirst da nicht um Binäre Schalter herumkommen, denn dein obiges Beispiel kann ja so nicht funktionieren.
Wenn du "3" hast, schaltet er nun nummer 3 an? oder nummer 1+ nummer 2?
Daher musst du wohl 2 Ints als flags nehmen, dann hättest du 64 bit Speicherbandbreite.

Stimmt das habe ich oben nicht beachtet. Dann werd ich das wohl mit binären Werten machen müßen Crying or Very sad

stfighter01

BeitragSo, Apr 17, 2005 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ichs richtig verstanden habe:
deine uhr soll direkt über eine schnittstelle durch den PC geschaltet werden.
allerdings willst du keine schnittstelle mit 60 bit od. mehr (verständlich)

ich würds so machen:
einfach getaktet die information für jedes led schicken welches eingeschaltet (bzw. ausgeschaltet) werden soll
z.b.: die inneren leds sind v. 1-60, die grünen v. 61-120 die blauen v. 121-180 u. die weissen v. 181-240.
Also schickts du 40 u. das 40ste rote led gehts an.
bzw.: um es wieder zu löschen schickst du 40+512.

[edit]
wenn du das ordentlich schnell taktest, sollte das ganze auch flüssig aussehen.
[edit]

damit kämst du mit einer 10(16) :/ bit schnittstelle aus.


hoffe ich hab deine absichten nicht missverstanden.


mfg stfighter
Denken hilft!

Vertex

BeitragSo, Apr 17, 2005 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es eher anders machen, wo nur eine 8 Bit Schnittstelle wie LPT ausreicht.

Die ersten 2 Bit geben den Typ der Synchronisation an.
00 -> Sekunden
01 -> Minute
10 -> Stunde
11 -> Unbenutzt

Die restlichen 6 Bit geben dann den jeweiligen Wert an. 2^6 = 64. Sekunden und Minuten gehen nur von 0 bis 59, Stunden nur von 0 bis 23(bzw. bei der Anzeige bis 11). Reicht also völlig aus.

Blitz müsste halt jede Sekunde 00Sekunde, jede Minute 01Minute und jede Stunde 10Stunde versenden.

mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Mo, Apr 18, 2005 0:37, insgesamt einmal bearbeitet
 

DeadDealer

BeitragSo, Apr 17, 2005 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, daß die Hardware nicht nur die Uhrzeit anzeigen soll Wink
Später soll man auch Spiele oder ne Pegelanzeige für Winamp haben, da klappt das nicht mehr mit so einfachen Mitteln. Da muß man jede einzelne LED kontrollieren können
 

DeadDealer

BeitragSo, Apr 17, 2005 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Du wirst da nicht um Binäre Schalter herumkommen, denn dein obiges Beispiel kann ja so nicht funktionieren.
Wenn du "3" hast, schaltet er nun nummer 3 an? oder nummer 1+ nummer 2?
Daher musst du wohl 2 Ints als flags nehmen, dann hättest du 64 bit Speicherbandbreite.


Hab das so umgesetzt:
BlitzBasic: [AUSKLAPPEN]

Global wert1%=2^30
Global wert2%=2^30

Print Str(wert1)+\"_\"+Str(wert2)
;Ausgabe: 1073741824_1073741824

Print Str(Bin(wert1))+\"_\"+Str(Bin(wert2))
;Ausgabe: 01000000000000000000000000000000_01000000000000000000000000000000

WaitKey()

dann könnt ich mit ner for-schleife und Mid() die einzelnen bit auslesen und übertragen.
Sowas hab ich mir vorgestellt, danke Smile
Mal sehen wie das in der Praxis umzusetzen ist, aber wird schon passen oder passend gemacht Wink
 

Absoluter Beginner

BeitragSo, Apr 17, 2005 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
wird das sowas hier? Smile
user posted image

Zitat:
dann könnt ich mit ner for-schleife und Mid() die einzelnen bit auslesen und übertragen


es geht schneller,aber dafür nur mit 32bit
bit = wert and (1 shl stelle)
stelle binär gesehen , also ganz rechts 0te stelle, 2. von rechts 1. stelle usw
Error Inside!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group