I2C mit einem AT89C51ED2 > 100khz

Gast #659986
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
#659998
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
Gast #660025
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
Gast #660368
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren