{"id":183,"date":"2019-06-20T16:46:41","date_gmt":"2019-06-20T14:46:41","guid":{"rendered":"http:\/\/service.projektlabor.tu-berlin.de\/wordpress\/ss2019do\/?page_id=183"},"modified":"2019-07-11T12:02:07","modified_gmt":"2019-07-11T10:02:07","slug":"decoder-2","status":"publish","type":"page","link":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/decoder\/zwischenbericht\/decoder-2\/","title":{"rendered":"Decoder"},"content":{"rendered":"<p>Nachdem wir uns mit dem L\u00f6ten von Bauteilen und der Funktionsweise von Mikrocontrollern vertraut gemacht haben, ging es darum, sich zu \u00fcberlegen, welche Funktionen der Decoder haben soll und wie man diese umsetzen kann. Dabei war es zuallererst n\u00f6tig, ein Programmflussdiagramm zu erstellen und sich vor Augen zu f\u00fchren, in welchen Schritten das Eingangssignal von uns verarbeitet werden soll. Im Betrieb soll der Mikrocontroller auf ein Eingangssignal warten und dieses beim Eingangs-Event in einen bin\u00e4ren Morse-Code umwandeln. Dabei wird eine 1 ein \u201eDit\u201c repr\u00e4sentieren. Der entstandene Code wird dann auf einen Speicher geschrieben, von wo er auf Knopfdruck an die Lautsprecher- und Lichtgruppe weitergegeben wird, bzw. in richtige Buchstaben decodet und an die Displaygruppe weitergeleitet wird. Das Einlesen des Signales und die Umwandlung in einen entsprechend verwendbaren Code konnte bereits realisiert werden. Dabei erwarten wir ein Rechtecksignal als Eingang, welches eine Dit-L\u00e4nge von 4kHz hat. Dieses wird mit 5-Facher Abtastfrequenz abgetastet und ein Algorithmus entscheidet, ob es sich beim vorliegenden Signal um eine \u201e1\u201c oder um eine \u201e0\u201c handelt. Das naheliegende Ziel ist nun den umgewandelten Code zu Speichern und wieder abzurufen. Danach wird die Entwicklung des Algorithmus zum Decoden des Morse-Codes in Buchstaben erfolgen.<\/p>\n<p>&nbsp;<\/p>\n<p>Unser Projektlabor startete in den ersten Wochen mit einem kleineren Projekt. Dieses Projekt hatte das Thema: Verst\u00e4rker. Das Projekt ist in 3 Gruppen aufgeteilt worden. Der Vorverst\u00e4rker wurde mir zugeteilt, nachdem wir alle Widerst\u00e4nde berechnet haben fingen wir an zu L\u00f6ten. Als letztes gab es, einen St\u00f6psel Termin. Dieser verlief ohne Probleme, wir hatten danach die M\u00f6glichkeit den Verst\u00e4rker zu testen. Als n\u00e4chsten haben wir angefangen \u00fcber unser Projekt nachzudenken, wie sich dieses realisieren l\u00e4sst. Mit ein Flussdiagramm haben wir einen groben Plan aufgestellt wie wir die Schaltung realisieren k\u00f6nnen. Durch die Informationen aus dem Flussdiagramm haben wir erste Erkenntnisse entnehmen k\u00f6nnen, welche Bauteile wir f\u00fcr unser Projekt ben\u00f6tigen und was f\u00fcr ein Programm wir schreiben m\u00fcssen. Im n\u00e4chsten Termin, haben wir angefangen mit einem Mikrocontroller zu experimentieren. Unser Erster erfolg stellte ein Programmcode da, dieser hat es uns erm\u00f6glicht ein Eingangssignal abzuspeichern und dieses mithilfe einer LED darzustellen. Im n\u00e4chsten schritt haben wir das Signal in ein Bin\u00e4rcode umgewandelt um es als N\u00e4chstes decodieren zu k\u00f6nnen. In den Folgeterminen beginnen wir mit der Programmierung f\u00fcr die Decodierung der morse Zeichen.<\/p>\n<p>Nach den Informationen der Encoder Gruppe entspricht das Eingangssignal f\u00fcr den Decoder eines 5V Rechtecksignals. F\u00fcr ein \u201eDit\u201c ist dabei eine Frequenz von 4kHz, also eine Signaldauer von 250 \u00b5s vorgesehen. Mit dem Wissen \u00fcber die Zusammensetzung vom Morse-Code, dass also zum Beispiel ein \u201eDah\u201c 3 \u201eDit\u201c entspricht, lie\u00df sich der Algorithmus zur erfolgreichen Abtastung dieses Signals entwickeln. Laut Abtasttheorem von Shannon muss ein Signal mit mindestens doppelter Abtastfrequenz abgetastet werden, um erfolgreich rekonstruiert zu werden. Der verwendete Code tastet hierbei 5 Mal pro \u201eDit\u201c ab, also alle 50 \u00b5s. Liegen nach 5 Abtastungen, also nach einer vollst\u00e4ndigen \u201eDit\u201c-L\u00e4nge, mehr gemessene High\u2019s (bzw. \u201e1\u201c) als Low\u2019s (bzw \u201e0\u201c) vor, so wird dieser Signalteil als eine \u201e1\u201c im Speicher hinterlegt. Umgekehrt wird folglich eine \u201e0\u201c gespeichert. Wenn das Signal vorbei ist, also f\u00fcr eine festgelegte Zeit keine \u201e1\u201c mehr sendet oder der Speicher des Mikroprozessors voll ist, wird das ausgelesene Signal zur\u00fcckgegeben. Die aufgenommenen Daten sind dabei in einem uint8t \u2013 Array mit 7000 m\u00f6glichen Eintr\u00e4gen gespeichert. Eine \u201e1\u201c repr\u00e4sentiert dabei ein \u201eDit\u201c und eine \u201e0\u201c die k\u00fcrzeste m\u00f6gliche Pause. Die Eintr\u00e4ge dieses Arrays k\u00f6nnen dann auf Abruf zum einen decodiert und an das Display weitergeleitet und zum anderen unver\u00e4ndert an das Lauflicht geschickt und ausgegeben werden. Im laufenden Betrieb wartet das System auf ein signaleingangsindizierendes \u201eHigh\u201c, welches den Decodierungsprozess initiiert. Da es auch m\u00f6glich ist, dass zeitgleich \u00fcber beide Eingangs-Kan\u00e4le ein Signal ausgelesen werden muss, ist das Programm so ausgelegt, dass es beide Signale gleichzeitig auslesen und einzeln abspeichern kann. Dabei konnte es bislang passieren, dass wegen dem dann nicht mehr unerheblichen Zeitaufwand der Rechenoperationen des Mikrocontrollers, Lesefehler entstehen. Die Kompensation solcher Lesefehler, bzw. die Anpassung des Codes ist f\u00fcr die restliche Zeit angedacht. Das Eagle Layout f\u00fcr die Hauptplatine gestaltete sich nicht ganz so einfach. Bereits zu Beginn ergaben sich Schwierigkeiten, da Informationen zur Pin-Belegung fehlten. Dennoch ist fr\u00fchzeitig mit dem ersten Entwurf f\u00fcr die Hauptplatinen begonnen worden. Zun\u00e4chst wurde hierbei mit zwei Mikrocontrollern gearbeitet, was sich jedoch als zu kompliziert darstellte. Da die Zeit fehlte, um herauszufinden, wie sich die Mikrocontroller untereinander verst\u00e4ndigen k\u00f6nnen, wurde letztlich nur einen Mikrocontroller verbaut. Zeitgleich entstand in der Display-Gruppe die Bef\u00fcrchtung, dass 4 Pins f\u00fcr die Ansteuerung des Displays nicht ausreichen w\u00fcrden. Die Lauflicht-Gruppe beanspruchte bereits 20 Pins und da der Mikrocontroller nur 32 Pins hat, w\u00fcrde der Entwurf mit einem Mikrocontroller m\u00f6glicherweise nicht ausreichen. Dieses Problem l\u00f6ste sich jedoch schon nach kurzer Zeit, da die Display-Gruppe nur 4 Pins brauchte. Zusammen mit den 20 Pins der Lauflicht-Gruppe gab es somit keine fehlenden Pins mehr. Im n\u00e4chsten Schritt konnte nun die Anzahl der Kn\u00f6pfe bzw. der Status der LED\u2019s bestimmt werden. Nachdem all diese Probleme behoben waren und die gesamte Anzahl der verwendeten Pins bekannt war, ist das Eagle Layout entstanden. Bei der Erstellung des Eagle Layouts ergaben sich keine weiteren Probleme, es wurde nur beschlossen, dass zwei Platinen anfertigen werden. W\u00e4hrend Frank und Joe die Hauptplatine designten, hat Tianjing die Frontplatine mit den Kn\u00f6pfen und Status LED\u2019s angefertigt. Durch gutes Zeitmanagement ist es der Gruppe gelungen, die Hauptplatine bereits zum fr\u00fchstm\u00f6glichen \u00c4tztermin fertigzustellen. Noch in der selben Woche ist die Platine im vorletzten Schritt gebohrt\u00a0und gel\u00f6tet worden, wobei jedoch ein Designfehler aufgetaucht ist. Es ist vergessen worden, Pull-Up-Widerst\u00e4nde f\u00fcr das Display in die Schaltung einzubinden. Dieses Problem ist durch eine zweite Miniplatine von Facundo und Joe gel\u00f6st worden. Im letzten Schritt sind die Platinen und all ihre Pins fehlerfrei auf Leitf\u00e4higkeit getestet worden, woraufhin der Programmcode auf den Mikrocontroller geflashed und alle Steckverbinder mit der Frontplatine verbunden wurden.<\/p>\n<p>Die Decoder-Gruppe soll die eingegebene Signale dekodieren und \u00fcbersetzen. Sie bekommt zwei Arten von Signalen, ein optisches und ein Funk-Signal. Daf\u00fcr werden zwei Pins ben\u00f6tigt. Die Gruppe entschied sich beide Signale zu speichern und dem Benutzer die Wahl geben welches von beide er anzeigen lassen will. Dazu werden insgesamt 4 Kn\u00f6pfe verwendet (on-off, Option up, Option down, enter). Zus\u00e4tzlich werden 3 Status Lichter benutzt. Eine Arbeit war den Speicher-Code zu programmieren. Daf\u00fcr habe ich mich entschieden die Bibliothek \u201eAVR EEPROM\u201c zu verwenden. Das Signal wird aufgenommen und in Bin\u00e4rcode(MoreseCode) dekodiert. Durch die Funktion storeSignal() wird das dekodierte Signal in einem spezifischen Platz auf dem EEPROM gespeichert. Wir haben uns entschieden den Speicher (1 Kbyte) in vier Teile zu teilen (250mBytes) da wir letztendlich vier gleich lang Signale speichern wollen. Das dekodierte Signal wird als bool array eingegeben. Um m\u00f6glichst wenig Speicherplatz zu verwenden (jeder Bool-Element ist 8 Bit lang) werden alle 8 Bool-Elemente des Bool-Arrays innerhalb der Funktion storeSignal() erstmal in ein Element eines uint8 array gespeichert. Damit verwenden wir also 8mal weniger Speicherplatz. Letztendlich wird das uint8 array im Speicherplatz gespeichert. Dazu haben wir noch eine Funktion getSignal(n) wobei n der Index unseres aufgerufenes Signals ist (n zwischen 1 und 4) geschrieben. Damit kann der Mikrocontroller direkt an der Stelle angreifen wo das Signal gespseichert ist und das Signal ablesen. Analog wie bei storeSignal(), getSignal() liest das Signal ab, wandelt es in einem Bool-Array zur\u00fcck und erst dann gibt es diesen Array zur\u00fcck. Andere Arbeit war den \u00dcbersetzen-Code zu Programmieren. Das aufnehmende Signal wird in Bin\u00e4rcode(Morsecode) dekodiert. Der Code(String) besteht aus 0 und 1. Eins bedeutet dit in Morsezeichen, drei aufeinanderfolgenden Eins bedeutet dah, und Null bedeutet Pause. Zwei aufeinanderfolgenden Null ist Pause zwischen zwei Buchstaben. Drei aufeinanderfolgenden Null ist Pause Zwischen zwei W\u00f6rter. Vier aufeinanderfolgende Null bedeutet das Ende des Satz. Mit der While-Schleife wird die String(Bin\u00e4rcode) von jeder Buchstabe und Wort getrennt. Dann wird der Bin\u00e4rcode zu Dezimalcode umwandelt, um Speicherkapazit\u00e4t zu sparen. Jede Buchstabe, Zahl und Zeichen hat jeweilige String(Dezimalcode). Mit der Switch-Case-Anweisung kann das Code zur Buchstabe, Zahl und Zeichen umwandelt werden (Zum Beispiel 2310 ist A).F\u00fcr Default zeigt die Zeichen #. Zum Schluss mit dem Code von Facu kommt der \u00fcbergesetzte Satz und wird in Display angezeigt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem wir uns mit dem L\u00f6ten von Bauteilen und der Funktionsweise von Mikrocontrollern vertraut gemacht haben, ging es darum, sich zu \u00fcberlegen, welche Funktionen der Decoder haben soll und wie man diese umsetzen kann. Dabei war es zuallererst n\u00f6tig, ein &hellip; <a href=\"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/decoder\/zwischenbericht\/decoder-2\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":93,"featured_media":0,"parent":114,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/pages\/183"}],"collection":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/users\/93"}],"replies":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/comments?post=183"}],"version-history":[{"count":6,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/pages\/183\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/pages\/183\/revisions\/275"}],"up":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/pages\/114"}],"wp:attachment":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/morse-decoder\/wp-json\/wp\/v2\/media?parent=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}