IC2 mit PCF8577

OP #1889058
Lesenswert?

Hi

Ich habe ein Problem mit dem Datenblatt des PCF8577: 
http://www.selectronic.fr/includes_selectronic/pdf/Philips/PCF8577.pdf

Ich verstehe das Controlbyte nicht. Kann mir jemand sagen wie dieses 
aufgebaut ist? Ebenso verwirren mich die Tabellen darunter mit den V0, 
V1 und V2.
OP #1889373
Lesenswert?

Ein Beispiel für die Ansteuerung gibt es hier: 
http://www.woe.onlinehome.de/lcd.htm
Allerdings habe bisher nur c-ähnlich Sprache programmiert und kann mit 
dem Code nichts anfangen.

Das erste Bit R/W muss ja 0 sein um zu schreiben. Das 2. Ist das Display 
das ich ansteuern möchte (also BANK 0, das erste Display). Dann kommt 
der Segment Byte Vector, aber ich verstehe nicht warum das 6bits sind 
und was man da rein schreiben soll.

Kann mir denn keiner helfen?
Gast #1889391
Lesenswert?

Hallo Samuel,

schau' Dir mal Fig. 3 an. Dort wird der Aufbau des Control-Bytes genau 
erklärt. die Bits 3..5 stellen die den Teil I2C Adresse dar, die 
normalerweise in den Bits 1..3 des Startbytes steckt. Für den 8577 ist 
allerdings eine 7 Bittige Adresse fix vom Hersteller vorgegeben. um 
denoch mehrere identische Bausteine am selben I2C Bus betreiben zu 
können wandert der Adressvektor eben ins Control-Byte. Das gesendete 
Bitmuster muss der Beschaltung an A0..A2 enstsprechen, damit der Bautein 
adressiert wird.

Viele Grüße,
Marcus
OP #1889424
Lesenswert?

Ich hab den Schaltplan vom oberen Link genommen, da wird bei A0 aber der 
Oscillator angeschlossen und an A2 hab ich BP2 angeschlossen. A1 ist 
GND. Das heißt die Adresse wäre dann 0-0-0, stimmt das?

              MODE  BANK  |--ADRESS---|     SEGMENT   DISPLAY
Also muss ich 1  -  X  -  0  -  0  -  0  -  0  -  0  -  0 senden.

Und danach 1 Byte für die Segment daten.
Und dann das Stop Signal.

Dazwischen muss doch dann noch immer ReadAck oder?
Gast #1889438
Lesenswert?

Ja,
passt.

das achkowledge darfst Du NICHT senden, das sendet das Empangende IC. 
Wenn Du alo kein ACK bekommst, kannst Du davon augehen, daß irgendetwas 
beim Adressieren des ICs nicht funktioniert hat. (Fehler in der 
Addressierung, mieses Timing, uswusf.....)
OP #1889443
Lesenswert?

Danke, das Display zeigt jetzt was an, allerdings ist das ein bisschen 
komisch. Ich werd mal ein bild posten. Ich glaube die Buchsenleiste die 
ich verwende ist nicht geeigne - wenn ich das D. draufpresse erscheinen 
mehr segmente. Außerdem sind mache halbhell und andere ganz schwarz. 
Zudem leuchten mehr Segmente als 8. Ich kann aber nichts genaueres 
sagen, da ich Segmente einfach von S1-32 angeschlossen habe ohne die 
Pinbelegung zu beachten. Später korrigiere ich das per Software.
Gast #1889470
Lesenswert?

Samuel K. schrieb:
> Ich hab den Schaltplan vom oberen Link genommen, da wird bei A0 aber der
> Oscillator angeschlossen und an A2 hab ich BP2 angeschlossen. A1 ist
> GND. Das heißt die Adresse wäre dann 0-0-0, stimmt das?

Welchen Schaltplan? Im Datenblatt sind mehrere.

BP2 wird nur angeschlossen, wenn Du ein Diplay mit zwei "Backplanes" 
bemutzt. Es kommt also auf das Display an, ob Du "Direct Drive" oder 
"Duplex Drive" einstellen musst.

