Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, habe den code gleich mal probiert.
hatte noch ein anderes problem, das mir vorher nicht aufgefallen ist (siehe bild) Portc ist bestimmt irgendwie durch was anderes belegt, habe portd genommen, jetzt ist die y-linie okay...
Was den code angeht scheint er nicht zu laufen...
Er zeichnet nur eine linie von 0/0 bis 0/30 (ca 1cm hoch)
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich hab mir jetzt mal selbst was zum Testen zusammen gestrickt.
Und bei mir läuft die Line-Sub.
Jedenfalls auf meinem ATmega32.
Ich musste das Programm etwas vereinfachen, damit
meine Testversion-Bascom mit dem Speicher auskommt.
Aber das Prinzip der Line-Routine ist geblieben.
Auf dem Prinzip kann man aufsetzen...
Die Line-Draw Routine werde ich in Assembler schreiben,
damit es richtig schnell wird.
@Sebastian: Testest du mal ?
Gruß Jan
Code:
$regfile = "m32def.dat"
$crystal = 16000000
'#########Variablen Line Funktion
Dim Xs As Integer
Dim Xe As Integer
Dim Ys As Integer
Dim Ye As Integer
Dim Xlen As Integer
Dim Ylen As Integer
Dim Xa As Integer
Dim Ya As Integer
Dim Temp As Integer
Dim N As Byte
'#################################
Declare Sub Drawline()
Config Porta = Output
Config Portc = Output
'Z Alias Portf.1
'Z = 1 ' dunkel
Do
Restore Daten:
For N = 1 To 14
Read Xs
Read Ys
Read Xe
Read Ye
Call Drawline()
Next
Loop
End
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:
' Z = 0 'licht einschalten
Temp = Xlen
Shift Temp , Right , 1
Do
Porta = Low(xs)
Portc = Low(ys)
Waitus 1
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:
' Z = 0
Temp = Ylen
Shift Temp , Right , 1
Do
Porta = Low(xs)
Portc = Low(ys)
Waitus 1
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:
'Z = 1 'und 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%