Serieller USB-TTL Konverter

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 vorbogene 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 Termianl 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 postiv 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 nutzen 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. TTL-Programmer … 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 hineinverschoben.

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.

TTL-Programmer-Board

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.


Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!