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