Serieller USB-TTL Konverter
« | 16 Jan 2019 | »Als ich auch dem Weg zu meiner Wohnung am Postboten vorbei lief, dachte ich noch
Nö, laut Paketverfolgung kommt heute nichts bei mir an.
Prompt wartete schon der “Bitte-zur-Abholstation-kommen”-Zettel am Briefkasten. Also eilte ich schnellen Schrittes zurück und der nette Junge händigte mir gleich mein Päckchen aus.
Und da drinnen war unter anderem auch ein Geekcreit FT232RL FTDI USB to TTL Converter. Und der nächste Gedanke war dann:
Och, dann wird das wohl heute an ATmega328 Abend werden.
Der auf dem Arduino UNO verbaute ATmega328 Chip nutzt auf dem Board einen externen 16 MHz Oszilator und jede Menge weitere Bauteile.
Doch der Chip selbst braucht für viele kleinere Projekte eigentlich gar nicht so viele Extras. Wenn die externe Spannungsversorgung reguliert ist, und die Taktgenauigkeit nicht extrem wichtig ist, so kann man auf den externen Taktgeber verzichten, und den internen 8 MHz Quarz nutzen.
Dieser ist laut Hersteller aber recht ungenau und daher ungeeignet für akkurate Zeitrechnungen oder höhere Datenübertragungsfrequenzen.
Wie auch immer, zum LED ein oder ausschalten oder Sensoren auslesen und serielle Datenübertragungen mit 9600 Baud reicht dieses Setup aus und braucht dann auch weniger Strom.
Lästig war für mich aber das Programmieren solcher Chips, weil man immer ein Arduino-Board dazu brauchte. Und das Einsetzen bzw. Herausnehmen des Chips hatte regelmäßig verbogene PINs zur Folge.
Die Idee
Man lötet sich eine kleine Platine zusammen, wo man mehr Platz für den Chip lässt und das Einsetzen und Herausnehmen leichter wird.
Die Datenübertragung von Sketches über den COM Port benötigt nur 3 Datenleitungen.
TXD
(Transmit / Senden), RXD
(Receive / Empfangen) und
DTR
(Data Terminal Ready / Bereit zur Übertragung).
Dass man den TX des ATmega mit dem RX des USB TTL Converts verbindet und
die jeweiligen anderen beiden Pins ebenso, ist logisch.
Doch beim DTR ist der Aufwand ein bisschen höher.
DTR soll einen Reset des ATmega328 auslösen, und das erreicht man über den
ersten PIN am Chip, wenn dieser den Status LOW
erkennt.
Deshalb muss dieser Pin über einen Widerstand mit VCC verbunden sein,
womit er im Betrieb stabil den Zustand HIGH
hält. Empfohlen werden beim
Widerstand 10 Kilo-Ohm (also Braun-Schwarz-Orange), aber mein übrig
gebliebener 15 KOhm (Braun-Grün-Orange) aus der Reste-Box funktionierte
im ersten Test ebenso.
Wenn DTR per Signal einen Reset auslösen soll (was ja auch ein HIGH
wäre), müssen wir den Impuls quasi umdrehen.
Und das tun wir über einen Kondensator, der mit seinem negativen Füsschen
zum Reset-Pin zeigt und mit dem positiven zum DTR Pin des Konverters.
Kommt nun ein DTR Signal herein, lädt sich der Kondensator auf der DTR Seite
positiv und auf der Reset Seite negativ.
Somit fließt der Strom ab und der Pin erkennt einen LOW
Zustand.
Damit startet der Chip neu und gibt der Gegenseite ein kurzes Zeitfenster für den Upload eines neuen Programs.
Das nutzt die Arduino IDE (bzw. das Tool AVRDUDE
) und führt die Übertragung
eines neuen Sketches aus.
Zuerst wird die graue Theorie mal auf einem Steckbrett getestet. … also: Ja, es geht.
Und was braucht man Software-seitig?
Die Timings des üblichen Arduino ATmega328 Board-Paket sind auf 16 MHz ausgelegt, daher brauchen wir für den 8 MHz Betrieb ein eigens angepasstes.
Zum Glück ist ein solches auf der ArduinoToBreadboard-Seite verlinkt und sollte HIER ebenso verlinkt sein.
Den Inhalt kopiert man ins hardware
Arduino-Arbeitsverzeichnis.
Unter Windows liegt das Arduino-Arbeitsverzeichnis unter
C:\Users\%USERNAME%\Documents\Arduino
oder neuerdings im OneDrive
Ordner C:\Users\%USERNAME%\OneDrive\Dokumente\Arduino
.
Darunter wird der Ordner hardware
angelegt (falls er nicht schon da ist)
und der breadboard
Ordner aus der ZIP Datei hinein verschoben.
Nach dem Neustart der Arduino IDE kann man
ATmega328 on a BreadBoard (8MHz internal clock)
bei den Boards auswählen
und sein Lieblings-Sketch kompilieren, hochladen und damit Freude haben.
Und jetzt können wir mit Stromsparmechanismen “richtige” Batterie-Projekte umsetzen.
Ergebnis
Mein kleines Board ist fertig. Und sowohl oben als auch auf der Unterseite werden die nötigen Pins zwischen dem TTL-Sockel und dem ATmega Sockel verbunden.
Preisfrage: Wer findet den Fehler im Bild?
Genau! Ich Dussel habe erst recht wieder einen Reset-Button genau dort hingelötet, wo er beim entfernen des Chips vom Sockel stört. … und der Grund für das Board war ein “freier” Zugang zum Sockel.
Tja, was soll ich sagen
… aus Schaden wird man klug.