Ich habe mal einen PCF8576 verbaut und kann nur empfehlen: sieh' Dir das 
Display genau an! Es gibt welche mit bis zu 4 Backplanes.

Ach, jetzt habe ich auch endlich den Schaltplan gefunden, den Du 
(wahrscheinlich) meinst - ein direkter Link wäre hilfreich gewesen. Dort 
ist nämlich nur BP1 angeschlossen, was bedeutet "Direct Drive", also Bit 
muss Null sein. --> Das kann schon Deine unterschiedlichen Helligkeiten 
erklären (siehe auch Fig. 5 im Datenblatt)
OP #1889481
Lesenswert?

HolgerT schrieb:
> Siehst Du den Dezimalpunkt auf dem Display? Das ist gewöhnlich unten.

Da hatte ich irgendwie ein Brett vorm Kopf. Danke.


Im Datenblatt steht 32/64 Segment Treiber.
Das heißt ich müsste auch 2 Displays mit je 32Segmenten betreiben 
können.
Ich habe das vom Reichelt: 
http://www.reichelt.de/?ACTION=3;ARTICLE=10182;PROVID=2402
Das hat 2 Backplanes die kann man aber auch verbinden und hat dann nur 
eine. Bei 2 Displays hab ich dann 32Segmente mit 2BPs.

Achja ich hab noch 5Segmente nicht verbunden. Aber das dürfte doch 
nichts machen, oder?

EDIT:

Den Code hab ich bisher genutzt:
1
int main(void)
2
{
3
    i2c_init();
4
    i2c_start_wait(LCD + I2C_WRITE);
5
    i2c_write(128);
6
    i2c_readAck();
7
    i2c_write(0xFF);
8
    i2c_readAck();
9
    i2c_stop();
10
    while(1)
11
       asm volatile("nop");
12
       
13
}

mit Peter Fleurys Ansteuerungsroutinen.
OP #1889512
Lesenswert?

Mit dem Code müssten alle Segmente leuchten, tun sie aber nicht:
1
#define LCD 0b01110100
2

3
int main(void)
4
{
5
    i2c_init();
6
    for(uint8_t i = 0; i < 4; i++)
7
    {
8
        i2c_start_wait(LCD + I2C_WRITE);
9
        i2c_write(i << 1);
10
        i2c_readAck();
11
        i2c_write(0xFF);
12
        i2c_readAck();
13
        i2c_stop();
14
    }
15
    while(1)
16
       asm volatile("nop");
17
       
18
}

Fehlen da irgendwie Delays oder sowas?

Es leuchten weniger als vorher.
OP #1889553
Lesenswert?

Ich vermute das mit dem Code alle Segmente an gehen:
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3

4
#define LCD 0b01110100
5

6
int main(void)
7
{
8
    i2c_init();
9
    {
10
        i2c_start_wait(LCD + I2C_WRITE);
11
        i2c_write(0);
12
        i2c_readAck();
13
        i2c_write(0xFF);
14
        i2c_readAck();
15
        i2c_stop();
16
    }
17
    while(1)
18
       asm volatile("nop");
19
}

Bei mir gehen nur so ca. 20 an, da ich 5 Leitungen noch nicht verbunden 
sind und irgendwie min. 3 Leitungen unterbrochen sind. (ich habe bisher 
erst 20pins von 40 überprüft).

EDIT: Stimmet doch nicht, ich habe mich vermessen.


Wenn ich es jetzt anschliesse leuchten 8 Segmente bei obrigem Code. Wenn 
ich nun auf das Display am Rand drücke leuchten viel mehr auf und 
bleiben an.
Gast #1889638
Lesenswert?

