Hallo,
Ich habe 100k und 47k.
Hatte gerade nix anderes in der Menge da.
Ich bin aber erstaunt wie gut es sogar mit diesem
Primitiv-DA-Wandler geht. :-)
Ok, schauen wir morgen mal weiter...
Gruß Jan
Druckbare Version
Hallo,
Ich habe 100k und 47k.
Hatte gerade nix anderes in der Menge da.
Ich bin aber erstaunt wie gut es sogar mit diesem
Primitiv-DA-Wandler geht. :-)
Ok, schauen wir morgen mal weiter...
Gruß Jan
Heeyy, mit so einem DA wandler kann man richtig was anfangen (ich kann mich dran erinnern das es mal eine software gab, die damit sound auf dem LPT1 ausgegeben hat, grins)
Also es Läuft suupi. bei mir sieht es allerdings etwas gepunkterer aus, stört mich aber nicht...
Jetzt werde ich mal versuchen die zahlen zu definieren, und eine prozedur zu machen, die offsets mit einrechnet, um die buchstaben/zahlen an beliebige stellen zu positionieren...
Kennt jemand ein vektorprogramm, in dem man evtl auf die schnelle einen zeichensatz erstellen könnte? (oder nehm ich paint?)
Hallo,
Vieleicht sollten wir das etwas vereinheitlichen,
damit nicht so viele Zahlen übergeben werden müssen.
Ich schlage vor zunächst 4 Subroutinen zu definieren:
1. Move(x,y) - bewegt den Strahl unmittelbar auf Punkt x,y ohne eine Linie zu ziehen.
2. Drawabs(x,y) -Zieht eine LInie von der aktuellen Position nach Position x,y
3. Drawrel(x,y) - Zieht eine Linie relativ zur aktuellen Position, also x,y Punkte weiter.
4. Drawobj(Adresse von obj) - Zeichnet ein Objekt auf der aktuellen Position.
Objekt könnte z.B ein Buchstabe oder ein Raumschiff sein
Das Objekt besteht aus relativen sichtbaren und unsichtbaren Linien.
z.B. so:
x,y,0 - unsichtbare Linie von akt.Position
x,y,1 - sichbare LInie
x,y,1 - noch 'ne sichtbare
x,y,9 -letzte (sichtbare) Linie - ende Objekt
Damit könnte man schon mal eine Menge anfangen.
Die Zahlen würdest du als Objekte definieren.
Nur ein Vorschlag...
Gruß Jan
Hi,
also das ganz in kleine unterprogramme aufzuteilen ist ne gute idee, weil das die arbeit hinterher schön einfach macht! Willst du die Z achse mitbenutzen, oder lassen wir sie weg, und der Strahl ist immer ungedimmt? Damit das nachbauen mit den vielen verschiedenen Prozessoren schneller geht habe ich mal den deklarationsteil geändert. X und Y sind direkte aliasse von den ports und können auch so gesetzt werden.
@jan: für vorschläge was die hardwarelösung angeht bin ich zu haben, lasse nächste woche einen prototypen fertigen und habe noch platz auf dem board.
Code:
X Alias Porta
Y Alias Portd
Z Alias Portf.1 'wenn z=0 dann ist der punkt sichtbar, wenn z=1 then ist der punkt aus
Config X = Output
Config Y = Output
Hallo,
Die Z-Achse ist schon irgendwie mit drin.
Move-Befehle sind mit Z=Aus.
Draw-Befehle sind mit Z=An.
Objekte haben in der letzten Zahl 0 oder 1 für Z.
Die Harwarelösung wird so schnell nicht gehen.
Ich muss das selbst erst aufbauen und testen.
Wer weiss, ob das überhaupt so geht, was ich mir da überlegt habe.
OK, ich hab 'ne Menge von dem VECTREX abgeguckt,
und da ging es ja auch...
Mit den Alias für die Ports, das finde ich gut.
Gruß Jan
MMHH oder wir ziehen das jetzt einfach so wie es ist durch....
habe jetzt erstmal ein wenig ordnung gemacht...
Die subs move und showdot sind dazugekommen, generell übergebe ich keine variablen an die subs (wenn jemand anders drüber denkt bitte mitteilen)
Code:$regfile = "m128def.dat"
$crystal = 16000000
'######### Variablen Hauptprogramm
Dim Xs As Integer
Dim Xe As Integer
Dim Ys As Integer
Dim Ye As Integer
'######### Variablen Line Funktion
Dim Xlen As Integer
Dim Ylen As Integer
Dim Xa As Integer
Dim Ya As Integer
Dim Temp As Integer
Dim N As Byte
'########### Deklarationsteil für Subroutinen
Declare Sub Drawline
Declare Sub Move
Declare Sub Showdot
'########### Deklarationsteil für Ports
X Alias Porta
Y Alias Portd
Z Alias Portf.1 'wenn f=0 dann ist der punkt sichtbar, wenn f=1 then ist der punkt aus
Config X = Output
Config Y = Output
'################# Start Hauptprogramm
Z = 1 ' dunkel
Do
Restore Daten:
For N = 1 To 14
Read Xs
Read Ys
Read Xe
Read Ye
Call Drawline
Next
Loop
End
'################# Ende Haputprogramm; beginn subroutinen
'#############################################################################################################
Sub Drawline
'Längen für x und y ausrechnen
Xlen = Xe - Xs
Ylen = Ye - Ys
'Schrittrichtung für x und Y festlegen
If Xlen >= 0 Then Xa = 1 Else Xa = 255
If Ylen >= 0 Then Ya = 1 Else Ya = 255
'wenn xlänge grösser ist, dann laufen wir an der X-Achse entlang
' ansonsten an der Y-Achse
If Xlen < 0 Then Xlen = Xlen * -1
If Ylen < 0 Then Ylen = Ylen * -1
If Xlen < Ylen Then Goto Walky
Walkx:
Temp = Xlen
Shift Temp , Right , 1
Do
Call Move 'position setzen
Call Showdot 'punkt zeigen
Xs = Xs + Xa ':immer einen Schritt in x-Richtung weiter
Temp = Temp - Ylen ';Schritt in Y-Richtung nötig ?
If Temp <= 0 Then ';wenn <=0 dann ja
Temp = Temp + Xlen ';
Ys = Ys + Ya ';Schritt in Y-Richtung
End If
Loop Until Low(xs) = Low(xe) ';Wiederholen bis Ende der Linie
Goto Endofsub
Walky:
Temp = Ylen
Shift Temp , Right , 1
Do
Call Move 'position setzen
Call Showdot 'punkt zeigen
Ys = Ys + Ya
Temp = Temp - Xlen
If Temp < 0 Then
Temp = Temp + Ylen
Xs = Xs + Xa
End If
Loop Until Low(ys) = Low(ye)
Endofsub:
End Sub
'######################################################################################################################
Sub Move 'Bewegt den punkt gedimmt zu der angegebenen position (xs,ys)
X = Low(xs) 'x setzen
Y = Low(ys) 'y setzen
End Sub
'######################################################################################################################
Sub Showdot 'zeigt den punkt an seiner aktuellen position an
Z = 0 'licht ein
Waitus 2 'kurz warten
Z = 1 'lich wieder aus
End Sub
'#####################################################################################################################
Daten:
Data 0% , 0% , 200% , 0%
Data 200% , 0% , 200% , 200%
Data 200% , 200% , 0% , 200%
Data 0% , 200% , 0% , 0%
Data 20% , 20% , 180% , 80%
Data 180% , 80% , 80% , 180%
Data 80% , 180% , 20% , 20%
Data 100% , 120% , 80% , 120%
Data 80% , 120% , 80% , 100%
Data 80% , 100% , 90% , 100%
Data 90% , 100% , 100% , 90%
Data 100% , 90% , 100% , 80%
Data 100% , 80% , 90% , 70%
Data 90% , 70% , 80% , 70%
Die drawabs und drawrel können ja auf drawline basieren und dürften relativ schnell realisiert sein. also wenn man global mit xs und xe bzw ys und ye arbeitet ist xe und ye ja einfach auszurechnen... werde ich denke ich nachher mal machen
Genau, ich seh schon - du hast das drauf... :-)Zitat:
Die drawabs und drawrel können ja auf drawline basieren und dürften relativ schnell realisiert sein
Wichtig ist nur: Hinterher ist xs,ys das vorherige xe,ye.
Die Variablen xs,ys,xe,ye und auch z global zu definieren,
finde ich auch gut so, das spart ne Menge Speicher und
Rechenzeit.
Wenn ich nachher nach Hause komme, werd ich mich dann
mit Drawobj befassen, damit von mir auch noch was kommt.
Gruß Jan
Habe es nun doch mit lokalen variablen gemacht, spart überlegungen und somit dass ich immer fragen guckend auf meinen monitor starre *G*
Drawabs und drawrel sind drin.
(achja ich habe die verstärkung am oszi verstellt, deshalb ist das objekt auf dem bild so dammed klein)
Code:'#################################################################################################################
'#################### Achtung stack einstellungen verdoppeln!! ###################################################
'#################################################################################################################
$regfile = "m128def.dat"
$crystal = 16000000
'######### Variablen Hauptprogramm
Dim Xh1 As Integer
Dim Xh2 As Integer
Dim Yh1 As Integer
Dim Yh2 As Integer
Dim Aktx As Integer 'aktuelle x position
Dim Akty As Integer 'aktuelle y position
'######### Variablen Line Funktion
Dim Xlen As Integer
Dim Ylen As Integer
Dim Xa As Integer
Dim Ya As Integer
Dim Temp As Integer
Dim N As Byte
'########## Hilfsvariablen für drawrel
Dim Xr1 As Integer
Dim Yr1 As Integer
'########### Deklarationsteil für Subroutinen
Declare Sub Drawabs(byval X3 As Integer , Byval Y3 As Integer) 'Zeichnet vom aktuellen Punkt zu den angegebenen kordinaten eine linie
Declare Sub Drawrel(byval X2 As Integer , Byval Y2 As Integer) 'Zeichnet vom aktuellen Punkt zur relativen position eine linie
Declare Sub Drawline(byval Xs As Integer , Byval Ys As Integer , Byval Xe As Integer , Byval Ye As Integer)
Declare Sub Move(byval X1 As Integer , Byval Y1 As Integer)
Declare Sub Showdot
'########### Deklarationsteil für Ports
X Alias Porta
Y Alias Portd
Z Alias Portf.1 'wenn f=0 dann ist der punkt sichtbar, wenn f=1 then ist der punkt aus
Config X = Output
Config Y = Output
'################# Start Hauptprogramm
Z = 1 ' dunkel
Do
Call Move(50 , 50)
Call Drawrel(0 , 100)
Call Drawrel(100 , 0)
Call Drawrel(0 , -100)
Call Drawrel( -100 , 0) 'wieder bei 50,50
Call Drawabs(150 , 150)
Call Drawabs(100 , 200)
Call Drawabs(50 , 150)
Call Drawrel(100 , -100)
Loop
End
'################# Ende Haputprogramm; beginn subroutinen#########################################################
Sub Drawabs(byval X3 As Integer , Byval Y3 As Integer)
Call Drawline(aktx , Akty , X3 , Y3)
End Sub
'############################################################################################################
Sub Drawrel(byval X2 As Integer , Byval Y2 As Integer)
Xr1 = Aktx + X2
Yr1 = Akty + Y2
Call Drawline(aktx , Akty , Xr1 , Yr1)
End Sub
'#############################################################################################################
Sub Drawline(byval Xs As Integer , Byval Ys As Integer , Byval Xe As Integer , Byval Ye As Integer)
'Sub Drawline
'Längen für x und y ausrechnen
Xlen = Xe - Xs
Ylen = Ye - Ys
'Schrittrichtung für x und Y festlegen
If Xlen >= 0 Then Xa = 1 Else Xa = 255
If Ylen >= 0 Then Ya = 1 Else Ya = 255
'wenn xlänge grösser ist, dann laufen wir an der X-Achse entlang
' ansonsten an der Y-Achse
If Xlen < 0 Then Xlen = Xlen * -1
If Ylen < 0 Then Ylen = Ylen * -1
If Xlen < Ylen Then Goto Walky
Walkx:
Temp = Xlen
Shift Temp , Right , 1
Do
Call Move(xs , Ys) 'position setzen
Call Showdot 'punkt zeigen
Xs = Xs + Xa ':immer einen Schritt in x-Richtung weiter
Temp = Temp - Ylen ';Schritt in Y-Richtung nötig ?
If Temp <= 0 Then ';wenn <=0 dann ja
Temp = Temp + Xlen ';
Ys = Ys + Ya ';Schritt in Y-Richtung
End If
Loop Until Low(xs) = Low(xe) ';Wiederholen bis Ende der Linie
Goto Endofsub
Walky:
Temp = Ylen
Shift Temp , Right , 1
Do
Call Move(xs , Ys) 'position setzen
Call Showdot 'punkt zeigen
Ys = Ys + Ya
Temp = Temp - Xlen
If Temp < 0 Then
Temp = Temp + Ylen
Xs = Xs + Xa
End If
Loop Until Low(ys) = Low(ye)
Endofsub:
End Sub
'######################################################################################################################
Sub Move(byval X1 As Integer , Byval Y1 As Integer) 'Bewegt den punkt gedimmt zu der angegebenen position (xs,ys)
X = Low(x1) 'x setzen
Y = Low(y1) 'y setzen
Aktx = Low(x1) 'x setzen
Akty = Low(y1) 'y setzen
End Sub
'######################################################################################################################
Sub Showdot 'zeigt den punkt an seiner aktuellen position an
Z = 0 'licht ein
Waitus 2 'kurz warten
Z = 1 'lich wieder aus
End Sub
'#####################################################################################################################
Gute Arbeit, Sebastian !
Dein Programm läuft auch bei mir auf dem Mega32 einwandfrei.
Ich muss nur die Ports umsetzen, geht ja dank Alias sehr einfach.
Ich werde mich jetzt mal an die Objektdarstellung geben.
Es wird wohl sinnvoll sein, die Objekte auch drehbar zu machen.
Naja...Nächster Schritt... Eins nach dem Anderen...
Gruß Jan