Forum: Mikrocontroller und Digitale Elektronik I2C mit Display parallel?


von Martink11 M. (Firma: google) (martink11) Flattr this


Angehängte Dateien:

Lesenswert?

hallo freunde und C-kollegen

ich will ein uhrenbaustein ansteuern und vielleicht noch ein paar 
temperatursensoren über I2C.

das problem ist nur dass an den Pins SCl und SDA ein Grafikdisplay 
daranhängt (KS0108)

(siehe Bild)

ich will jetzt quasi an die beiden pins einfach anknüpfen siehe bild im 
anhang

frage: geht das oder fängt das lcd dadurch zu spinnen an????

das wär nämlich supergut

danke für alle eure antworten!!!

martin!!!!!!!!!!!!

von Jens (Gast)


Lesenswert?

Nein, das geht so nicht. Der I2C im Controller ist ein Hardwaremodul, da 
kannst du im Normalbetrieb nicht mehr auf die IO-Pins zugreifen.

von Anselm 6. (anselm68)


Lesenswert?

DU weisst dass I²C ein Bus ist?
Heisst mehrere IC´s hängen an den selben Strippen.
Einzig auf die I²C Adresse musst du achten, 2mal vergeben gilt nicht.


Anselm

p.S.: Ein I²C-Bauteil reagiert nur wenn auf dem Bus sein Name erscheint 
(Adresse)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du dafür sorgst, daß die /CS-Leitung des Displays bei Nutzung des 
I2C-Busses inaktiv ist (und also das Display seinen Datenbus hochohmig 
lässt), dann sollte es keine Störungen in der Richtung I2C->Display 
geben.

Allerdings ist nicht gewährleistet, daß die Kommunikation mit dem 
Display nicht den I2C-Bus stört; die angeschlossenen I2C-Bausteine 
können das Gewackel an den Leitungen als I2C-Kommunikation 
missinterpretieren.

Obendrein müssen die I2C-Leitungen mit Pullup-Widerständen versehen 
werden; diese könnten den Datenbus des Displays stören.

Alternative: Display an anderen Port des µC hängen, oder I2C-Bus per 
Bitbanging als Software-I2C auf anderen ungenutzten Portpins 
implementieren.

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Hallo

also das letztere von Rufus täte mir schon recht gut gefallen.
Dieser Software I²C aber hast du das schon mal gemacht.
Wenn du das schon mal hingekriegt hast, könntest du mir bitte vielleicht 
einen Code für einen AVR zukommen lassen.

(funktioniert das auch wirklich wie ein echter I²C ?)

Und JA ich weiß schon was ein I²C-Bus ist, habe aber noch nie damit 
gearbeitet.
Ich bin sozusagen ein fortgeschrittener Anfänger in C und Azubi zum 
Elektroniker.

Aber noch mal zum LCD, diese Signale stören doch eigentlich nur das LCD 
wenn es zur gleichen Zeit angesteuert wird oder?
Wenn ich sicherstellen könnte dass immer nur eines von beiden arbeitet 
ginge es dann?
Solange der R/W-Pin und die Controll-Pins nicht angesteuert werden 
dürfte es das Display doch wenig kümmern was an seinen Datenpins los 
ist???

danke schon mal

PS: ich kann den Port nicht so einfach tauschen, es sei denn ich ätze 
noch mal !

von holger (Gast)


Lesenswert?

>Solange der R/W-Pin und die Controll-Pins nicht angesteuert werden
>dürfte es das Display doch wenig kümmern was an seinen Datenpins los
>ist???

Das ist richtig. Aber hast du auch den zweiten Teil von Rufus
Post gelesen? Die LCD Ausgaben können dein I2C stören.

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

ja aber solange nur ein SLAVE was sendet interressiert das ja nicht 
oder?
es muss ja erst der MASTER eine "Anfrage" senden damit ein SLAVE 
"antwortet" oder wie ist das?

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Hallo

also mein letzter beitrag war irgendwie ein mist!

ich würde mich jetzt aber viel mehr über einen softwaremäßigen I²C 
interessiren

wenn jemand so was wie eine kleine erklärung hätte oder noch besser wäre 
natürlich ein kleines Beispiel, bitte bitte

Servus!

von Ben _. (burning_silicon)


Lesenswert?

