www.mikrocontroller.net

Forum: Compiler & IDEs Fleury I2C mit 400kHz


Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, das mit den 100kHz im Header hab ich überlesen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was ist mit der Halbierung der Quarzfrequenz?

Mfg Michael

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.