mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software I2C -> Frequenz ändern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jan H. (janiiix3)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nabend,

habe von Assembler leider nicht so die Ahnung.
Wie ändere ich hier die I2C Frequenz auf 400kHz?

: Bearbeitet durch User
Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;*********************************************************************** 
**
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz),   use T/2 > 1.3us
;*********************************************************************** 
**

Autor: Jan H. (janiiix3)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> ;*********************************************************************** **
> ; delay half period
> ; For I2C in normal mode (100kHz), use T/2 > 5us
> ; For I2C in fast mode (400kHz),   use T/2 > 1.3us
> ;*********************************************************************** **

Sagt mir jetzt das ich was ändern muss bzw. Was anderes nutzen soll... 
Nur was genau?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal musst du wissen, mit welcher Taktfrequenz dein uC läuft.

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfgang,

zur Mathematik: f = 1/t <==> t = 1/f

Damit kann man die Zeiten ausrechnen.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl M. schrieb:
> zur Mathematik: f = 1/t <==> t = 1/f
>
> Damit kann man die Zeiten ausrechnen.

Wie meinen?

In i2c_delay_T2  in i2cmaster.S werden Taktzyklen des Prozessors 
verdaddelt. Wieviele das sein müssen, hängt von der uC-Taktfrequenz und 
von der erforderlichen Verzögerung ab.

Was willst du da mit f = 1/t?

Autor: Jan H. (janiiix3)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Karl M. schrieb:
> zur Mathematik: f = 1/t <==> t = 1/f
> Damit kann man die Zeiten ausrechnen.
>
> Wie meinen?
>
> In i2c_delay_T2  in i2cmaster.S werden Taktzyklen des Prozessors
> verdaddelt. Wieviele das sein müssen, hängt von der uC-Taktfrequenz und
> von der erforderlichen Verzögerung ab.
> Was willst du da mit f = 1/t?

Meine CPU läuft auf 8MHz.

Autor: Dirk B. (dirkb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan H. schrieb:
> Wolfgang schrieb:
>> ;*********************************************************************** **
>> ; delay half period
>> ; For I2C in normal mode (100kHz), use T/2 > 5us
>> ; For I2C in fast mode (400kHz),   use T/2 > 1.3us
>> ;*********************************************************************** **
>
> Sagt mir jetzt das ich was ändern muss bzw. Was anderes nutzen soll...
> Nur was genau?
X MHz* 1.3 = T bspw. 8*1.3=ca.10T
                    ; 7T
2c_delay_T2:        ; 4 cycles ;stehen lasen
     nop nop nop; 3    ; <-fehlende nop's für 10T  
        ret         ; 3  ;stehen lassen  "

ist ein bisschen schwierig das anschaulich zu schreiben (und die rjmps 
um nop's speichersparend zu implementieren machen mMn den Code nicht 
lesbarer)

edit: codeformatierung .. und / mit * verwechselt

: Bearbeitet durch User
Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es diese Lib nicht auch in c?
Dann könnte man bequem mit _delay_us() die Zeiten einstellen.
Für umständlichen Assembler besteht jedenfalls keinerlei Grund.

Autor: Dirk B. (dirkb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Gibt es diese Lib nicht auch in c?
dafür machst du besser einen eigenen Thread auf, wenn die Frage nur 
einfach "Frequenz ändern" ist

> Dann könnte man bequem mit _delay_us() die Zeiten einstellen.
das ist sicherlich bequemer als aufwendig eine Handvoll "nop" zu 
notieren, aber solche Bequemlichkeit kann schnell zu erlernter 
Hilflosigkeit führen und bei einem beängstigenden Aufwand von mehreren 
nop sogar die Kompetenz  ein Hilfegesuch eigenständig zu stellen 
gefährden.

> Für umständlichen Assembler besteht jedenfalls keinerlei Grund.
es gibt sicherlich Menschen die lieber umständliche Suchanfragen 
bevorzugen, anstatt einfach ein paar nop zu schreiben. Vielleicht 
überfordert die umständliche Multiplikation zweier Zahlen auch bequeme 
Nutzer, sodass sie eine Lib mit vormultiplizierten Zahlen erfragen.

Autor: Jan H. (janiiix3)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirk B. schrieb:
> 2c_delay_T2:        ; 4 cycles ;stehen lasen
>      nop nop nop; 3    ; <-fehlende nop's für 10T
>         ret         ; 3  ;stehen lassen  "

Wenn ich das jetzt so einfüge kommt ein Fehler. Kann ich das etwa nicht 
direkt so einfügen?
Wie gesagt habe von Asembler keine Ahnung.

Autor: Mario M. (thelonging)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jedes NOP muss auf eine eigene Zeile.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan H. schrieb:
> Wenn ich das jetzt so einfüge kommt ein Fehler.

Schön, dann lies dir den Text der Fehlermeldung einfach mal durch oder 
poste ihn hier.

> Kann ich das etwa nicht direkt so einfügen?

Kannst du schon, wird aber zu einer Fehlermeldung führen.
Schreibe mal jedes nop in eine eigene Zeile, ggf. mit Kommentar 
dahinter ;-)
Die ";" leiten einen Kommentar ein

> Wie gesagt habe von Asembler keine Ahnung.
Ein paar elementare Grundlagen können nie schaden

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.