Forum: Mikrocontroller und Digitale Elektronik I²C Fragen


von Xeus (Gast)


Lesenswert?

Hi,
bin gerade dabei mit Hilfe von I²C zwei mega16, einen PCF8583 und ein
ATMEL 256 EEPROM mit einander zu verbinden.
ich habe hierzu von einem m16 die sda und die scl leitung hin zu allen
anderen ic gelegt. am ende der leitungen hab ich zwei 10k Widerstände
an V+ gelegt. nun wollt ich fragen ob ich das so richtig gemacht habe.

gruß

xeus

von Rahul D. (rahul)


Lesenswert?

Wo hast du den Wert von 10k her?

von Xeus (Gast)


Lesenswert?

niergenswo, das ist ja genau mein problem. ich hab nichts gefunden,
welchen wert ich nehmen soll.

von Gerald (Gast)


Lesenswert?

Hallo,

ja, das ist ok so, ich hab 4,7k als Abschluss genommen.
Bei kurzen Verbindungen spielt der Abschlusswiderstandswert keine
grosse entscheidende Rolle.
Wichtig ist nur, dass definierte Pegel auf dem Bus herrschen und das
wird durch den 10k-Widerstand erreicht, zumal dort auch keine hohe
Übertragungsraten herrschen.

Gruss

Gerald

von Xeus (Gast)


Lesenswert?

komischerweise hab ich aber ein riesen prob mit dem pcf8583, der läuft
in lichtgeschwindigkeit. an osci und an osco hab ich ein quarz mit
32.768 khz angeschlossen, der mit einem 22pF auf v+ geht.
aber immer wenn ich die uhr abfrage fetzt sie einfach los

von Xeus (Gast)


Lesenswert?

gibt es irgendwie die Möglichkeit zu testen ob die busfrequenz richtig
ist?

von Xeus (Gast)


Lesenswert?

hab jetzt mal am oszi des pcf die frequenz gemessen, scheint richtig zu
schwingen auf ungenaue 32,768.

was müsste ichn für einen wert an osci messen

von Hauke Sattler (Gast)


Lesenswert?

Das hört sich sehr nach einem Problem an welches ich mal mit einem
PCF8593 hatte. Die schreiben zwar das der Resetstate des Control/status
registers $00 ist (siehe Datenblatt Seite 6), aber manchmal legt die Uhr
auch in einem anderen Funktionmode los als angegeben. Wenn das zufällig
der 50Hz modus ist, dann läuft die Uhr natürlich 655mal schneller. Also
schreibe zur Sicherheit zuerstmal $00 in das Control/status register und
setze dann erst die Zeit.
bis dann
Hauke

von Xeus (Gast)


Lesenswert?

das hab ich eigentlich:

i2cstart
i2cwbyte &HA0
i2cwbyte 0
i2cwbyte &HC
i2cstop

stimmt das so nicht?

von Hauke Sattler (Gast)


Lesenswert?

Probier lieber erstmal

i2cstart
i2cwbyte &HA0
i2cwbyte &H00
i2cwbyte &H00
i2cstop

mal schauen ob es so funktioniert

P.S.
man sollte sich abgewöhnen dezimal und hex zu mischen.
Weiterhin sollte man hexzahlen immer zwei oder vierstellig angeben.
Beides kommt der Übersichtlichkeit zugute und vermeidet Fehler.

bis dann
Hauke

von Xeus (Gast)


Lesenswert?

Habs jetzt mal mit dem sample clock.bas getestet, natürlich habe ich
SDA, SCL umgestellt. aber ich krieg immer nur ff:ff:ff Err.
was mach ich falsch?
Adr: hab a0 auf gnd gesetzt, wie kann ich in dem beispiel die adresse
setzen?

von Xeus (Gast)


Angehängte Dateien:

Lesenswert?

ju hu habs geschaft. wollte nun den code in mein prog einflechten, aber
beim compelieren kommt andauernd der fehler "Adress already
occupied(TM1)"

an was könnte das liegen

von Xeus (Gast)


Lesenswert?

Habs mal nur mit der clock.bas aus den samples versucht, und es
funktioniert einwandfrei. Nun hät ich noch eine kleine frage. wie stell
ich es an, dass ich über den pc an den mc 6 bytes mit je einem
dezimalwert sende, mit den inhalten: tag, monat, jahr, std, min, sek.
diese werte soll der mc dann nehmen, und damit die ühr stellen.

hat von euch schon mal jemand so etwas in der art gemacht?

gruß

xeus

von Hauke Sattler (Gast)


Lesenswert?

Ja sowas habe ich schon mal gemacht, jedoch etwas komfortabler.
Ich habe auf einem Mega16 einen Parser geschrieben, welcher über die
Serielle Schnittstelle Textbefehle bekommt, diese auswertet und dann
die passenden Befehle über den I²C Bus sendet (auf 24LC256 und
PCF8593).

z.B.
set date Friday 14. October 2005
set time 09:14:31
get time
get date
get memory
delete memory

Jedoch ist das alles in Assembler fast ohne Doku gecoded.
Also sehr schwer nachvollziehbar.
Aber Ich kann dir zur not nen Schaltplan für die  Mega16 Beschaltung
(auf einem STK500) und das HEXfile zum Flashen schicken.

bis dann
Hauke

von Xeus (Gast)


Lesenswert?

du weißt wohl nicht zufällig wie man das in bascom umsetzt?

von Hauke Sattler (Gast)


Lesenswert?

Naja Bascom war grade zu meiner Anfangszeit von Microcontrolern. Aber da
mir Bascom immer den Speicher zugeknallt hat sobald ich einen Interrupt
hatte, bin ich sehr schnell auf Assembler umgeschwenkt.
Deshalb habe ich nie etwas mit UART in Bascom gemacht.
Tut mir leid.

cu
Hauke

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.