Forum: Compiler & IDEs Fleury I2C mit 400kHz


von Günni (Gast)


Lesenswert?

Hallo,

ich bin etwas überfordert. Ich möchte Fleurys I2C Lib mit 400kHz
nutzen. Wie muß ich denn die Delays anpassen für einen MEGA128 mit 2
MHz?

;*********************************************************************** 
**
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz),   use T/2 > 1.3us
;*********************************************************************** 
**
  .stabs  "",100,0,0,i2c_delay_T2
  .stabs  "i2cmaster.S",100,0,0,i2c_delay_T2
  .func i2c_delay_T2  ; delay 5.0 microsec with 4 Mhz crystal
i2c_delay_T2:        ; 4 cycles
  rjmp 1f      ; 2   "
1:  rjmp 2f      ; 2   "
2:  rjmp 3f      ; 2   "
3:  rjmp 4f      ; 2   "
4:  rjmp 5f      ; 2   "
5:   rjmp 6f      ; 2   "
6:  nop          ; 1   "
  ret          ; 3   "
  .endfunc     ; total 20 cyles = 5.0 microsec with 4 Mhz crystal


Grüße
Günni

von Werner B. (Gast)


Lesenswert?

Nach Eva Zwerg: 10 cyles (die hälfte) weglassen. Bei jedem rjmp steht
die Anzahl cycles die dieser Befehl benötigt. Nur noch Sprungziel
anpassen und gut ist das.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nö, man muss die Verzögerung ja vierteln (100 kHz -> 400 kHz),
also 15 der 20 Zyklen weglassen.  Das geht mit dem call/ret
Konzept schon nicht mehr, da bereits ohne allen ,,Füllstoffs''
7 Zyklen für call und ret draufgehen.  Man müsste dann entweder
auf ein inline-delay ausweichen (z. B. 5 NOPs) oder einfach
damit leben, dass die 7 Zyklen eben nur ca. 300 kHz Takt
ergeben.

von Werner B. (Gast)


Lesenswert?

Ups, das mit den 100kHz im Header hab ich überlesen.

von Michael (Gast)


Lesenswert?

Und was ist mit der Halbierung der Quarzfrequenz?

Mfg Michael

von Dirk (Gast)


Lesenswert?

@Michael
Wieso Halbierung, dann würde es ja noch langsamer werden.

Wie müsste es denn mit "Inline-NOPs" aussehen? Ich habe das gleiche
Problem und würde gerne bei 2 MHz Takt bleiben. Da ich keine Ahnung von
Assembler habe wäre ich für einen Codeschnipsel sehr dankbar...


Dirk

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.