www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PCF 8583 / I2C -Problem


Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte an meinen AVR 2313 den Uhrenchip "PCF 8583" von Phillips 
anschließen (Clock an PortD/Pin2; Data an PortB/Pin0; Interrupt vorerst 
nicht angeschlossen).

Leider klappt das alles noch nicht so ganz. Also, wenn ich es recht 
sehe, kann ich Daten schreiben (Ack.-Bit = GND). Nur kann ich nichts 
auslesen! Oder besser gesagt: Der Chip zieht Data niemals herunter, egal 
bei welcher Adresse usw. Lege ich in dieser Phase "von Hand" Data auf 
GND klappts schon. Deshalb bin ich mir nicht sicher, daß es an dem 
Programm liegt.

Anderseits will auch ein Temp.-I2C-Baustein nicht laufen (gleiches 
Phänomen).

Kann mir jemand helfen?

Beim suchen, hab' ich gesehen, daß wolli_r den Chip schon länger 
einsetzt. Hast Du Tips für mich?

Am Anhang mein Programm.

Vielen Dank schonmal!!! :-)

   Sebastian

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze den DS1307, mit Puffer-Batterie, läuft astrein mit kurzem 
Listing unter FASTavr, evtl. umsteigen.

Gruss
Tom

Autor: Jens Fiedelak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

hört sich an, als ob Du die SDA Leitung, bzw. den Pin nicht auf Eingang 
schaltest wenn Du Daten auslesen willst.

Gruß Jens

Autor: hebel23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Sebastian,

versuch es mal mit jeweils einem Pullup-Widerstand (10k oder so) für die 
beiden I²C-Leitungen.

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke erstmal für die Tips!

Ich habe allerdings sowohl an den Eingang als auch an die Pullups 
bereits gedacht.

Und einen anderen Chip will ich nicht verwenden (hab' schon ein paar 
PCFs gekauft).

Findet jemand noch 'nen Fehler im Programm?!?

Danke!

Sebastian

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm... Ich hab Deinen Code nur so überflogen. Ich muß mal kramen, ich 
habe komplette I²C-Routinen irgendwo auf meiner Platte, ich mail sie Dir 
bei Gelegenheit.
Was mir auffiel:
Du ignorierst das ACK in der Routine write_byte. Das darfst Du, 
allerdings mußt Du trotzdem einen CLK-Impuls generieren, jedes Byte 
braucht 9 CLK-Impulse, auch wenn Du den ACK nicht verwendest. Weiter hab 
ich jetzt noch nicht durchgeschaut.
Dann noch als Tipp: Setze das Port-Bit des SDA und des SCL auf 0, und 
schalte mit den entsprechenden Bits des DatenRichtungsRegisters, 
allerdings invertiert. Beispiel:
sbi DDRB,sda = SDA auf 0
cbi DDRB,sda = SDA auf Tristate (über ext. Pull-up auf high).
Dies entspricht mehr den Spezifikationen des I²C-Bus. Mit Deiner Methode 
gehts zwar auch, aber Du mußt höllisch aufpassen, sonst gibts einen 
Crash auf dem Bus.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Code:

http://www.ft-fanpage.de/i2c.asm

Eh jetzt jemand rummeckert: Der Codeschnipsel ist 1. total aus dem 
Zusammenhang gerissen und 2. sicherlich nicht "schön" geschrieben. Ich 
habe irgendwann mal Assembler gelernt, als man Registern nicht per .def 
Namen geben konnte - und das ist halt drin bei mir, ich bin ein echter 
Register-Purist g
Die benutzten Register könnt ihr euch selber raussuchen - und auch 
behalten ;-)

Ehe ichs vergesse: Gerade I2C-Speicher (z.B. EEPROMs) wollen bei 
Lesezugriffen beim letzten Byte ein nACK. Die oben gezeigte Routine 
benutzt bei i2c_get_byte das Bit 0 von R27 zur Entscheidung, ob ACK oder 
nACK ausgegeben wird. In Bit 7 von R27 ist ein Fehler-Bit, das ggf. 
ausgewertet werden kann. Es wird durch nACK bei i2c_send_byte gesetzt.

Falls jemand interesse an einem Multimaster I2C-Code für den 2313 hat 
(läuft zu 100% im Interrupt.... Aber da garantiere ich für 
Null-Durchblick.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmpf -".asm" ist wohl irgendwie reserviert.
http://www.ft-fanpage.de/i2c.asm_

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.