- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Display über i2c

  1. #21
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Anzeige

    Powerstation Test
    Hallo Robert,

    es läuft!!!!

    Code:
    copyright = Guenter Gerold
    www       = www.gerold-online.de/cms
    email     = tv@gerold-online.de
    comment   = I2C LCD Treiber
    libversion   = 1.00
    date         = 07.07.2008
    statement    = Wer was zu verbessern hat kann sich bei mir melden...
    statement    = 
    history      = Final.
    
    
    [_Init_LCD]
    _Init_LCD:
    
    *BASIC: waitms 20
    *BASIC: i2cstart
    *BASIC: i2cwbyte    gg_Displayport
    *BASIC: i2cwbyte    &H06
    *BASIC: i2cwbyte    &H00  
    *BASIC: i2cwbyte    &HE8   
    *BASIC: i2cstop
     Ldi _temp2, &H3c
    rCall _gg_i2c_config                                   
     Ldi _temp2, &H0f
    rCall _gg_i2c_config
                                       
    _gg_i2c_config:
    *BASIC: I2cstart
    *BASIC: I2cwbyte gg_Displayport
    *BASIC: I2cwbyte &H02
    *BASIC: I2cwbyte _temp2
    *BASIC: I2cwbyte &H01
    *BASIC: I2cstop
    *BASIC: Waitms 2
    *BASIC: I2cstart
    *BASIC: I2cwbyte gg_Displayport
    *BASIC: I2cwbyte &H03
    *BASIC: I2cwbyte &H00
    *BASIC: I2cstop
    ret
    [end]
    
    
    [_CLS]
    _CLS:
    *BASIC: I2cstart
    *BASIC: I2cwbyte gg_Displayport
    *BASIC: I2cwbyte &H02
    *BASIC: I2cwbyte &H01
    *BASIC: I2cwbyte &H01
    *BASIC: I2cstop
    *BASIC: Waitms 2
    *BASIC: I2cstart
    *BASIC: I2cwbyte gg_Displayport
    *BASIC: I2cwbyte &H03
    *BASIC: I2cwbyte &H00
    *BASIC: I2cstop
    [end]
    
    
    [_Write_lcd]
    _Write_lcd:
    
      Ldi _temp2, &H05          
      rjmp  _Write_lcd_Byte   
    
    _Lcd_control:
    
      Ldi _temp2, &H01         
    
    _Write_lcd_Byte:
    
      *BASIC: I2cstart
      *BASIC: I2cwbyte gg_Displayport
      *BASIC: I2cwbyte &H02                  
      *BASIC: I2cwbyte _temp1
      *BASIC: I2cwbyte _temp2
      *BASIC: I2cstop
      rcall LCD_Write_Enable 
      ret
     
    LCD_Write_Enable:
    
      *BASIC: I2cstart
      *BASIC: I2cwbyte gg_Displayport
      *BASIC: I2cwbyte &H03
      *BASIC: I2cwbyte &H04
      *BASIC: I2cstop
      ret                    
    [end]
    Folgender Code ruft auf:

    Code:
    '###############################################################################
    '#                                                                             #
    '#    I2C-Display mit PCA 9555D                                                #
    '#                                                                             #
    '#    (c) Günter Gerold                                                        #
    '#                                                                             #
    '#    Zum Pin sparen kann ein LCD-Display auch an einen I2C-Bus gehängt werden #
    '#    Die eingebauten Bascom-Befehle können genutzt werden                     #
    '#                                                                             #
    '###############################################################################
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $lib "gg.lib"
    Dim A As Byte
    Config Scl = Portc.5                                        'Configure I2C SCL
    Config Sda = Portc.4
    Const Gg_displayport = &H40                                 'Addresse des ICs
    Config Lcdbus = 8
    Config Lcd = 16 * 1a
    Do
    Cls
    Lcd "123"
    Cursor Off
    Waitms 2000
    Cursor On
    Waitms 1000
    Cursor Blink
    Waitms 1000
    Lowerline
    Lcd "456"
    Waitms 1000
    Display Off
    Waitms 1000
    Display On
    Cls
    Lcd "Shift"
    Waitms 1000
    For A = 1 To 8
     Shiftlcd Right
     Waitms 500
    Next
    For A = 1 To 8
     Shiftlcd Left
     Waitms 200
    Next
    Waitms 1000
    Loop

  2. #22
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo,

    nochmal danke für die Hilfe!!

    wenn sich noch was ändert, werde ich es unter http://www.gerold-online.de/cms/index.php?id=146 veröffentlichen. Ebenso werde ich dort noch einen Schaltplan reinstellen.

  3. #23
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo,

    doch noch ein Hund drin:

    LCD "123"

    -funktioniert

    dim a as string * 8
    a = "123"
    LCD a

    -funktioniert nicht

  4. #24
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das dürfte der Unterschied sein, ob eine Variable im SRAM ist oder im Programmspeicher.
    Kannst du deine letzte Version von allem + beide LCD Varianten hier reinstellen ? dann hacke ich mir kurz den Code auf, was die Schweinebacke da treibt.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Robert,

    so gehts:

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $lib "gg.lib"
    Config Scl = Portc.5                                        'Configure I2C SCL
    Config Sda = Portc.4
    Const Gg_displayport = &H40                                 'Addresse des ICs
    Config Lcdbus = 8
    Config Lcd = 16 * 1a
    Cls
    Lcd "123" 
    do
    loop
    so gehts nicht:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $lib "gg.lib"
    Config Scl = Portc.5                                        'Configure I2C SCL
    Config Sda = Portc.4
    Const Gg_displayport = &H40                                 'Addresse des ICs
    Config Lcdbus = 8
    Config Lcd = 16 * 1a
    dim a as string
    a = "123"
    Cls
    Lcd a 
    do
    loop
    die Lib ist so wie schon gepostet.
    Nach Studie von anderen Libs, bin ich jetzt einfach davon ausgegangen, das das aktuelle Zeichen für das Display in der Variable _temp1 steht, was anscheinend aus einem Register geholt wird. Ob das richtig ist weiss ich nicht. Wie ist an das aktuelle Byte der internen Routinen ranzukommen? Da wird das Problem liegen.
    Alle anderen Befehle wie Upperline, Shift, Curser On Off Blink Noblink, CLS usw. laufen einwandfrei.

  6. #26
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Versuch mal. Der Bascom hat bei SRAM-LCD die Register vernudelt.
    Das erste Zeichen hätte er aber eigentlich noch zeigen müssen, dann aber Schrott

    Code:
    copyright = Guenter Gerold 
    www       = www.gerold-online.de/cms 
    email     = tv@gerold-online.de 
    comment   = I2C LCD Treiber 
    libversion   = 1.00 
    date         = 07.07.2008 
    statement    = Wer was zu verbessern hat kann sich bei mir melden... 
    statement    = 
    history      = Final. 
    
    [_Init_LCD] 
    _Init_LCD: 
    	*BASIC: waitms 20 
    	*BASIC: i2cstart 
    	*BASIC: i2cwbyte    gg_Displayport 
    	*BASIC: i2cwbyte    &H06 
    	*BASIC: i2cwbyte    &H00  
    	*BASIC: i2cwbyte    &HE8    
    	*BASIC: i2cstop 
    	 Ldi _temp2, &H3c 
    	rCall _gg_i2c_config                                    
     	Ldi _temp2, &H0f 
    	rCall _gg_i2c_config 
                                        
    _gg_i2c_config: 
    	*BASIC: I2cstart 
    	*BASIC: I2cwbyte gg_Displayport 
    	*BASIC: I2cwbyte &H02 
    	*BASIC: I2cwbyte _temp2 
    	*BASIC: I2cwbyte &H01 
    	*BASIC: I2cstop 
    	*BASIC: Waitms 2 
    	*BASIC: I2cstart 
    	*BASIC: I2cwbyte gg_Displayport 
    	*BASIC: I2cwbyte &H03 
    	*BASIC: I2cwbyte &H00 
    	*BASIC: I2cstop 
    	ret 
    [end] 
    
    
    [_CLS] 
    _CLS: 
    	*BASIC: I2cstart 
    	*BASIC: I2cwbyte gg_Displayport 
    	*BASIC: I2cwbyte &H02 
    	*BASIC: I2cwbyte &H01 
    	*BASIC: I2cwbyte &H01 
    	*BASIC: I2cstop 
    	*BASIC: Waitms 2 
    	*BASIC: I2cstart 
    	*BASIC: I2cwbyte gg_Displayport 
    	*BASIC: I2cwbyte &H03 
    	*BASIC: I2cwbyte &H00 
    	*BASIC: I2cstop 
    	ret
    [end] 
    
    [_Write_lcd] 
    _Write_lcd: 
      	Ldi _temp2, &H05          
      	rjmp  _Write_lcd_Byte    
    _Lcd_control: 
      	Ldi _temp2, &H01          
    _Write_lcd_Byte: 
      	*BASIC: I2cstart 
      	*BASIC: I2cwbyte gg_Displayport 
      	*BASIC: I2cwbyte &H02         
    	MOV	r17, _temp1
    	RCALL	_i2c_write
    	MOV	r17, _temp2
    	RCALL	_i2c_write
      	*BASIC: I2cstop 
      	rcall LCD_Write_Enable 
      	ret 
      
    LCD_Write_Enable: 
      	*BASIC: I2cstart 
      	*BASIC: I2cwbyte gg_Displayport 
      	*BASIC: I2cwbyte &H03 
      	*BASIC: I2cwbyte &H04 
      	*BASIC: I2cstop 
      	ret                    
    [end]
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #27
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Robert was soll ich sagen,

    es läuft!

    Nun ja, ich könnte den Code noch ein bisschen "hübsch" machen...

    Nochmals danke für deine Unterstützung.

    Damit alle was davon haben werde ich es auf meiner Internetseite ein bisschen aufarbeiten.

    Günter

  8. #28
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Na fein !
    Hab' mir grad deine HP angesehen, auch die Lib
    Vielleicht sollte man wirklich ein wenig assemblermässigen professionellen kryptischen Schamanismus reinpacken. Sonst sieht das so brav aus
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

12V Akku bauen