www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C mit einem AT89C51ED2 > 100khz


Autor: Norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ist es möglich mit einem  AT89C51ED2 einen Takt für I2C zu erzeugen der 
größer als 100khz ist?

Ich würde gerne einen Takt zwischen 200 und 400 khz erzeugen wollen aber
der  AT89C51ED2 scheint da nicht geeignet zu sein.

Wäre nett wenn jemand eine Antwort hätte.


MfG
Norad

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Norad wrote:
> Ich würde gerne einen Takt zwischen 200 und 400 khz erzeugen wollen aber
> der  AT89C51ED2 scheint da nicht geeignet zu sein.

Der ED2 hat kein HW-I2C, Du mußt es in SW machen (nur Single Master 
möglich).

In Assembler sind 400kHz kein Problem.


Peter

Autor: Norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter!

Danke für deine Antwort!

Allerdings bekomme selbst in Assembler nichtmal 200khz hin, weil jeder 
Befehl entsprechnd Zykluszeit benötigt. Ausser ich aktiviere X2 modus.

Hier mal ein kleiner Auschnitt der sende routine.

I2C_WBYTE:
   PUSH  PSW
   MOV R3,#08h       ;Zähler zur Ausgabe von 8 Bits
;### Schleifenbeginn  #####
WB_LOP:
   RLC A             ;Bit vom Akku ins carry-bit schieben
   MOV SDA,C         ;Carry-Bit auf Datenleitung ablegen
   SETB SCL          ;Clock-Takt HIGH Bit wird gesendet
   LCALL _4us        ;SCL High-Time
   CLR SCL           ;Clock-Takt LOW es können neue Daten auf SDA 
angelegt werden.
   CLR SDA           ;Datenleitung zurücksetzen
   DJNZ R3,WB_LOP    ;Wiederhole solange bis das Datenbyte gesendet 
wurde
   SETB SDA          ;9 bit für Acknoweldge
   SETB SCL          ;Bereit zum empfang des Acknowledge-Bit
   MOV C,SDA         ;Acknowledge-Bit muss Low sein
   LCALL _4us        ;SCL High-Time
   CLR SCL           ;Clock-Takt LOW es können neue Daten auf SDA 
angelegt werden.
   CLR SDA           ;Datenleitung zurücksetzen
   POP   PSW
RET


Vielleicht hast Du noch einen Tipp wie man das senden schneller machen 
kann.


Mfg
Norad

Autor: Norad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Timning!

Vielleicht messe ich ja nur falsch.

Autor: Norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinen den die anderen Experten dazu?

Autor: Pieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin moin,

welche Taktfrequenz benutzt Du?
Die schnellste Variante:

;IN:    I2C := [A]
;OUT:    CY  := ACK
I2C_WBYTE:  REPT  8
    RLC  A
    MOV  I2C_SDA, C
    SetB  I2C_SCL
    CLR  I2C_SCL
  EndR
    SetB  I2C_SDA
    SetB  I2C_SCL
           MOV  C, I2C_SDA
    CLR  I2C_SCL
    RET

mfg
Pieter

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.