Wenn ich as richig sehe, hat dieses Display nur eine Backplane.
Die ist allerdings auf 2 Pins des Displays auffgelegt. Nimm 'mal BP2 
weg,
Brücke (am Display Pin 1 und 400 und verwende "DirektDrive".
Das sollte funktionieren.

Gruss,
Marcus
OP #1889713
Lesenswert?

PIN 1 und 40 sind am !Display! nicht verbunden. Ich hab die bisher immer 
verbunden gehabt. Directdrive verwende ich auch schon die ganze Zeit. 
Ich hab jetzt noch mal alle verbindungen überprüft auf seitlich 
verbindungen oder Gegenüberliegende. Ein paar hab ich gefunden, es 
ändert sich aber nichts.

Mit dem Prog. sollten alle Ziffern nacheinandern leuchten:
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3
#ifndef F_CPU
4
#define F_CPU 1000000UL
5
#warning F_CPU
6
#endif
7
#include <util/delay.h>
8

9
#define LCD 0b01110100
10

11
int main(void)
12
{
13
    i2c_init();
14
    for(uint8_t i = 0; i < 4; i++)
15
    {
16
        for(uint8_t o = 0; o < 8; o++)
17
        {
18
        i2c_start_wait(LCD + I2C_WRITE);
19
        i2c_write(32+i*2);
20
        i2c_readAck();
21
        i2c_write(1 << o);
22
        i2c_readAck();
23
        i2c_stop();
24
        _delay_ms(500);
25
        }
26
    }
27
    while(1)
28
       asm volatile("nop");
29
}

Am Ende müssten dann 4 Ziffern noch an sein, da nach dem Übergang zum 
nächsten Digit das alte nicht gelöscht wird.
Allerdings leuchten manchmal 2 Segmente gleichzeitig auf und manschmal 
auch keins.
Gast #1889754
Lesenswert?

hm. Für mich sieht das inzwischen massiv nach Verdrahtungsproblem aus.
Ich setze diese Displays immer direkt über das Treiber-IC. (Stack) Das 
lässt sich dann (fast) 1:1 verbinden und braucht kaum mehr platz als das 
Display selbst.

Und noch ein kleiner Tipp für die "32":
Du gehst an dieser Stelle mit Bitvektoren um, also solltest Du "|" und 
"<<" statt "+" und "*" nehmen. Dann weisst Du auch noch in ein paar 
Jahren, was du da vorhattest....

Also:  i2c_write(0x20 | i << 1);

...und wenn Du es ganz Richtig machen möchtest, legst du die Definition 
der I2C-Adresse brav im zugehörigen Header-File.

#define DISPLAY_I2C x020

Gruss,

Marcus
Gast #1889787
Lesenswert?

Du holst Dir halt mit so einer Strippe alle böse ans Display, dessen 
Eingänge doch ziemlich hochohmig sind. Die 0.3mA Treiberstrom sind halt 
auch nicht gerade üppig. Bei sauberer Verdrahtung mag das angehen, ich 
denke mal, daß Du im Rahmen Deiner Nachforschungen schon ordentlich an 
den Kontaktierungen 'rumgebraten hast ;-)

Mein Vorschlag wäre:

1) Verkabelung IC -> Display komplett weg.
2) Pause machen ( Laufen gehen oder sonst irgendwas was den Kopf frei 
macht)
3) Die Verkabelung nochmal SYSTEMATISCH aufbauen.

Gruss,
Marcus
OP #1889815
Lesenswert?

Mitten drin während dem Prog das alle Segmente nacheinander zeichnet 
sieht man den Fehler. Da wird das 2. und 4. Digit gleich angesteuert. 
Das heißt jedes Segment im 2. Display ist auch im 4. an. Das kann 
irgendwie kein Hardwarefehler sein.
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3
#ifndef F_CPU
4
#define F_CPU 1000000UL
5
#warning F_CPU
6
#endif
7
#include <util/delay.h>
8

9
#define LCD 0b01110100
10

11
int main(void)
12
{
13
    i2c_init();
14
    for(uint8_t i = 0; i < 4; i++)
15
    {
16
        for(uint8_t o = 0; o < 8; o++)
17
        {
18
        i2c_start_wait(LCD | I2C_WRITE);
19
        i2c_write(0x20 | (i << 1));
20
        i2c_readAck();
21
        i2c_write(1<<o);
22
        i2c_readAck();
23
        i2c_stop();
24
        _delay_ms(500);
25
        }
26
    }
27
    while(1)
28
       asm volatile("nop");
29
}

