PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Laufschrift mit Bascom



Jul-ian
12.03.2006, 10:57
Gestern habe ich mein 16*2-LCD erfolgreich mit meinem ATMega8 ansteuern können. Mit Bascom habe ich mir ein kleines Programm geschrieben und alles funktioniert soweit.
Jetzt meine Frage:
Ist es möglich mit Bascom eine Laufschrift zu programmieren?

Mit PHP könnte ich sowas recht einfach programmieren.
Ich habe halt den String und schneide die Zeichen 1-16 davon aus und zeige sie auf dem LCD-Display, nach einer kurze Wartezeit werden die Zeichen 2-17 ausgeschnitten und angezeigt usw.

x-ryder
12.03.2006, 11:12
jupp, das geht auch, dann nimmste die funktion MID() die macht aus nem string nen substring, das willst du doch mal schätze ich?

Martin

super_castle
12.03.2006, 11:47
www.sprut.de/electronic/lcd/ .......befehle zum steuern, auch von bascom aus nutzbar......

gandalf
13.03.2006, 22:10
Hallo Jul-Ian

Für eine Laufschrift verwendest du einfach den Befehl [glow=red:afd835059d] shiftlcd [/glow:afd835059d]
Schau mal in die Bascom Hilfe.

Hier hab ich das mal schnell bei meinem LCD ausprobiert:


'Laufschrift auf LCD
'Quick and Dirty from Gandalf


'LCD mit HD44780 kompatiblem Controller 4 Zeilen a 20 Zeichen
'Anschluß
'LCD Pin 1 = 0Volt (GND)
'LCD Pin 2 = +5 Volt (VDD)
'LCD Pin 3 = 0-5 Volt Kontrast (V0): Poti 10k zwischen 0V und 5V Schleifer an LCD3
'LCD Pin 4 = RS an PortA.2
'LCD Pin 5 = R/W an +5V
'LCD Pin 6 = E an Porta.3
'LCD Pin 7 = DB0 'frei
'LCD Pin 8 = DB1 'frei
'LCD Pin 9 = DB2 'frei
'LCD Pin 10 = DB3 'frei
'LCD Pin 11 = DB4 an Porta.4
'LCD Pin 12 = DB5 an Porta.5
'LCD Pin 13 = DB6 an Porta.6
'LCD Pin 14 = DB7 an Porta.7

'_________________________________________________ ____________

$crystal = 16000000
$regfile = "m16def.dat" ' Ich verwende AT Mega 16


Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5

Cls
Initlcd 'initialisiert das LCD

'--------------------------------------------------------------

Do 'Begin Hauptschleife
Cursor Off
Upperline 'setzt Cursor in die obere Zeile
Lcd "Schiebe Text"
Shiftlcd Left ' schiebt Text nach links
'Shiftlcd Right ' schiebt Text nach rechts
Waitms 300
Lowerline
Lcd "Gandalf made it!"
Waitms 300 'wartet 0,4 Sekunden

Loop 'erneut aufrufen
End

x-ryder
13.03.2006, 22:18
funzt aber nicht wirklich würde ich sagen, denn der schiebt das im ram rum, und irgendwann schiebt der das dann auch inne nächste zeile ^^

Martin

sebastian.heyn
14.03.2006, 14:04
Ich denke auch mit mid() nen substring zu bauen ist die realistischste variante. So mache ich es bei allen meiner lcds. Vorteil ist das du eine sub immer wieder verwenden kannst - ausser bei zb Nokia displays

Jul-ian
14.03.2006, 21:45
Ich bin mit meinem Lauflicht noch kein Stück weiter.

Gibt es irgendwo eine Dokumentation, welche Befehle Bascom kennt und wie man diese verwendet?

Ist es eigentlich möglich mit Bascom auch System-Informationen oder z.B. den aktuellen Track in Winamp an das LCD zu senden?

x-ryder
14.03.2006, 21:48
... nein ... zum glück :cheesy: sonst wärs schon genauso kaputt, wie alles andere an windows ^^

aber kannst kein englisch? iss doch inner dokumentation drin

Martin

Jul-ian
14.03.2006, 22:52
Meine Englisch-Kenntnisse sind eigentlich recht gut und zum Nachschlagen ist die Hilfe ganz ok.
Aber sobald ich eine bestimmte Funktion suche bin ich aufgeschmissen oder muss mir nen Ast suchen.

Meine Laufschrift funktioniert schon. Aber es ist ein wenig viel gefuscht.



'Settings'
$regfile = "m8def.dat"
$crystal = 4000000
Config Lcd = 16 * 2

'Input/Output'
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4

'Program'

Do
Cls
Dim I As Byte
Dim S As String * 21 , Z As String * 21
S = " JULIAN"
I = 1
Upperline
While I <= 22
Cls
Locate 1 , 1
Z = Right(s , I) : Lcd Z
Incr I
Waitms 500
Wend
Loop
End


Ich suche jetzt noch drei Funktionen:
- zum ausschneiden bestimmter Zeichen aus einem String
- zum Zählen der Zeichen eines Strings
- Anfügen von Leerzeichen vor oder nach einem String

Kann mir da jemand weiterhelfen?

sebastian.heyn
15.03.2006, 08:02
die befehle sind in vielen basics eigentlich sehr ähnlich

ausschnittstring=MID(string,anfangsposition,anzahl _der_zeichen)

länge=len(string)

neuer_string=" "+string+" "

Jul-ian
15.03.2006, 12:41
Ich hab das Programm mal ein wenig erweitert.
Mit einem Schalter kann ich nun entscheiden, ob es von links anch rechts oder umgekehrt laufen soll.
Wegen der Laufzeit des Programms merkt man eine Änderung am Schalter erst, wenn eine der While-Schleifen durchgelaufen ist. Das macht mir aber nichts.
Dafür habe ich aber ein anderes Problem:
In der ersten Zeile läuft die Schrift, aber in der zweiten soll dauerhaft "Links n. Rechts" oder "Rechts n. Links" je nach Schalterstellung eingeblendet werden.
So wie ich es aktuell im Programm stehen hab, blinkt es nur gaaaanz kurz auf (ist ja auch logisch). Kann ich sowas auch dauerhaft anzeigen?

Mein Programm:


'Settings'
$regfile = "m8def.dat"
$crystal = 4000000
Config Lcd = 16 * 2

'Input/Output'
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Config Portc.0 = Input
Config Portc.1 = Output
Portc.0 = 1

'Program'
Cls
Dim I As Integer
Dim L As Integer
Dim S As String * 6
Dim T As String * 22
Dim Z As String * 22
S = "JULIAN"


Do
Cls
If Pinc.0 = 1 Then
Portc.1 = 1
Locate 2 , 1
Lcd "Links n. Rechts"
T = " " + S
L = Len(t)
I = 1
While I <= L
Cls
Locate 1 , 1
Z = Right(t , I) : Lcd Z
Incr I
Waitms 200
Wend
Wait 1
Else
Portc.1 = 0
Locate 2 , 1
Lcd "Rechts n. Links"
T = " " + S
L = Len(t)
While L > -1
Cls
Locate 1 , 1
Z = Right(t , L) : Lcd Z
Decr L
Waitms 200
Wend
Wait 1
End If
Loop
End

x-ryder
15.03.2006, 13:54
wie wärs, wenn du das cls rauslässt, und einfach die erste zeile mit nem locate ... : lcd " " überschreibst? ^^

Martin

Jul-ian
15.03.2006, 14:07
Jetzt wo du's sagst ... =)