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
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...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
Lesezeichen