PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-bus 7Seg LCD an ATmega (bascom)



AlKI
28.11.2007, 15:05
Hoi, wie kann ich ein 16 stelliges 7-segment LCD mit C-bus ansteuern?

ich habe auf der Platine 2 PCF2111T, bei denen die Vss-, Vdd- (wer hätte es gedacht), DATA- und CLB-Anschlüsse zusammengefasst sind, und die DLEN-Anschlüsse (lt. Datenblatt Data enable, glaub ich) einzeln sind.

Im Datenblatt ist auch die Übertragungsweise (der bits/bytes) erklärt, aber was die dann bewirken, weiß ich (noch) nicht.


Soviel hab ich herausbekommen:
es gibt 33 Databits, von denen wohl die ersten 32 die 32 Ausgänge direkt schalten.
Das 33ste bestimmt dann irgendwie, welcher von zwei weiteren Ausgängen (BP1 und BP2) geladen wird.
Was für auswirkungen das dann hat, und wie ich das überhaupt mit meinem Atmega8515 ansteuern/übertragen kann, ist mir noch ein rätsel.
die bits werden immer mit/kurz vor nem CLB-Impuls gesetzt, und vor dem ersten muss ein low-bit sein, welches den start anzeigt.

Hat damit jemand ahnung?
Wie bekomm ich sowas in ne gescheite Routine/Schleife?

EDIT: hier endlich der link zum datenblatt (http://www.ortodoxism.ro/datasheets/philips/PCF2100.pdf)

stefan_Z
28.11.2007, 16:24
Interessant sind erst einmal die Anschlüsse der Platine selber.
Wenn da nur VSS/GND und DATA/CLB rauskommen, dann werden wohl die zwei ICs die ganze Arbeit machen. Da es Segmente sind, könnte es gut sein, dass du dann also 16 Bits für die einzelnen Ziffen hast und dann noch 7 Bits für die jeweiligen einzelteile der Ziffern. Das wäre dann Multiplex-Ansteuerung.
D.h. es wird immer ein Segment aktiviert, dessen Einzelsegmente entsprechend aktiviert, dann gehts weiter mit dem nächsten Segment.
Das ganz schnell hintereinander ist dann Multiplexing.

Schieberegister befüllt man normalerweise mit SHIFTOUT oder SPI in Bascom. Shiftout sollte gut funktionieren.

Aber mehr Infos zu der Platine wären gut... leg sie mal auf den Scanner, dann kann man mehr sagen...

AlKI
28.11.2007, 16:38
danke für die multiplexing-erklärung.

bist du sicher, dass man erst das segment auswählt und dann da nochmal sendet, welche Segmente an/aus sind? (Fig.7 auf S.9 im datenblatt irritiert mich da etwas)

mit nem Photo der Platine wirst du wohl wenig anfagen können, da die ne dual-oder tripple-layer Platine is. und auserdem kaum größer als das display. weitere bauteile sind nur 2kondensatoren und n widerstand für die osc-beschaltung.

was mir gerade durch den kopf geht, ist dass die 2 ICs 32 ausgänge haben, und noch die 2 BP1 und BP2. 2X2X32=128 Kombimöglichkeiten, und das LCD hat (mit punkten)16X8=128 einzelsegmente. kann es damit irgendetwas zu tun haben? bzw, was sind die BP-Ausgänge überhaupt?

Auf seite 11 in dem datenblatt, das bild 7.7 zeigt ne beschaltung mit mehreren ICs an ein display, schlau werde ich daraus aber nicht.

ich schau mir mal das shiftout an, vlt kann ich dann zumindest mal daten senden, und dann seh ich ja, was rauskommt.

stefan_Z
28.11.2007, 18:06
Das ist nicht viel anders als bei normalen Schieberegistern.
Clock gibt den Takt der Bits an, die du auf DATA reinschickst.

AlKI
28.11.2007, 21:00
öhm, ja, nur:
bei shiftout gehts ja max. bis 32Bits, ich hab hier nur noch das 33ste loadbit, dann noch das startbit und den loadpulse, bei dem auch noch Dlen geändert werden muss. bei shiftout kann ich ja nur den clock- und cen Data-pin configurieren.
Wie mach ich das jetzt am dümmsten?
und (wie) werden da start/stoppbits gesendet? wenn nämlich mein 33stes Bit ein stoppit ist, kann ich es nicht verändern/nachträglich senden.

wollte jetzt einfach mal lauter nullen an einen der beiden ICs senden, dazu hab ich folgendes geschrieben:



$regfile = "m8515.dat"
$framesize = 40
$hwstack = 40
$swstack = 40
$crystal = 8000000


Config Portc.0 = Output
Daten Alias Portc.0

Config Portc.1 = Output
Clock Alias Portc.1

Config Portc.2 = Output
Dlen1 Alias Portc.2

Config Portc.3 = Output
Dlen2 Alias Portc.3

Dim Zaehler As Byte


Do

Daten = 0
Clock = 0
Dlen1 = 0
Dlen2 = 0

Zaehler = 1

Dlen1 = 1
Clock = 1
Waitus 10
Clock = 0 'startbit gesetzt


While Zaehler < 33 '32 mal "0" senden

Clock = 1
Waitus 10
Clock = 0
Waitus 10

Wend


Clock = 1
Waitus 10
Clock = 0 'Loadbit gesendet


Dlen1 = 0
Clock = 1
Waitus 10
Clock = 0
Waitus 10

Loop

ich merke aber nicht, dass sich irgendwas ändert. auch wenn ich nur "1" schicke, bleibt mein LCD ganz an (alle 16 7segmentziffern und Punkte)

AlKI
29.11.2007, 11:40
hm, mit 32 bits über shiftout (in der hoffnung, dass das endbit den Status des loadbits einnimmt) und danach noch nen loadpulse geht nix, und mit spi komm ich auch nicht voran.

hab jetzt rausgefunden, dass der C-bus wohl der vorgänger vom I2C (-bus), auch TWI genannt, war. der hat zwar nen Slave Select (den man vlt als dlen nutzen könnte), gibt aber kein loadpulse über den.