RS232 - Kommunikation zwischen PC und dem AVR
R S 2 3 2 - U E B E R T R A G U N G
--- Kommunikation zwischen PC und dem AVR ---
Vorwort:
Dieser Thread soll sich mit der Kommunikation zwischen dem AVR und einen PC ueber die RS232(serielle) Schnittstelle beschaeftigen.
In meinen letzten Thread wurde zum Schluss die FIFO-Funktion mit sehr, sehr viel Unterstuetzung von mare_crisium erarbeitet.
https://www.roboternetz.de/phpBB2/viewtopic.php?t=51693
Diese soll mit als Grundlage dienen.
Auch hier soll verstaendlich erklaert und beschrieben werden, wie der AVR mit dem PC kommuniziert.
Habe einige Daten zusammen getragen... aber lanengst nicht alles.
Auch in diesem Thread hoffe ich wieder auf die tatkraeftige Unterstuetzung von mare_crisium.
Aber auch andere User koeennen bzw. sollen sich an daran beteiligen.
Hardwarevoraussetzung:
AVR arbeitet mit 5V Signalen
RS232 benutzt 12V Signale
Aus diesem Grund muss ein Pegelwandler eingesetzt werden.
Der Pegelwandler macht die 5V Signale des AVR RS232 konform(12V-Signale) und wandelt umgekehrt die Signale die ueber die RS232 kommen,
in fuer AVR verstaendliche 5V Signale um.
Pegelwandler 5V / 12V MAX232(oder Derivat)
Beim STK500 ist so ein Baustein auf der Entwicklerplatine vorhanden und nach aussen durch eine 9polige Buchse gefuehrt.
Bei anderen Platinen muss also auch ein Pegelwandler vorhanden sein, wenn man die RS232 Kommunikation nutzen moechte.
Oder man realisiert es extern ueber zusaetzliche Schaltung, der man die Signalleitungen des AVR zur Verfuegung stellt.
Nullmodemkabel oder serielles Kabel???
Nullmodem wird zwischen 2 PC(Master) verwendet.
Serielles Kabel verwendet man zwischen eine PC(Master) und einem Peripheriegeraet(Slave).
In unseren Fall also ein PC und ein Peripheriegeraet - > serielles Kabel.
Signalleitungen:
RXD und TXD - also Empfang und Senden reichen aus.
Aber eine Massleitung wird trotzdem benoetigt.( - der Pegel braucht ja ein Bezug)
PinEinstellung:
RXD (Empfang)
ist bei den vielen AtMega's PortD0
TXD (Senden)
ist bei den vielen AtMega's PortD1
Steht in der Spec des verwendeten Exemblars.
Anschlusseinstellungen:
hmmm ??? keine Ahnung
-------------
- Baudrate
- Datenbits
- Paritaet
- Stoppbits
- Protokoll
-------------
Handshake
Empfang
Senden
Liste der Anhänge anzeigen (Anzahl: 1)
robo_wolf,
so, endlich: In den angehängten Dateien finden sich die Bestandteile des Testprogramms "SerialTest01_V01.asm" für den ATmega8515; wie alles zusammengehört sieht man an den includes am Ende.
Die Zerlegung in ein Hauptprogramm und drei Module folgt dem Konzept wiederverwendbarer Komponenten, das wir im Thread "Anfänger mit STK500 und Assembler" besprochen haben.
Das Testprogramm dient dazu die Programmkomponenten auszutesten, aus denen sich eine sehr einfache aber flexible Kommunikation über die USART-Schnittstelle des ATmega zusammenstellen lässt. Es geht erst einmal um das Grundgerüst; XON/XOFF usw. ist erst einmal nicht vorgesehen, lässt sich aber jederzeit nachrüsten. In den Beschreibungen zu den Modulen SERIAL_V01.asm und SERIALIF01_V01.asm habe ich das Konzept des Botschaftsaustausch ziemlich ausführlich (hoffentlich nicht zu kompliziert :oops: ) dargestellt.
Damit auch gleich ein Erfolgserlebnis winkt, habe ich die Sendefunktion soweit zusammengesteckt, dass beim Einschalten des STK500 der Programmname, in 46 HexChars codiert, an den PC gesendet wird. Hab's mit dem Simulator getestet und hoffe es klappt auch im echten Leben.
Die Empfangsfunktion habe ich nicht ausgearbeitet; etwas muss ja zu tun bleiben, denn: Selber programmieren macht schlau ;-) !
Ciao,
mare_crisium
EDIT: Das Hauptprogramm "SerialTest_V01.asm" und die Module "SERIAL_V01.asm" und "SERIALIF01_V01.asm" gelöscht, weil sie Fehler enthielten. Die korrigierten Dateien sind an meinen Post vom 13.06.2010, ca. 17:00 angefügt.
Liste der Anhänge anzeigen (Anzahl: 3)
robo_wolf,
ich habe doch noch einen ATmega8515 in meiner Kruschtelkiste gefunden und kann das Programm jetzt auch "in echt" testen. Der Fehler war schnell gefunden: In meinen eigenen Programmen verwende ich immer das Carry- und nicht das T-Flag, um Zustände zurückzumelden. Na ja, die Macht der Gewohnheit führt dann rasch zu Verwechselungsfehlern ;-).
Die korrigierten Versionen hänge ich hier an. Das FIFO-Modul "FIFO8_V07.asm" bleibt unverändert.
Dann drücken wir uns mal die Daumen für heute abend :-) !
Ciao,
mare_crisium