mit ein wenig pech sendest du bei deinen LCD-daten ausgerechnet 
irgendeine master-anfrage. woher sollen die I2C geräte den unterschied 
zwischen LCD-daten und I2C daten erkennen? und wenn das passiert wird 
auch irgendein slave antworten und dir die LCD-daten müllen.

es gibt I2C multiplexer, du könntest mit so einem baustein den I2C für 
die zeit abschalten in der du das LCD bedienst. in etwa genauso wie die 
steuerleitungen das beim LCD machen.

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Hallo

es würde doch mit so einem Analogschalter gehen oder?

HCF 4066
(QUAD BILATERAL SWITCH FOR TRANSMISSION OR
MULTIPLEXING OF ANALOG OR DIGITAL SIGNALS)


http://www.datasheetcatalog.org/datasheets/90/206772_DS.pdf


Hat 4 Switches genau das brauch ich doch.

     1. SDA - Data1 Display
     2. SCL - Data0 Display
     3. SDA - SDA I²C Bausteine
     4. SCL - SCL I²C Bausteine

Den Rest wie gegenseitige Verriegelung mach ich per software
und die 4 Control-Pins für den Switch hab ich auch noch übrig.


PS: wäre immer noch an einer Software-I²C Lösung interressiert

danke

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

noch viel besser ist glaube ich der 4551!!!!

http://www.datasheetcatalog.org/datasheets/90/364898_DS.pdf

von Klaus (Gast)


Lesenswert?

Wie wäre es SCL(PC0) und SDA (PC1)  mit Dioden entkoppeln und danach SDA 
und SCL mit Pullup  Widerständen gegen VCC.
Zu den Startvorrausetzungen gehört dass der I²C-Bus frei sein muss also 
SDA und SCL  auf High.
Es sollte eigentlich zu keinen Störungen kommen außer, das zufällig beim 
Datensenden zum LCD,eine gültige Adresse erzeugt wird und einen 
I²C-Baustein anspricht.  Dürfte allerdings nicht vorkommen.
Allerdings müsste man dafür sorgen, dass während Daten zu einem 
I²C-Baustein gesendet wird, keine Daten zu dem LCD gesendet werden. 
Z.B.  durch einen Interrupt gestört wird.

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Servus Klaus

was genau meinst du mit ENTKOPPELN??

Diode in Reihe???

SDA sendet und empfängt ja in zwei Richtungen.

versteh das jetzt nicht ganz

bitte erklär das mal.

vielleicht ne kleine skizze

danke dere!

von Klaus (Gast)


Lesenswert?

Hi!


OK vergiss mein Vorschlag des würde nur in einer Richtung gehen.

Hab aber trotzdem noch einen.

zum Display müssen ja nicht jede µs Daten gesendet werden.
Versuch es per Software so zu machen das Du Daten zum Display nur dann 
sendest wenn der I²C-Bus frei ist.

Evtl. müsstest  noch in DB0 und DB1 Widerstände reinhängen so 1K.
Auf jedenfall müssen die Leitungen SDA und SCL gegen VCC geschaltet 
werden
mit 4,7k.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Hab noch einen.

Du könntest ja, das LCD auch an den I²C-Bus ran hängen. Das würde dir 
ein paar I/O's einsparen. Wenn dein LCD auch im 4-Bit-Mode angesteuert 
werden kann, brauchst nur einen PCF8574  wenn nicht dann eben zwei.

von Hauke S. (hauke)


Lesenswert?

Vorschlag zu Güte

Uhrenmodul und LCD Datenbus (via PCF8574) an den I²C Bus (=TWI-Bus).
Steuerleitungen des LCD direkt an die µC Ports.

Warum?
Weil die teilweise Bidirektionale Übertragung von Daten und 
Steuerleitungen über einen PCF8574 für einen Anfänger etwas verwirrend 
sein kann.


Die I²C Leitungen mit einem anderem Bus zu Teilen, davon halte ich 
überhaupt nichts. Das ist extrem anfällig für Fehler und der Aufwand 
steht in keinem Verhältnis zum Nutzen.

