PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kurioses Problem mit Scrolltext in Visual Basic



Goblin
09.02.2006, 18:02
Ja, ich habe wieder ein sehr kurioses Problem im Angebot!
Folgendes: Ich habe mir nen Programm auf meinem Atmega geschrieben das über RS232 Texte empfängt und auf nem LCD darstellt. Man sendet den String und dann CR und LF und schon erscheint der Text auf dem Display. (Momentan benutze ich nur die erste Zeile, dazu später). Das funktioniert auch prima. Nun dachte ich mir: Scrolle ich mal nen Text über das Display. Ich hatte vor, in VB nen Prog zu schreiben, das ne Textdatei einliest und über das Display laufen lässt. Das Programm ist unten. Textdatei einlesen tu ich noch nicht (ist nur ne Formalität) sondern ich nehm erstmal nen String. Das ist der lange. Kurze Erklärung zum Code (Das Projekt ist im Anhang): Im Formular hab ich nur nen Button, das COM-Objekt und nen Timer. Der Button startet den Timer und der Timer scrollt. Ich schneide mit "mid" das passende Stück des Strings raus und Incrementiere die Mid-Werte. Dann gibts noch ne Abbruchbedingung. Denke das leuchtet jedem ein. Das ganze ist jetzt nicht hochentwickelt, darum gehts hier auch nicht.
Das Problem ist jetzt folgendes:
Der Text wird in Zeile 1 des Display prima durchgescrollt. Zeile 2 ist in der Firmware auf dem Atmega eigentlich auch noch vorgesehen, aber ich hab sie der Einfachkeit halber für den Scroller deaktiviert. Nur: Das Scrollen wird immer langsamer, bis ca. Mitte des Strings. Dann wird der Text wieder schneller und hat gegen Ende des Strings wieder seine Anfangsgeschwindigkeit. Das passiert immer wieder. Also liegts nicht daran, dass an der Hardware was heissläuft oder so... Aber woran liegts?

OK, dann sind halt keine *.rar-Files im Attachment erlaubt... Dann gibts das Projekt halt Hier (http://wwwhomes.uni-bielefeld.de/jhartmann2/scroller.rar) *beleidigtsei* ;)



Dim a, out As String
Dim i As Integer

Option Explicit



Private Sub Command2_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
a = "++++++++++++++goblins ultimativer teststring zum testen des lcd-scrollers programmiert in visual basic (ätz)+++++++++++++++++++"
i = 1
Com.PortOpen = False Then
Com.CommPort = 1
Com.Settings = "4800,N,8,1"
Com.PortOpen = True
Com.RThreshold = 1
Com.InputLen = 1
End Sub

Private Sub Timer1_Timer()
out = Mid(a, i, i + 15)
Com.Output = out & Chr(13) & Chr(10)

i = i + 1
If i > Len(a) - 15 Then i = 1
End Sub

Goblin
10.02.2006, 17:16
tjaaaa, da fällt euch nix mehr ein, oder? ich wette die lösung des problems ist total einfach.... nur komm ich nicht drauf.. kenne mich auch glücklicherweise mit vb ned so aus. wenn der hardwarezugriff in java doch ned so kompliziert wäre....

T-Moe
10.02.2006, 18:31
Ich würd aus

Com.PortOpen = False Then

ein

IF Com.PortOpen = False Then

machen. Mehr fällt mir aber net ein! Ohne scrollen funzts?

Goblin
10.02.2006, 19:46
oh, die zeile gehört gelöscht. hab ich hier vergessen. die abfrage ist überflüssig. was heißt ohne scrollen funzts... es scrollt ja auch prima. nur ist da halt die geschwindigkeitsänderung die ich mir nicht erklären kann... vielleicht kommt es auch zu einer überlagerung zwischen der output-geschwindigkeit des pcs und dem prozessortakt des atmegas...