-         

Ergebnis 1 bis 8 von 8

Thema: M-Unit 2.0 und I2C Display Problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188

    M-Unit 2.0 und I2C Display Problem

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Vielleicht habe ich nur was übersehen....
    Also: Das I2C Display Modul ist korrekt mit der Unit verbunden. Die Jumper von A0-A2 sind alle gesetzt und so sollte der PCF die Adresse 64 haben. Dieses entspräche dem Byteport[8]. Um es auszutesten habe ich die Beispiele von der CC Support Seite benutzt, die allerdings von Haus aus schon fehlerhaft sind.(Wurde natürlich korrigiert). Das Display reagiert aber nicht. Beim Testen mit den IIC Routinen habe ich allerdings per Bitmanipulation auf das LCD schreiben können. Was ist da faul?
    B++ ist für mich etwas neues, da ich mich mehr mit dem Propeller beschäftige, vielleicht habe ich auch nur was vergessen. Ich arbeite mit WB++. Importiert habe ich die ASCII TABLE und den Treiber für das LCD, sollte also laufen,oder?

    Wem fällt was ein?

    Gruß

    Jens

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    OK, weil bis jetzt niemand gepostet hat (war ja auch Wochenende) vielleicht etwas mehr Infos.
    Der Code ist der aus den Beispielen von der Seite von Stefan.


    '------ I/O PORTS ---------
    '--------------------------
    '--- IIC INTERFACE -------
    define SDA port[9]
    define SCL port[10]
    '--------------------------
    '------ SYSTEM MEMORY -----
    '--------------------------

    Import "..\Lib\ASCII_TABLE.blib"
    Import "..\Lib\IIC_LCD_DRIVE.blib"





    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'II PCF 8574 POERWEITERUNG FÜR LCD II
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    LCD.INIT
    LCD.OFF
    '---------- IICBUS INIT ------------------------
    SDA=on
    SCL=on
    '----------------------------------------------
    pause 2
    LCD_INIT()

    '----- WRITE CHARACTERS LINE 1 ---------------
    LINE1(4)
    LCD_WRITE(20h,U)
    LCD_WRITE(20h,N)
    LCD_WRITE(20h,I)
    LCD_WRITE(20h,T)

    LCD_WRITE(20h,BLANK)
    LCD_WRITE(20h,M)
    LCD_WRITE(20h,BLANK)
    LCD_WRITE(20h,Z2)
    LCD_WRITE(20h,DOT)
    LCD_WRITE(20h,Z0)

    #LOOP
    goto LOOP
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

    In der IIc_LCD_DRIVE.blib habe ich den byteport auf 8 gesetzt
    , da alle drei Adressjumper am Modul gesetzt sind. Die Pullups sind ebenfalls aktiviert.
    Der Code :
    '--- PCF 8574 LCD DRIVER AT ADDR 5 / EXT BYTEPORT 8 ---
    '-------------------------------------------------------
    FUNCTION LCD_WRITE(BUF as byte,LCDDATA as byte)
    define EXTPORT byteport[8]
    define OUTBYTE as byte
    '--------- ------WRITE HI NIBBLE ------------------------
    OUTBYTE=BUF or (LCDDATA shr 4)
    EXTPORT=OUTBYTE or 01000000b
    EXTPORT=OUTBYTE and 10111111b
    '--------------- WRITE LO NIBBLE ------------------------
    OUTBYTE=BUF or (LCDDATA and 0Fh)
    EXTPORT=OUTBYTE or 01000000b
    EXTPORT=OUTBYTE and 10111111b
    END FUNCTION
    '-----------------------------------------------------
    FUNCTION LCD_CLR()
    LCD_WRITE(0,02h)
    LCD_WRITE(0,01h)
    pause 2
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LCD_INIT()
    define EXTPORT byteport[8]
    EXTPORT=0
    LCD_WRITE(0,38h)'0=WRITE CMD
    EXTPORT= 00000010b
    EXTPORT= 01000010b
    EXTPORT= 00000010b
    LCD_WRITE(0,28h)
    LCD_WRITE(0,0Ch)
    LCD_CLR()
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LINE1(POS as byte)
    LCD_WRITE(0,7Fh+POS)
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LINE2(POS as byte)
    LCD_WRITE(0,BFh+POS)
    END FUNCTION
    Warum geht das ganze nicht?
    Eine Frage anbei: Ich habe die Unit geschenkt bekommen und habe gelesen, daß es Updates des OS gibt, könnte das der Grund für ein NICHTfunktionieren der Unit sein?

    MfG

    Jens

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Hallo,
    Du könntest mal die Demo I2C_device_seek probieren um zu sehen, ob das Display erkannt wird. Sind Pullups am Bus? Zeigt das Display irgendeine Regung bei Anlegen der Versorgungsspannung?

    mfg

    Stefan

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    Hallo,
    danke erstmal für die Antwort.
    Ja, es sind Pullups am Bus, an SDA und SCL liegen jeweils 5V über 10K an.
    Beim anlegen von Ub sieht man, daß das Display eingeschaltet ist, dabei ist die erste reihe etwas Kotrastreicher als die zweite.

    Ich habe das Display allerdings mal über das IIC Objekt angesteuert (Adresse 64) und habe den letzten Port (LED Hintergrundleuchte) mal ein und ausschalten lassen. Das funzte einwandfrei.

    Eine Grundlegende Frage zu B++: Anscheinend ist die Sprache modular aufgebaut, ähnlich wie beim Propeller, d.h. man kann Objekte in sein eigenes Projekt einbinden und nutzen. Kann es sein, daß ich hier etwas vergessen habe?

    MfG

    Jens

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Der byteport ist 10 und nicht 8 !

    mfg

    Stefan

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.09.2004
    Ort
    Schwabenland
    Beiträge
    156
    Ich weiß nicht, ob bei dem I2C-Display mit gesetzten Jumper die Adressleitung auf high oder low gezogen wird, aber hier ist mal eine Tabelle einer Relaisplatine für die C-Control zur Übersicht, bei der aber mit gesetzten Jumper die Leitung auf low gezogen wird.


  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    So jetzt habe ich mir die Datenblätter nochmal genauer angesehen. Das Conrad-LCD-Modul schaltet per Jumper auf Masse. Wenn also alle 3 Jumper gesetzt sind, ergibt sich die genannte Adresse 64. Dies ist gemäß Programmbeispiel die Adresse 0, die wiederum dem Byteport 3 zugeordnet ist. Ich habe selber die Adapterplatine nachgebaut und das Beispielprogramm hat funktioniert.

    mfg

    Stefan

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    Jau, jetzt funzt es, habe es jetzt auch nach Conrad Datenblatt kapiert, da die Unit ja 2 Byteprts hat ist jeder weitere angeschlossene PCF ein weiterer Byteport. Ich bin davon ausgegangen, daß der BP 8 (Ports 57 -64) der Port meines Verlangens sei, aber so wies imDatenblatt steht ists echt verwirrend.

    Danke für die Hilfe, ich denke jetzt komm ich klar.

    Gruß

    Jens

Berechtigungen

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