siehe Rufus t. Firefly: "Obendrein müssen die I2C-Leitungen mit 
Pullup-Widerständen versehen werden; diese könnten den Datenbus des 
Displays stören."
Die Displaydaten können wiederum unter Umständen wie I²C Bus-Signale 
aussehen, und könnten dir die Uhr umprogrammieren (sehr 
unwahrscheinlich, aber möglich).
Der I²C hat nämlich keine /CS Leitung und ist deshalb immer aktiv.
Weiterhin müsstest du für jeden Displayzugriff (bei Verwendung des 
Hardware TWI Moduls) das Modul abschalten (um die Leitungen 
freizugeben).
Wenn du die Displaydaten gesendet hast muss du das TWI Modul wieder 
reinitialisieren, und danach den Bus aus dem evt. undefinierten Zustand 
herausholen (mindestens 8x Stopp-Kommando. nötig)

Alles ein wenig kitzlig für erste Projekt.


Wegen Software TWI haben mit die App-Notes von Atmel sehr weiter 
geholfen. So das ich teilweise auch auf einem ATMega8 SW-TWI verwende.
Allerdings programmiere ich in Assembler.

bis dann
Hauke

von Helmut L. (helmi1)


Angehängte Dateien:

Lesenswert?

@Martin 567 (martink11)

Ich habe Soft I2C mal fuer einen AVR gemacht. Es handelt sich um die 
Ansteuerung eine Serielle I2C EEPROMS. Ich hoffe das hilft dir.

Gruss Helmi

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Hallo Helmut!

das sieht eigentlich ganz gut aus.

eine frage:   was heißt "sendACK", "sendNACK"... usw. (dieses ACK und 
NACK)

sonst gefällt mir das, sieht vielversprechend aus.



@Klaus:
das mit diesem PCF8574 ist zwar ne gute Idee aber ich habe ja für das 
"KS0108" Display schon ne geeignete Header-Datei die funktioniert 
tadellos.
Ich glaube ich als eigentlicher C-Anfänger bekomme das nicht hin das ich 
diese umschreibe oder gar neu mache. Das ist mir zu schwierig und 
kompliziert.

aber danke!!!

von Klaus (Gast)


Lesenswert?

Dann solltest vorerst auf I²C - Bus  sachen verzichten wenn es dir zu 
kompliziert ist.

nACK =  not Acknowledge   =  keine Bestätigung
ACK  =  Acknowledge       =  Bestätigung

nur zu Info

von Helmut L. (helmi1)


Lesenswert?

>eine frage:   was heißt "sendACK", "sendNACK"... usw. (dieses ACK und
>NACK)

Die eine Routine sendet ein ACK zum I2C Teilnehmer die andere ein NACK .
Damit wird dem I2C Slave mit geteilt das noch ein Byte ausgelesen werden 
soll. Wird in meiner Routine zum Block auslesen gebraucht. Kann sein das 
du das in deiner Ansteuerung nicht brauchst.

Was fuer ein Uhrenbaustein hast du den?
Ich habe das mal fuer einen DS3231 von Maxim gemacht.

Gruss Helmi

von Martink11 M. (Firma: google) (martink11) Flattr this


Lesenswert?

Hallo Helmut!

also ich hätte den DS1307 genommen, für den würde ich aber schon was 
zusammenbringen.

ich habe nur das dumme problem dass ich eine platine die ich vor nem 
halben jahr geätzt habe erweitern wollte um eine echte Uhr (bisher über 
timer gelöst) und vielleicht ein-zwei Temperatursensoren DS1820??

es aber nicht geht da ich ja dieses Grafikdisplay dran hab.
ursprünglich ist das ne platine um das Umdrehungssignal eines 
Stromzählers dass ich über nen infrarotsensor abtaste zu erfassen und 
auszuwerten.
Am display zeigt sich dann der Tagesertrag von Heute und Gestern und die 
aktuelle Leistung, zusätzlich kann man noch ein Diagramm von Heute und 
Gestern anzeigen lassen.
(super extra: die LCD-Beleuchtung ist über PWM und Transistor 
automatisch dimmbar)  :)

danke für alles!

von Helmut L. (helmi1)


Lesenswert?

>also ich hätte den DS1307 genommen, für den würde ich aber schon was
>zusammenbringen.

Der hat aber den Nachteil das er einen externen Quarz braucht und dann 
abgeglichen werden muss. Der DS3231 ist einer der genausten RTC auf dem 
Markt. Der hat eine interne Temperaturkompensation. Wenn man etwas in 
Serie bauen will kostet der Abgleich Geld. Auch möchte der Kunde eine 
genaue Uhr.

Gruss Helmi

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.