Forum: Mikrocontroller und Digitale Elektronik IC2 mit PCF8577


von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Lesenswert?

Hat noch niemand den PCf8577 genutzt?

von Sam .. (sam1994)


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?

von Marcus (Gast)


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

von Sam .. (sam1994)


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?

von Marcus (Gast)


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.....)

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Angehängte Dateien:

Lesenswert?

Hier noch die Bilder. Woher weiß ich eigentlich wierum das display 
reinmuss? Soll der Haken nach unten oder oben zeigen?

von Sam .. (sam1994)


Angehängte Dateien:

Lesenswert?

Mist das war 2mal dasselbe.

von HolgerT (Gast)


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)

von HolgerT (Gast)


Lesenswert?

Samuel K. schrieb:
> Hier noch die Bilder. Woher weiß ich eigentlich wierum das display
> reinmuss? Soll der Haken nach unten oder oben zeigen?

Siehst Du den Dezimalpunkt auf dem Display? Das ist gewöhnlich unten.

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Lesenswert?

Sehr komisch:

Wenn ich in dem Code Beitrag "Re: IC2 mit PCF8577" 
eine Wartezeit von 500ms einfüge, dann leuchten erst 8Segmente, dann ein 
paar andere dazu an, danach gehen die meisten aus, und in den letzten 
500ms gehen alle bis auf 2 aus.

von Marcus (Gast)


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

von Marcus (Gast)


Lesenswert?

...öhm. Pin 1 und 40 natürlich...

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Lesenswert?

oben steht übrigens +32 da ich BP2/A2 zu Vcc verbunden habe.

von Marcus (Gast)


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

von Sam .. (sam1994)


Lesenswert?

Macht es was das 1/2m Kabel zwischen Display und Treiber liegt?

Ich möchte es nicht darüber setzen, da am Ende 2 LCDs angeschlossen 
werden sollen.

Für mich sieht es auch wie ein Verdrahtungsproblem aus, aber ich finde 
den Fehler einfach nicht.

von Sam .. (sam1994)


Lesenswert?

macht es was wenn nc pins verbunden sind?

Ich versteh das nicht, ich hab alle Pins mit allen überprüft, es sind 
keine mehr verbunden.

ich tausch mal display und controller.

von Marcus (Gast)


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

von Marcus (Gast)


Lesenswert?

Lass' die NC Pins NC. Das ist nur ein weiterer Unsicherheitsfaktor.

von Sam .. (sam1994)


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.

von Marcus (Gast)


Lesenswert?

...dann setz' i mal konstant auf 0x01 und dann in einer 2. Version 
Deines Testprogramms auf 0x03. ( for schleife mal auskommentieren )

Was machen die Digits ?

von Sam .. (sam1994)


Angehängte Dateien:

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.

von Marcus (Gast)


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

von Sam .. (sam1994)


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?

von Sam .. (sam1994)


Lesenswert?

wie kann ich eigentlich alle segmente anschalten?

von Sam .. (sam1994)


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.

von Marcus (Gast)


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

von Sam .. (sam1994)


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
      |

von Marcus (Gast)


Lesenswert?

...dann klemm' das das Dipsplay erstmal ab und verifiziere Deine 
ausgegebenen Testpattern direkt am PCF.

Erst wenn das **zweifelsfrei* funktioniert** klemmst Du as Display 
wieder an.

von Sam .. (sam1994)


Lesenswert?

habs grad bei den 0x08 prog getestet stimmt überein bei gezogenem 
Display.
Und auch wenn ich dsa ganze Flachbandkabel ziehe stimmt es mit den 
anderen werten überein.

von Marcus (Gast)


Lesenswert?

Na also. geht doch.

Und welche Schlüsse ziehst Du daraus ?

von Sam .. (sam1994)


Lesenswert?

Das die Software nicht stimmt?
Aber was ist da falsch?

von Marcus (Gast)


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 ?

von Sam .. (sam1994)


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.

von Marcus (Gast)


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 ?

von Sam .. (sam1994)


Angehängte Dateien:

Lesenswert?

Nein ich hab KAbel oder draht brücken genutzt.

Was für ein Verdacht ist das?

von Marcus (Gast)


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.

von Sam .. (sam1994)


Lesenswert?

Da messe ich bei allen Pins 2.5V

von Marcus (Gast)


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.

von Sam .. (sam1994)


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.

von Marcus (Gast)


Lesenswert?

Dasind wohldefierte Lasten an den Ausgängen. das Datenblatt sieht 6k8 
vor.
Lesen !

von Sam .. (sam1994)


Angehängte Dateien:

Lesenswert?

also ich messe mit 2000Hz Abtastfrequenz eine Rechteckähnliche
Schwingung.

Sollten 2000Hz zu niedrig sein, bis 7000 sollte es auch gehen mit ein 
bisschen mehr aufwand.

von Marcus (Gast)


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

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Lesenswert?

Soll ich jetzt den widerstand mit kondesator an den pcf auf dem 
Steckbrett dranhängen, oder nicht?

von Marcus (Gast)


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.

von Sam .. (sam1994)


Lesenswert?

Gut ich hab jetzt an S1-20 6k8 widerstände zu GND hängen. S21-32 ist nc. 
Und OSC ist auf GND der rest ist gleich.

von Marcus (Gast)


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)

von Marcus (Gast)


Lesenswert?

Addendum: Beschaltung als Portextender siehe Fig. 17. Damit kannst Du DC 
messen

von Sam .. (sam1994)


Lesenswert?

sry ich habs jetzt bald. Musste aber erst kapieren, dass ich die ganze 
zeit das falsche Programm auf den µC schreibe und deswegen sich nichts 
ändert.

von Marcus (Gast)


Lesenswert?

:-) das kenn' ich.

In aller regel sollte man dan mal Pause machen.....

von Sam .. (sam1994)


Lesenswert?

ok 0x01 s16 und s24 sind an.
Ich glaub ich werd mal meine led reihen dran hängen, dann wird es 
einfacher.

von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Lesenswert?

noch ein 2. 4 Wert:

4     | 0x01 | 8,14            !!!


Der PCF8577 ist nur wie in Fig17 angeschlossen. Die Pin S1-S32 sind nc. 
Geprüft habe ich sie indem ich mit einem Draht, der über einen 10kOhm + 
LED zu GND führt, über die Pins gefahren bin.

von Frank K. (fchk)


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?

von Sam .. (sam1994)


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

von Frank K. (fchk)


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

von Marcus (Gast)


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....

von Sam .. (sam1994)


Lesenswert?

Danke. Das wars! Es klappt.

Juhu ich muss doch kein teureres Display bestellen (das stromsparend 
ist)!

von Marcus (Gast)


Lesenswert?

Super,
freut mich!

von Sam .. (sam1994)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.