I2C/TWI-Programmierungsvideo. Den Code erstellen!
Teilen
I2C/TWI Programmierung Video. Den Code erstellen!
Dieses Video erklärt die I2C- oder TWI-Programmierung ausführlich. Ein Beschleunigungsmesser mit I2C-Funktionalität dient als Slave-Gerät und ein ATMega 324p ist der Master in diesem Beispielszenario.
Das obige Video ist exklusiv, und durch den Kauf der Inhalte unterstützen Sie unsere Bemühungen, damit wir mehr Inhalte und viele weitere Videos (kostenlos und exklusiv) produzieren können. Vielen Dank, dass Sie diesen exklusiven Inhalt in Betracht ziehen!
Durch den Kauf dieser exklusiven Inhalte können Sie ein Video erwarten, das die Programmierung im Zusammenhang mit I2C oder TWI zwischen einem Atmel-Mikrocontroller und dem ADXL 345-Beschleunigungsmesser demonstriert. Das erste Video liest die ID auf dem ADXL 354 unter Verwendung von I2C/TWI-Steuerung wie Start, Repeat Start, Senden von Slave-Adresse und Schreib- und Lesebits, Senden und Empfangen von Daten, Senden von ACK oder NACK und Stop. Alle diese Steuerungen werden ausführlich erklärt, und Sie können mir bei der Programmierung und dem Testen dieser Funktionen folgen. Wenn Sie die kostenlosen Videos, die als Voraussetzung für dieses Video dienen, noch nicht gesehen haben, folgen Sie bitte diesem Link.
Der Initialisierungsteil des Programms wird zwei Hauptregister enthalten, die zwei Zwecken dienen: dem Prescaler und der tatsächlichen Bitrate. Die Bitrate ist die Geschwindigkeit, mit der jedes Bit über die SDA-Leitung gesendet wird. Die SCL ist der Herzschlag, der mit der Bitrate pulsiert.
Um die Dinge wirklich einfach zu halten, wird empfohlen, den Prescaler auf Null zu belassen. Dies liegt nicht daran, dass der Umgang mit einem Prescaler schwierig ist, sondern weil das TWSR (Two Wire Status Register) den Prescaler enthält und auch als Status während der Übertragung dient. Wenn ein Prescaler in diese Zahl gemischt würde, wäre der Status schwieriger zu bestimmen.
Wenn Sie den Prescaler ändern möchten, weil Ihr Mikrocontroller eine sehr hohe CPU-Taktfrequenz hat, können Sie das TWSR-Statusregister verschieben, sodass der Prescaler wegfällt, wenn Sie nur den Status benötigen, oder Sie können die Werte des Status mit dem enthaltenen Prescaler bestimmen. Siehe die Liste der Statuswerte unten. Wenn Sie einen Prescaler verwenden, addieren Sie einfach diesen Wert zum Statuswert.
TWSR - TWS7 | TWS6 | TWS5 | TWS4 | TWS3 | –---- | TWPS1 | TWPS0
TWSR - --7--|---6--|---5--|---4--|---3--|---2---|---1---|---0-----
TWSR - (----------Status Bits-----------)-------(-Prescaler Bits-)
TWSR wird 0x08 nach einer Startbedingung sein
Die SCL-Taktrate sollte 100kHz betragen
Die Berechnung des TWBR ist relativ einfach. Zuerst müssen Sie die gewünschte Geschwindigkeit kennen, die der SCL haben soll. Im Standardmodus beträgt diese Geschwindigkeit maximal 100 KHz und im schnellen Modus maximal 400 KHz. Beachten Sie, dass dies maximale Frequenzen sind. Das bedeutet, dass Sie I2C oder TWI immer noch mit niedrigeren Geschwindigkeiten kommunizieren können. In dem Beispiel, das ich in dem Video auf dieser Seite zeige, verwende ich eine Frequenz von 50 KHz. Um den TWBR (Two Wire Bit Rate Register) zu bestimmen, können Sie diese Formel verwenden:
TWBR (TWI Bitraten-Register) - wird 2 für eine 50kHz SCL sein
TWBR - TWBR7 | TWBR6 | TWBR5 | TWBR4 | TWBR3 | TWBR2 | TWBR1 | TWBR0
TWBR - --7---|---6---|---5---|---4---|---3---|---2---|---1---|---0----
Sie sehen dieses TWPS? Sie fragen sich, was das ist! Das sind die Prescale-Bits, die im TWSR-Register gefunden werden. Beachten Sie die Bits im TWSR, wo ich das TWSR oben beschrieben habe. Die Bits heißen TWPS0 und TWPS1. Lassen Sie uns etwas Algebra machen, um es einfacher zu machen, TWBR zu finden. Willkommen in der Algebra-Klasse!
SCL_Clock = (CPU_Clock_Rate) / 16 + 2(TWBR) (Wir können 4 ^ TWPS entfernen, da der Prescaler 0 ist)
Kreuzmultiplikation:
SCL_Clock x (16 + 2(TWBR)) = CPU_Clock_Rate
Teilen Sie SCL_Clock durch beide Seiten, um es auf die andere Seite der Gleichung zu bringen:
16 + 2(TWBR) = CPU_Clock_Rate / SCL_Clock
Subtrahieren Sie 16 von beiden Seiten:
2(TWBR) = (CPU_Clock_Rate / SCL_Clock) - 16
Teilen Sie beide Seiten durch 2:
TWBR = ((CPU_Clock_Rate / SCL_Clock) - 16) / 2
Da! Jetzt haben Sie eine einfache Formel, die Sie im Programm anwenden können.
Oder Sie können die folgende Tabelle verwenden, um es einfacher zu machen.
---------16--------|-12-|------400-----
---------16--------|-72-|------100-----
---------14.4------|-10-|------400-----
---------14.4------|-64-|------100-----
---------12--------|--7-|------400-----
---------12--------|-52-|------100-----
----------8--------|--2-|------400-----
----------8--------|-32-|------100-----
----------4--------|-12-|------100-----
----------3.6------|-10-|------100-----
----------2--------|--2-|------100-----
----------2--------|-12-|-------50-----
----------1--------|--2-|-------50-----