Software I2C -> Frequenz ändern

Gast #5406989
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
;*********************************************************************** 
**
OP #5406993
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?
Gast #5407003
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?
OP #5407008
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.
Gast #5407009
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?
1
X MHz* 1.3 = T bspw. 8*1.3=ca.10T
2
                    ; 7T
3
2c_delay_T2:        ; 4 cycles ;stehen lasen
4
     nop nop nop; 3    ; <-fehlende nop's für 10T  
5
        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
Gast #5407089
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.
Gast #5407226
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

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