Ich mach mal ein Video.


Nochmal bauen... hmmm... ungern. Die Hardware muss eigentlich stimmen. 
Ich hab sogar bei dem Display die 780 Möglichkeiten der ungewollten 
Verbindungen geprüft.
OP #1889839
Lesenswert?

Probier ich gleich aus. Hier erst mal das vid. Windows nutzer können es 
mit dem Mdeiaplayer abspielen. Bei Linux weiß ich es nicht. Codec ist 
DivX.

Bei i = 1 sind wieder die doppelten segmente. Bei i = 3 ist es das 
endbild vom vid:

Digit
1  2  3  4
         _
        |
        |

Dabei ist es ein Standbild und verändert sich nicht.
Angehängte Dateien:
Gast #1889866
Lesenswert?

Du solltest dringend die Digits kongruent anschliessen. Das ist sonst 
wirklich Ratererei. Dass dein 4. Digit 3 Segmente auf enimal anzeigt, 
das 2. aber nciht ist einklares Indiz auf unsaubere Verkabelung gepaart 
mit Schmutz auf dem Kabel.

Nimm Dir die Zeit. Das ist eine gute Investition.

Gruss,
Marcus
OP #1889884
Lesenswert?

Das verrückte ist ja noch ich hab die ganzen Verbindungen geprüft, es 
müsste funktionieren.
Aber das mit den 3 Segmenten ist sehr komisch: Wenn ich ein Programm 
schreibe das sie blinken lassen sollte bleiben sie an.

Die ReadAck hab ich über den EEProm auch überprüft, die stimmen.

Warum darf man eigntlich kein readAck nach start setzen? Wartet start 
automatisch auf den Ack?
OP #1889984
Lesenswert?

So ich mach jetzt einfach mal Messungen. Mit dem Wechselstrom 
messfunktion geht das zum Glück.
1
        i2c_start_wait(LCD| I2C_WRITE);
2
        i2c_write(0x20 | 0);
3
        i2c_readAck();
4
        i2c_write(0x01);
5
        i2c_readAck();
6
        i2c_stop();
7
        _delay_ms(500);

Das erste Segment sollte an sein.

Es leuchten allerdings 3 Segmente:
1
1  2  3  4
2
   _
3
      _
4
         .
Am PCF liegt Wechselspannung an Pin 16, 24 und 26 an.

Spanungsversorgung abgeklemmt, Auf Brücken gemessen, nichts.


Das soll ein Hardwarefehler sein???


Nächstes Segment. Im Code eine 0x02 eingefügt. 2 Segmente sind an:
1
1  2  3  4
2
   _
3
      
4
      |

Wechselspannung liegt an 15, 23 und 27 an.
Gast #1889994
Lesenswert?

Moin!


Wie hast Du geprüft ? Multimeter ? Sichtprüfung ? Oszilloskop?
Es [i]müsste[/i] funktionieren gilt nicht.

