Eigentlich sehr einfach.Wenn ich so ein FT232RL-Modul (z.B. http://www.elektor.de/products/kits-....1913324.lynkx) verwenden möchte, wie gestaltet sich dann die Kommunikation zwischen dem Modul und dem AtMega16?
Für den FT232 Chip gibts den sog. VCP Treiber ( Virtual Com Port ), den ich für dieses Projekt verwenden würde.
Downloaden kannst Du diesen Treiber bei Chiphersteller ftdi ( http://www.ftdichip.com/ ).
Sobald Du dieses Bord an deinen PC ansteckst wird eine serielle Schnittstelle erkannt, die Du wie gewohnt nutzen kannst. Also über Terminal Programme ansteuern, oder in eigene Software einbinden.
Wie gesagt gibt dieser ftdi Chip nur TTL Pegel an seinen Ausgängen raus. Diese sind aber für eine Übertragung über längere Leitungen denkbar ungeeignet.
Also setzt Du vor den RxD Eingang des FT232R einen RS485 Bustreiber ( =SN75176 ) der dann über 2 verdrillte Drähte mit einem RS485 Bustreiber in deiner Uhr verbunden wird. Dieser Bustreiber wird dann mit dem Ausgang TxD deines Controllers in der Uhr verbunden.
Für den Weg vom PC zur Uhr wird das genauso gemacht. Also FT232R TxD -> SN75176 Bustreiber -> verdrillte Doppelader -> SN75176 Bustreiber -> Controller RxD Pin.
Dann kannst Du im Controller den USART benutzen, was die Komunikation enorm vereinfacht.
Guck mal hier: http://de.wikipedia.org/wiki/RS485
Da Du für diese Lösung ohnehin 2 verdrillte Adern benötigst ist es sinnvoll ein Kabel mit mindestens 2 verdrillten Doppeladern zu nehmen.
Es ginge auch mit nur einer verdrillten Doppelader, aber dann wäre nur Halb Duplex möglich und Du müsstest Dir ein Protokoll Überlegen, das festlegt, wer jetzt Sender und wer Empfänger ist. Da es hier nur um ein paar Meter Kabel geht würd ich mir das nicht antun.
In einem Netzwerk - Patchkabel sind bereits 4 verdrillte Doppeladern eingebaut, der Wellenwiderstand passt und das Kabel ist nicht teuer.
Das würde ich für die Verbindung vom PC zum Display verwenden.
Bei der Wahl der Steckverbinder hast Du freie Auswahl. Fertige RJ45 Kabel wären eine Lösung, aber nicht besondes stabil. 5polige XLR Steckverbinder wären auch eine Lösung.
Noch was - Eine RS485 Verbindung mus an beiden Leitungsenden abgeschlossen ( = Terminiert ) werden. Das bedeutet auf der jeweiligen Sender und Empfängerseite muß ein Widerstand von 120Ohm eingebaut werden. Im Layout kannst Du ja schon mal einen per Jumper abschaltbaren Widerstand vorsehen.
Bei der Wahl der zu übertragenden Daten bist Du frei. Ich würde mir da ein ASCII Protokoll ausdenken, da das bei einem PC relativ einfach zu handeln ist.
Eine Möglichkeit wäre ein Steuerzeichen einzuführen und dann den Befehl mit den Parametern zu versenden.
Das Ende so einer seriellen Übertragung macht man oft mit den Steuerzeichen <CR> <LF>, also Carriage Return und Line Feed. Achtung hier sind nicht die Buchstaben gemeint, sindern die Hex Codes 10 und 13! Ein Terminalprgramm generiert diese Steuerzeichen automatisch bei der Betätigung der Return Taste!
Zudem wäre die Datenübertragung dann auch mit einem Terminalprogramm relativ einfach zu debuggen.
Beispiel für Eine Datenübertragung:
$S;1:1<CR><LF>
$ Wäre dabei ein Marker für einen Kommandoanfang.
S Wäre der Kenner für Spielstand
; Wäre ein Trenner der Daten von den Steuerzeichen
1:1 Wäre der zu übertragende Spielstand.
<CR><LF> Wäre das erwähnte Zeilenende.
Als Bestätigung könnte der Controller dann
@S;1:1<CR><LF> senden. Dadurch wäre dann auch die Datenübertragung verifiziert und ein hardwareloop würde auch erkannt werden.
Für andere Daten kannst Du dann andere Steuerzeichen verwenden.
$C;12:10<CR><LF> wäre dann eine Countdown Zeit von 12min 10 sek.
Der Controller könnte das dann mit
@C;12:10<CR><LF> bestätigen.
Wie gesagt ist nur ein Gedankenanstoss, kannst Dir ja auch dein ganz Eigenes Protokoll zusammen basteln.
Denkbar wäre auch ein Protokoll, das nur die Werte für die 9 einzelnen Segmente überträgt.
Also z.B.
$0;8;3;4;0,3,2,1,1<CR><LF>
Dann läge die Anzeigensteuerung allein im PC.
Eine weitere Idee wäre eine kleine Controllerbox zu basteln, die die Rolle des PC übernimmt und du Somit unabhängig von einem PC würdest. ATMEGA 16 mit 2 RS485 Treibern, Display, ein paar Tasten und ein Steckernetzteil sollten genügen. - Wie gesagt Du hast da ja alle Möglichkeiten!
Würd ich nicht machen, weil Du dann auf der PC Seite nie Gewissheit hast, ob die Uhr die Daten jemals Empfangen, bzw. Fehlerfrei Empfangen hat.Die Kommunikation muss hier nur vom PC zum AtMega16 erfolgen, nicht in die Gegenrichtung! Das sollte die Schaltung ja noch weiter vereinfachen
Im Prinzip würdest Du Dir eine Doppelader und 2 Bustreiber sparen.
Kabel wäre wegen der mechanischen Stabilität ohnehin Sinnvoll. So ein Bustreiber kostet bei Re.... 0,26€ also Peanuts bei so einem Projekt!
Lesezeichen