Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
microcontrollertechnik:11_i2c_schnittstelle [2023/11/19 03:01] mexleadmin |
microcontrollertechnik:11_i2c_schnittstelle [2024/08/29 19:37] (aktuell) mexleadmin |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
<WRAP group> | <WRAP group> | ||
<WRAP column 30%> | <WRAP column 30%> | ||
Zeile 8: | Zeile 8: | ||
- wissen wie die Kommunikation zwischen I2C Master und Slave funktioniert | - wissen wie die Kommunikation zwischen I2C Master und Slave funktioniert | ||
+ | |||
+ | Im Video wird eine Library für die Kommunikation verwendet. Wir werden in untenstehenden Beispiel die Register selbst schreiben. | ||
</ | </ | ||
==== Video ==== | ==== Video ==== | ||
+ | {{youtube> | ||
+ | |||
+ | <WRAP hide> | ||
{{youtube> | {{youtube> | ||
+ | </ | ||
</ | </ | ||
- | |||
==== Statemachine für Datenpaket ==== | ==== Statemachine für Datenpaket ==== | ||
Zeile 37: | Zeile 42: | ||
</ | </ | ||
- | **Übertragung**\\ | + | === Übertragung |
Für die I2C Übertragung " | Für die I2C Übertragung " | ||
D.h. während der Datenübertragung bleibt die Datenleitung bei SCL=High konstant. \\ | D.h. während der Datenübertragung bleibt die Datenleitung bei SCL=High konstant. \\ | ||
Zeile 149: | Zeile 154: | ||
===== Software ===== | ===== Software ===== | ||
- | ==== einfache Anwendung ==== | + | ==== einfache Anwendung |
Im ersten Schritt ist im folgenden eine einfache Anwendung dargestellt. \\ | Im ersten Schritt ist im folgenden eine einfache Anwendung dargestellt. \\ | ||
Zeile 195: | Zeile 200: | ||
| | ||
| | ||
- | | + | |
C-Compiler: AVR/GNU C Compiler 5.4.0 | C-Compiler: AVR/GNU C Compiler 5.4.0 | ||
| | ||
Zeile 295: | Zeile 300: | ||
</ | </ | ||
</ | </ | ||
- | \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ | + | \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |
'' | '' | ||
\\ \\ | \\ \\ | ||
Zeile 316: | Zeile 321: | ||
- Nun wird der Zustand das Port B als I2C Daten eingelesen. | - Nun wird der Zustand das Port B als I2C Daten eingelesen. | ||
- Diese werden per I2C übertragen. | - Diese werden per I2C übertragen. | ||
- | - Und zum Schluss wird das Stopp Bit gesendet | + | - Und zum Schluss wird das Stopp Bit gesendet \\ \\ |
'' | '' | ||
Zeile 353: | Zeile 358: | ||
| | ||
| | ||
- | | + | |
| | ||
Zeile 437: | Zeile 442: | ||
- Konstante für die I2C Adresse | - Konstante für die I2C Adresse | ||
- Konstante für die Maskierung der Adresse \\ \\ \\ \\ \\ | - Konstante für die Maskierung der Adresse \\ \\ \\ \\ \\ | ||
- | - Zwei globale Variablen beinhalten die I2C Adresse und die Maske für die eingelesene Adresse | + | - Zwei globale Variablen beinhalten die I2C Adresse und die Maske für die eingelesene Adresse \\ \\ |
'' | '' | ||
- | - es werden alle Pins an Port B als Ausgang geschalten | + | - Es werden alle Pins an Port B als Ausgang geschalten |
- | - Die I2C Adresse, auf welche der Slave hört, wird gesetzt | + | - Die I2C Adresse, auf welche der Slave hört, wird gesetzt |
- | - in der Haupschleife läuft nur das setzen | + | - In der Haupschleife läuft nur das Setzen |
'' | '' | ||
- Die Adresse wird in das Adressbyte geschrieben. | - Die Adresse wird in das Adressbyte geschrieben. | ||
- Die Adressmaske wird in das Maskenbyte geschrieben. Durch die Maske lässt sich ein Slave auch mit verschiedenen Adressen ansprechen, da die Maske angibt, welche Bits nicht berücksichtigt werden sollen (mit '' | - Die Adressmaske wird in das Maskenbyte geschrieben. Durch die Maske lässt sich ein Slave auch mit verschiedenen Adressen ansprechen, da die Maske angibt, welche Bits nicht berücksichtigt werden sollen (mit '' | ||
- | - Im Kontrollregister wird die " | + | - Im Kontrollregister wird die " |
'' | '' | ||
- | \\ \\ \\ | ||
- Hier wird solange gewartet, bis I2C Daten vorliegen | - Hier wird solange gewartet, bis I2C Daten vorliegen | ||
- | - Nach dem Ändern des Konrollregisters muss die Abarbeitung abgewartet werden. Dies ist daran zu erkennen, das '' | + | - Nach dem Ändern des Konrollregisters muss die Abarbeitung abgewartet werden. Dies ist daran zu erkennen, das '' |
- | + | ||
- | '' | + | |
- | - Bevor Daten übertragen werden sollen, müssen diese erst in das I2C Datenregister geschrieben werden. | + | |
- | - Wieder die I2C Schnittstelle aktivieren ('' | + | |
- | - auch hier muss wieder die Abarbeitung abgewartet werden | + | |
- | + | ||
- | \\ \\ \\ \\ \\ \\ | + | |
- | + | ||
- | '' | + | |
- | - Das Stoppbit wird wieder im Kontrollregister aktiviert | + | |
- | - Hier ist kein Warten notwendig | + | |
</ | </ | ||
Zeile 470: | Zeile 463: | ||
- | ==== komplexere Anwendung ==== | + | ==== komplexere Anwendung |
- | Als Beispiel wurde die Temperaturmessung gewählt | + | |
- | | + | Als Beispiel wurde hier die Temperaturmessung |
+ | Das Projekt und die Simulation ist hier zu finden | ||
+ | |||
+ | Bitte nutzen Sie diese als Vorlage, wen Sie eine I2C Schnittstelle implementieren wollen. Da in diesem Programmstand alles über Interrupts läuft, können auch weitere Funktionen abgearbeitet werden. | ||
+ | |||
+ | ===== weiterführende Unterlagen ===== | ||
+ | |||
+ | Die detaillierte Beschreibung zu I2C findet sich in des {{microcontrollertechnik: | ||
==== Bibliotheken ==== | ==== Bibliotheken ==== | ||
Zeile 484: | Zeile 484: | ||
* alternative und schlanke Implementierung des Slaves von [[https:// | * alternative und schlanke Implementierung des Slaves von [[https:// | ||
- | ===== Beispiele | + | ==== Beispiele ==== |
- | * Simulide: '' | + | * In Simulide |
- | * Software | + | * Eine vollständige Implementierung des Codes für den I2C Master ist in der Library von Peter Fleury |
- | * Library von Peter Fleury: [[http:// | + | * Eine Implementierung eines [[Software I2C Slave]], also eines I2C an einem beliebigen Pin durch Bitmaipulation, |
- | * [[Software I2C Slave]] | + | |
- | ===== weiterführende Unterlagen ===== | + | ==== Beschreibung |
- | | + | |
+ | Die " |