[[Édit: Eben gelesen: Wechselstrommesseingang. Naja. Geh' mal mit dem 
Skop dran. Ist bei deinen Messungen das Diplay mit angeschlosen ?


Mach mal Bilder von den Boardrückseiten.



Daß sie anbleiben ist ein weiteres Indiz für eine vergurkte Verkabelung. 
wie ich bereichts diverse Postingsvorher schrieb (seufz) snd die 
Eingänge von LC-Displays sehr hochohmig. die müssen auf ein 
ordentliche Potential gezogen werden, sonst zeigen die alles Mögliche 
an.


Ich kenn die AVR I2C Library nicht, ich nehme an das lsens des 
Acknowledge steckt in i2c_start_wait drin. Wenn vorhanden --> 
Quellcodestudium.


Alle Segmente eines Digits schalest Du an, indem Du 0xFF  in das 
entsprechende Register schreibt.



Gruss,

Marcus
OP #1889998
Lesenswert?

Ich hab nur ein Multimeter. Mehr nicht. Aber ich könnte mal Probieren 
mir in einer Stunde ein 1kHz Atmega Oszi zu bauen.

0x04
1
1  2  3  4
2
   _
3
   _   
4
      _

pin14,22,27

Ich mach mal noch die 4. MEssung. Es fällt ja schon auf, dass der 
Abstand zw. 1 und 2. pin 8 ist. Außerdem ist  Segment A von Digit 2 
immer an.

Rein auf Vermutung hab ich 0x01 noch mal gemessen. Da sind es die Pin 
16,24,27!.

Also ist 27 das gesuchte Segment das immer an ist.
Also wird es die ganze Zeit angesteuert.


OK, 4. MEssung - erwartetes Ergebnis stimmt:

13, 21, 27.

Also wird immer ein Pin angesteuert, dazu pin + 8 und 27. Wie kann das 
ein Hardwarefehler sein?
1
1  2  3  4
2
   _
3
  |   
4
      |
Gast #1890047
Lesenswert?

beschreib nochmal genau, welche Pattern du schreibst, und was du jeweils 
misst.

Prüfe die Board-Unterseite auf Schlüsse (litze!)


Schreibe die Patterns nicht in einer Schleife, sondern one-shot.
Eventuell baust Du dir einen taster an, mit dem du dein testpattern 
weiterschalten kannst ( entprelen nicht vergessen), dann spart Du dir 
das ständige neuflashen.


Deine Software ist -auf Sicht geprüft- ok.
Evenuelle timing-Probleme auf dem Bus aussen vor. Btw: ist der I2C Bus
mit Pullups versehen ?
OP #1890063
Lesenswert?

IC2 Bus ist mit 4k7 pullup. Auf Verbindungen die nebeneinander liegen 
könnten, habe ich mehrmals geprüft (gegenüber auch).

Die Clock des IC2s ist auf 100kHz gesetzt ist das zu viel?

Zur Beschreibung:
1
SegmentDaten | Digit | Wechselspannung an Pins des PCF
2
---------------------------------------------------------
3
0x01         |  0    | 16,24,27
4
0x02         |  0    | 15,23,27
5
0x04         |  0    | 14,22,27
6
0x08         |  0    | 13,21,27
7
---------------------------------------------------------

Mein 6Kanal Oszi ist außerdem auch gleich fertig.
Gast #1890076
Lesenswert?

Der I2C Bus ist bei Dir Hardwareseitig ok, die Kommunikation steht auch 
( du bekommst ja auch für das ein oder andere Segment eine brauchbare 
Anzeige. I2C geht locker bis 400kHz.

Wenn du nur ein Bit im Segmentvektor setzt, wird auch nur dieses Pin am 
Ausgang Aktiviert. Wenn du also mehrere Pins mit Pegel "misst" si die 
wahrschinlichkeit eines Softwarefehlers eher gering.


Ich habe da allerdings so einen vagen verdacht, wenn ich mir das Pinout 
des 8577 ansehe und mit den Bildern deines Aufbaus und er von Dir 
angefertigten Tabelle vergleiche.
hast Du die Unterseite gefädelt ?
Gast #1890116
Lesenswert?

Beim Fädeln wären die Drähte u.U. diagonal zwischen den PINS verlaufen. 
Bei Deinem Aufbau ( Direkt auf Tischplatte) baut man gerne mal 
kapazitive Einkopplungen auf ( ich wiederhole mich nur ungern: 
LC-Display -> hochohmige Eingänge)
Streifenraster taugt für diese Anwendung wenig, wenn du die Streifen 
nicht kurzhälst ( an der Pfostenleiste) das wirkt alles zusammen wie 
eine Antenne für das Display.

However; Dein Drahtverhau sieht nicht sehr Vertrauenerweckend aus.
Miss mal bitte im Gleichspannungsmessbereich gegen Gnd.
Gast #1890160
Lesenswert?

Hüstel, das war dann 'ne blöde Idee....

Du kannst en 8577 als Portextender verwenden; dann kannst du 
entsprechend messen. Ich bin mir jetzt nicht sicher, ich glaube dazu 
musst du den Internen Oszillator lahmlegen. Ausserdem ist es nicht 
ungeschickt, die Ausgänge mit testloads zu beaufschlagen (siehe 
Datenblatt) dann können sich denfinierte Pegel einstellen.


Schau dir mal die Streifendurchtrennungen an. Du möchtest da 1 mm 
isolaton dazwischen haben.
OP #1890167
Lesenswert?

was sind testloads?

Dss wird schwer. Ich müsste die Abstände im Streifenraster verdoppeln.


Außerdem ich hab jetzt ein Oszi. 6 Kanal und Frequenz so schnell wie der 
AVR messen und über die serielle Schnittstelle zu Pc senden kann. 
Software zum empfangen ist auch fast fertig.
Gast #1890365
Lesenswert?

Ich nehme an, du misst mit soundkarte, richtig ?
Wie ist der Messaufbau ?
Zeitachsendimensionierung ?
Y Achse Dimension ?

Wie ist der Oszillator des 8577 denn aktuell beschaltet ?

Lies im Datenblatt nach: Wie ist fLCD angegeben ?

Passt das Alles zusammen ?

Mein Hinweis auf das messen mit Oszilloskop bezog sich nicht auf die zu 
messende Frequenz sondern auf die Belastung des Ausgangs mit dem 
Messmittel.

Es gibt den Spruch "Wer misst misst Mist". Du musst dafür sorgen, dass 
Du in Deiner Anordnung alle potentiellen Störquellen beseitigst und 
möglichst viele Parameter so einstellst, dass sie wohldefiniert sind.

Wenn Du ein steckbrett besitzt: Packe den 8577 erstmal dadrauf; 
terminiere die ausgänge mit 6k8 widerständen ( meinetwegen auch 10k ) 
führe den I2C Bus über nicht allzu lange Strippen an's IC ( kannst Du 
aus Deinem bestehenden Aufbau abweigen ) und messe DORT. Wenn Du 
verstanden hast, was du misst, darfst Du mit diesen neu gewonnenen 
Erkenntnissen zurück auf die Ursprungsschaltung.

Viele Grüße,
viel Erfolg
Marcus
OP #1890375
Lesenswert?

Nein ich messe nicht mit der Soundkarte. Das ist ein Atmega an der 
seriellen Schnittstelle. Die Frequenz variiert von 1900 - 2000Hz. Das 
mit den Widerständen mach ich mal.

Wegen der Y Achse: Ich war zu faul das noch einzuprogrammieren, die 
X-Skala hat mich schon genug debugging gekostet.
Gast #1890460
Lesenswert?

lass die Oszillatorschaltung erstmal weg. dann benimmt sich der 8577 wie 
ein Portextender. Er sollte somit je nach gesetztem segment bit den 
entsprechenden ausgang auf low oder high ziehen. Hatte ich das nicht 
schon weiter oben erwähnt ?

Damit weisst Du nach, daß deine Software funktioniert. (Wird das, was 
über den I2C Bus gesendet wird an den Ausgängen dargestellt ? )


Kann es sein, daß du dich zu sehr in Aktionismus flüchtest, und weniger 
versuchst zu verstehen, was Du da tust ?

Leg dein Skope erstmal weg. Du hast nicht verstanden, worauf es bei der 
Messung ankommt und so sieht Dein "Messergebnis" aus.
Gast #1890559
Lesenswert?

Und was misst Du ?

Vorschlag fuer Testpattern (BANK A 3-2-1-0):

0x00,0x00,0x00,0x00

0x01,0x02,0x04,0x08

0x11,0x22,0x44,0x88

weitere Pattern nach belieben

Wenn der Oszillator nicht läuft, solltest Du DC messen koennen.
Mit beschaltetem Oszillator stellt sich eine Schwingung mit der Fequenz 
fLCD ein. ( Auf den jeweiligen PINS)
OP #1890741
Lesenswert?

Digit | Data | Segmente
0     | 0x01 | 16,24
0     | 0x02 | 15,23
0     | 0x04 | 14,22
2     | 0x01 | 8,16            !!!
2     | 0x02 | 7,15
4     | 0x10 | 4,14            !!!
6     | 0x01 | 6,7             !!!
6     | 0x02 | 6,7             !!!
6     | 0x04 | 6,7             !!!
6     | 0x08 | 6,7             !!!
6     | 0x10 | 6,7             !!!

Die LED Reihen hab ich doch nicht benutzt. Ich hätte zwar 20kOhm 
WIderstände nehmen können, aber das gefällt mir trotzdem nicht (leuchten 
tun sie trotzdem).

Ich denke das reicht. Bei 2 und 4 wird +8 gedoppelt. Bei 4 und 6 sind 
die Ergebnisse entsprechend undef.
#1890821
Lesenswert?

Du hast also BP1, BP2/A2, A1 und A0 auf Gnd gelegt, wie in Fig 17 
gezeigt?.

Gut.

Wie schreibst Du?
Mode=0
Bank=0
A2=V5=0
A1=V4=0
A0=V3=0
V2..V0: Adresse
I2C Adresse=0x74+(rw)?1:0;

also: <start> <0x74> <00> <01> <i2c stop>

sollte eine 1 ins Register 0 schreiben

tut es das?
OP #1890848
Lesenswert?

Ja so hab ich es gemacht. Mit der Lib halt:
1
//In der Lib
2
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
3
#define I2C_READ    1
4

5
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
6
#define I2C_WRITE   0
7

8

9
//vor main
10

11
#define LCD 0b01110100
12

13
//In Main
14
i2c_start_wait(LCD| I2C_WRITE);
15
i2c_write(4); //Hier hab ich das Digit eingesetzt (0 / 2 / 4 / 6)
16
i2c_readAck();
17
i2c_write(0x01);//Hier die Daten (z.b. 0x01 / 0x02 / 0x04...)
18
i2c_readAck();
19
i2c_stop();

Hast du eigentlich auch so was gebaut? Könnte ich dir vielleicht eine 
Hex schicken, die du testest?


Die Lib gibts übrigens hier: http://jump.to/fleury
#1890865
Lesenswert?

Ein passendes Display hätte ich da, nur den pcf8577 momentan nicht. 
Müßte ich bei der nächsten Bestellung mal mit drauf schreiben. Dann kann 
ich das mal an meinem STK500 ausprobieren.

Die Fleury-Libs habe ich nie benutzt, sondern immer die von Atmel 
selber.

fchk
Gast #1890919
Lesenswert?

Ich habe mir eben mal den Quelltext der Library durchgelesen.
Nur mal so zum test:

nimm mal die readAcks 'raus. die warten nämlich nicht auf auf ein 
acknowledge sondern wollen gerne ein byte vom bus lesen. und damit ist
das komplette Protokoll im Eimer.

Der Funktionsname ist ein wenig irreführend muss ich sagen....
OP #1890956
Lesenswert?

Kannst du mir irgendwelche Leisten für das Display empfehlen. Zum 
Draufstecken. Die die ich habe sind blöd. Man muss draufdrücken, damit 
alle Segmente leuchten, drückt man zu stark drauf gehen manche wieder 
aus. Das liegt aber an den Kontakten.

Ich denke vielleicht an so was:

http://www.reichelt.de/?ACTION=3;ARTICLE=19398;PROVID=2402

Bisher hab ich so was:

http://www.reichelt.de/?ACTION=3;GROUP=C142;GROUPID=3221;ARTICLE=6072;SID=26RDQypKwQARoAAFzTKDQ7e665c550ff3a600c39e5b820a0e3faa

Da passen sie genau rein, aber der kontakt ist schlecht.

Das stände noch im Raum:

http://www.reichelt.de/?ACTION=3;GROUP=C142;GROUPID=3221;ARTICLE=51827;SID=26RDQypKwQARoAAFzTKDQ7e665c550ff3a600c39e5b820a0e3faa

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren