Nabend, habe von Assembler leider nicht so die Ahnung. Wie ändere ich hier die I2C Frequenz auf 400kHz?
:
Bearbeitet durch User
;*********************************************************************** ** ; delay half period ; For I2C in normal mode (100kHz), use T/2 > 5us ; For I2C in fast mode (400kHz), use T/2 > 1.3us ;*********************************************************************** **
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?
Erstmal musst du wissen, mit welcher Taktfrequenz dein uC läuft.
Hallo Wolfgang, zur Mathematik: f = 1/t <==> t = 1/f Damit kann man die Zeiten ausrechnen.
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?
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.
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
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.