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


von Norad (Gast)


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

von Peter D. (peda)


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

von Norad (Gast)


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

von Norad (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein Timning!

Vielleicht messe ich ja nur falsch.

von Norad (Gast)


Lesenswert?

Was meinen den die anderen Experten dazu?

von Pieter (Gast)


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

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.