-         

+ Antworten
Ergebnis 1 bis 2 von 2

Thema: Problem mit ansteuerung eines I²C LCDs.

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    27
    Beiträge
    1.461

    Problem mit ansteuerung eines I²C LCDs.

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi!

    Der Titel hört sich komplex an, ist aber eigentlich ein relativ "einfaches"
    Problem:

    Das LCD (2x20 Zeichen) wird über 2 PCF8574 gesteuert.
    Das funktioniert auch ganz gut. Ich habe gestern Abend eine Funktion
    geschrieben, die aus einem String n Zeichen ins LCD drucken soll.

    Wenn ich das ganze LCD vollschreiben will, dan schreibe ich meinen Text in "Lcdtext" und sage "printlcd(<anzahl zeichen>)"
    So.
    Die schleife soll dann n mal durchlaufen und die Zeichen per I²C in das
    LCD schreiben. Das funktioniert; aber nur bis zum ende der Ersten Zeile.

    Der Quelltext:


    '+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
    '| _MEECH_ HAUPRPROGRAMM |
    '| Copyright: Tobias Schlegel |
    '| Version 0.4 |
    '| |
    '| www.drschlegel.de/tobias |
    '| Compiled for ATMEGA16, 16Mhz (ext.)Crystal |
    '+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++

    '===CONFIGURATIONS===
    $regfile = "m16def.dat"
    $baud = 9600
    $crystal = 16000000
    $lib "i2c.lib"

    Config Scl = Portc.0 'I²C SDA
    Config Sda = Portc.1 'I²C SCL


    '===FUNKTIONEN===

    Declare Function Lcdprint(byval Nchars As Byte) As Byte


    '===VARIABLEN===

    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte

    Dim Lcdtext As String * 40

    Const Lcddataaddr = &H40
    Const Lcdcntrladdr = &H42

    Const Default_i2c_delay_time = 3


    '===PROGRAMMBEGINN===


    Begin:
    I2cinit

    I2csend Lcddataaddr , 0
    Waitms 10
    I2csend Lcdcntrladdr , 0

    Sound Beep , 250 , 1000 'Ein bisschen gepiepse zum Anfang...
    Sound Beep , 250 , 900
    Sound Beep , 250 , 800
    Sound Beep , 500 , 500



    A = Sirene(3) 'Ich komme...

    'Waitms 500 'Watren


    '====Eigentlicher PROGRAMMSTART====


    Source: 'TESTPROGRAMM




    I2csend Lcddataaddr , 56 'Mit 2 Zeilen initialisieren...
    Waitms 10

    I2csend Lcdcntrladdr , 1
    Waitms 10
    I2csend Lcdcntrladdr , 0
    Waitms 10


    I2csend Lcddataaddr , 12 'Einschalten
    Waitms 10

    I2csend Lcdcntrladdr , 1
    Waitms 10
    I2csend Lcdcntrladdr , 0
    Waitms 10


    I2csend Lcddataaddr , 2 'Cursor HOME
    Waitms 10

    I2csend Lcdcntrladdr , 1
    Waitms 10
    I2csend Lcdcntrladdr , 0
    Waitms 10



    Lcdtext = "1babababaf2babababaf3ababababf4babababFX"
    A = Lcdprint(40)




    End 'ENDE!!

    '&====FUNKTIONEN UND SUBROUTINEN====&


    Function Lcdprint(nchars As Byte) As Byte
    Dim Sign As String * 1
    Dim Prnt As Byte
    Dim Schlvar3 As Byte



    For Schlvar3 = 1 To Nchars

    Sign = Mid(lcdtext , Schlvar3 , 1)
    Prnt = Asc(sign)


    I2csend Lcddataaddr , Prnt
    Waitms Default_i2c_delay_time


    I2csend Lcdcntrladdr , 4
    Waitms Default_i2c_delay_time

    I2csend Lcdcntrladdr , 5
    Waitms Default_i2c_delay_time

    I2csend Lcdcntrladdr , 4
    Waitms Default_i2c_delay_time

    Next


    End Function


    Im LCD steht:

    1babababaf2babababaf

    und in der unteren Linie nix.

    Das alles funktioniert richtig, wenn man die ersten 20 Zeichen alleine Schickt,
    und die anderen 20 auch alleine.
    Dann steht alles richtig.

    Da ist irgendein kleines Problem.
    Aber ich und avatar wissen nicht, wo es ist!
    Seit gestern Abend tüfteln wir jetzt schon...

    Viele liebe Grüße, und Danke schon jetzt!
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    09.06.2004
    Ort
    Rhein-Neckar-Raum
    Beiträge
    504
    Zeilenumbruch nach dem 20.Zeichen

    If Schlvar3 = 20 Then
    I2csend Lcddataaddr , 192
    I2csend Lcdcntrladdr , 0
    I2csend Lcdcntrladdr , 1
    I2csend Lcdcntrladdr , 0
    Waitms 3
    End If

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •