Hallo zusammen, ich programmiere einen STM32F429BI und betreibe damit auch einige I2C Bausteine. Jetzt ist meine Frage, wie ich meine I2C selber genauer erstelle. Ich verwende aktuell eine for Schleife um die kleinen Pausen für den SCL Takt zu erstellen. Jetzt will ich das umbauen, damit ich die vollen 400 kHz aus meinen Bauteilen mitnehmen kann. Ich programmiere in C und würde meine Clock am Liebsten mit dem Quarz oder den internen System Clock. Wie genau mache ich damit einen Timer, damit ich auf die 2,5 µs pro Takt genau komme, oder hat von euch noch jemand eine Idee, wie ich das am Besten mache ? Danke schon mal für eure Hilfe.
Hat der STM32F429BI kein hardware-I2C ? Das wahre das einfachste
Der STM32F429xx hat doch bis zu drei I2C-Interfaces, was hindert den TO daran eines davon zu verwenden?
> Der STM32F429xx hat doch bis zu drei I2C-Interfaces, was hindert den TO > daran eines davon zu verwenden? Er muesste ein Datenblatt lesen. Das geht gar nicht. Datenblaetter meistens laenger wie eine WhatUp Nachricht! Olaf
Unter https://www.st.com/en/microcontrollers-microprocessors/stm32f429bi.html#resource steht die komplette Dokumentation. Dauerte ca 0.28 Sekunden bei Google. Gleich der erste Link.
Raphael K. schrieb: > Wie genau mache ich damit einen Timer, damit ich auf die 2,5 µs pro Takt > genau komme, Das ist Korinthenkackerei, denn die halbe Mikrosekunde (oder was auch immer sonst) beim Betrieb mit I2C Bus herauszuholen ist völlig sinnlos. a) du spürst den Gewinn nicht, kannst den effektiven Gewinn kaum nachweisen. b) Der I2C Bus hört nicht schlagartig auf, jenseits von 400KHz zu funktionieren.
Raphael K. schrieb: > Wie genau mache ich damit einen Timer, damit ich auf die 2,5 µs pro Takt > genau komme, oder hat von euch noch jemand eine Idee, wie ich das am > Besten mache ? Kein Problem. a) Alle 1.25µs wird Timer Interrupt angesprungen. Hin- und Rücksprung, sowie das retten von entsprechenden Registern und Pintoggle brauchen ja kaum Zeit, bleibt dir mehr als genug für main() b) For Schleife rausschmeissen, ein Do loop verwenden. Auf diese Weise kannst du den SCL auf ein paar nanosekunden genau abstimmen, I2C Bausteine mögen es nämlich ganz genau, ein Fehler von mehr als 1ns ist unerwünscht und verschlechtert die Kommunikation unheimlich. P.S. Falls dies nicht hilft, wäre das lesen von entsprechendem Datenblatt und Suche nach eingebautem Hardware-I2C auch hilfreich.
Marc V. schrieb: > Auf diese Weise kannst du den SCL auf ein paar nanosekunden genau > abstimmen, I2C Bausteine mögen es nämlich ganz genau, ein Fehler von > mehr als 1ns ist unerwünscht und verschlechtert die Kommunikation > unheimlich. ROFL (hoffentlich geht das nicht in die Hose ...)
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.