Aufgabenstellung
Die Gruppe Daten ist verantwortlich für die Kommunikation mit den anderen Großgruppen. Wir sammeln alle Signale der Sensoren und bereiten sie soweit auf, dass die Speicher-Gruppe und auch die LCD-Gruppe diese ohne weiteres sofort benutzen können. Die Übertragung wird höchstwahrscheinlich über eine SPI-Verbingung erfolgen. Außerdem sind wir verantwortlich für die Kommunikation zwischen den beiden Microcontrollern unserer Gruppe (jeweils einer für die Daten-Gruppe und für die LCD-Gruppe). Die Kommunikation zwischen beiden Mircrocontrollern wird in diesem Fall durch UART erfolgen. Was genau UART bzw. SPI sind wird im Theorieteil unten erklärt. Desweiteren werden noch PLatinen gefertigt die allen Aufgaben (Stromversorgung, Programmierschnittstelle, UART/SPI,…) gerecht werden.
UART
UART (Universal Asynchronous Receiver and Transmitter) ist eine elektronische Schaltung, die zur Realisierung digitaler serieller Schnittstellen dient. Meistens ist es ein Microchip, der verantwortlich für eine Kommunikation zwischen den Rechner und Microcontroller ist. Die Kommunikation erfolgt über den Protokoll RS-232. Die Daten können in Wörtern von 5 bis 9-Bits übertragen werden. Heutzutage befinden sich in Microcontrollern meistens bis zum 2 USARTs, die zusätzlich zu asynchroner Datenübertragung auch synchrone anbieten. In USART bzw. UART ist LSB (Least Significant Bit) als erste gesendet.
Protokoll RS-232 ist eine meist verwendete asynchrone Schnittstelle. Es besteht aus 9 Leitungen, aber für den Datenaustausch reichen meistens 3: RXD (Empfangsdaten), TXD (Sendedaten) und GND (Masse). Im Fall von RS-232 (im Gegensatz zu anderen Schnittstellen) sind die Vorrichtungen kreuzweise verbunden, dh. in der Weise, dass der Ausgang von einen zum Eingang des anderen geht. (Rx1 mit Tx2 und Tx1 mit Rx2). RS-232 bietet eine sehr breite Palette möglicher Übertragungsgeschwindigkeiten. Die Baudrate ist die Anzahl der übertragenen Symbole pro Zeitspanne.
Unterschiede zwischen UART und USART:
- Synchron Modus benötigt sowohl Daten als auch Uhr, Asynchron benötigt nur Daten
- Der synchrone Modus ermöglicht eine höhere DTR (Datenübertragungsrate) als der asynchrone Modus, wenn alle anderen Faktoren konstant gehalten werden
- Im synchronen Modus werden die Daten mit einer festen Rate übertragen. Im asynchronen Modus müssen die Daten nicht mit einer festen Rate übertragen werden
- Synchrone Daten werden normalerweise in Form von Blöcken übertragen, während asynchrone Daten normalerweise Byte für Byte übertragen werden.
SPI
Das Serial Peripheral Interface ist ein Bussystem und besteht aus 3 Leitungen. Es ermöglicht eine serielle synchrone Datenübertragung zwischen verschiedenen ICs.
Leitungen
- MOSI (Master Out -> Slave in)
- MISO (Master In -> Slave Out)
- SCK (Serial Clock)
Die meisten Atmel Mikrocontroler werden über SPI programmiert.
Der Master steuert die Slaves und damit die Datenübertragung über die Clock und deren steigende bzw. fallende Flanken.(bekannt aus dem Modul Mikroprozessortechnik – MPT)
Begriffsklärung
Master/Slave:
- in Datenbus aber viele Teilnehmer (Problem)
- 1x Master + beliebig viele Slaves
- Master hat uneingeschränktes Zugriffsrecht auf Ressourcen
- Slave auf Zugriffsrecht warten (erteilt durch Master)
- sehr strukturiert und einfach aber langsam und ineffizient
Bus/Bussystem
- Verbindung zwischen Master und Slave
- übertragen Informationen (meist Bitweise)
Microcontroller Aufbau
Um UART, SPI und diverse Schnittstellen zu realisieren muss auch das Layout der Platinen für die Microcontroller erstellt werden. Dazu müssen zuerst Schaltpläne entworfen und getestet werden um sie anschließend mit Eagle zu Konstruieren.
UART
Für die Kommunikation der Microcontroller innerhalb der Interface-Gruppe haben wir uns für UART entschieden. Mithilfe des Datenblattes ( S. 140 – ff) wurde sich in das Thema eingelesen und anschließend der Code entwickelt und mithilfe mehrere Dioden und einem provisorischen Aufbau auf zwei Steckbrettern getestet. Anschließend wurden alle Funktionen in eine Bibliothek geschrieben und auf ihre Effizienz getestet, um sie dann der LCD-Gruppe zu übergeben. Mit Hilfe der Bibliothek konnte die LCD-Gruppe ihre Daten an den Microcontroller der Speicher-Gruppe schicken und diese auch wieder von dort abrufen.
UART Bibliothek
UART Steckbrett
SPI
Der Datentransfer zwischen den einzelnen Microcontrollern der jeweiligen Gruppen (Licht,Luft und Nährstoffe ) erfolgt über SPI. Zur ersten Implementierung wurde ein einfacher Aufbau zwischen Master und einem Slave auf Steckbrettern aufgebaut und anschließend nach Datenblatt (S. 132 ff) verkabelt. Der Code zum einfachen Senden (Master) und Empfangen (Slave) wurde mit Hilfe des Datenblattes erstellt und mit Hilfe mehrer Dioden ausgiebig getestet. Anschließend wurde sich mit den anderen Gruppen darauf geeinigt Integer zu Senden/Empfangen, da Character mit nur einem Byte zu klein waren.
Daraufhin wurde der Code für das Senden/Empfangen auf Integer umgeschrieben und wieder getestet. Um auch Daten vom Slave zu Empfangen, musste der Code erneut umgeschrieben werden, hierbei mussten folgende Dinge beachtet werden: Der Slave darf nicht selbständig auf den Daten-Bus zugreifen und generiert auch keinen Takt außerdem basiert SPI auf einem Schieberegister, dass bedeutet es kann nur ein Bit geschickt werden wenn dafür eins Empfangen wird. Um dieses Problem zu lösen muss der Master ein sogenanntes „Dummy-Byte“ an den Slave senden, damit wird die Clock für den Slave generiert und dieser kann nun im Austausch für das Dummy-Byte seine eigentlichen Daten, Bit für Bit, auf das Register des Masters „schieben“. Das Dummy-Byte ist in unserem Fall für den Slave völlig Wertlos und wird im Code nicht weiter berücksichtigt. Die verschiedenen Slaves werden im Code über den SlaveSelect (SS) wie im Datenblatt beschrieben angewählt und nach erfolgreichem Datentransfer wieder abgewählt.
Aufgrund des Streiks kam es leider nicht dazu eine wirkliche Kommunikation mit den anderen Gruppen aufzubauen, da wir diverse Probleme mit dem SlaveSelect und dem Dummy-Byte hatten und den Code erst eine Woche vor dem Präsentationstermin wirklich nutzen konnten. Außerdem sind einige Sensoren der anderen Gruppen gar nicht fertig geworden bzw. wurde der ganze Microcrontroller bereich in der Luft-Gruppe aufgegeben.
Daher haben wir uns entschieden eine einfache Test-Platine mit diversen Schaltern, einem Microcontroller und einem Display zu erstellen. Diese wird als Master fungieren und eine Kommunikation mit der Platine der LCD-Gruppe aufbauen und eine einfache SPI-Verbindung simulieren indem durch Tastendruck am Master unterschiedliche Ausgaben auf dem LCD-Display der Slave-Platine angezeigt werden.
Quellen
- https://www.mikrocontroller.net/articles/UART
- https://whatis.techtarget.com/definition/USART-Universal-Synchronous-Asynchronous-Receiver-Transmitter
- https://de.wikipedia.org/wiki/Universal\_Asynchronous\_Receiver\_Transmitter
- https://www.mikrocontroller.net/articles/RS-232
- https://www.mikrocontroller.net/articles/Serial\_Peripheral\_Interface
- https://de.wikipedia.org/wiki/Master/Slave
- https://de.wikipedia.org/wiki/Bus\_(Datenverarbeitung)