www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Display als serielles "Terminal"


Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich überlege gerade, wie aufwändig es für einen relativen AVR Neuling 
ist einen 2313 oder 1200 an ein 4x16 HD44780 Display zu klemmen und ein 
kleines Protokoll für den RS232 Port zu schreiben, das Text in 
darstellen kann. Dann kommen noch ein paar Dinge wie Zeilenwechsel, 
Löschen einer Zeile/ des ganzen Displays usw.
Die Ersparnis an 6/12 IOs und die Auslagerung von Rechenleistung und 
FLASH-Speicher auf einen dedizierten Displaycontroller lockt mich schon!
Kennt ihr solche Projekte? ICh kann bisher nur in Assembler LEDs blinken 
lassen und Taster abfragen :D, arbeite mich aber in AVR-GCC ein und hab 
schon eine Reihe ASM, C und BASIC Programme getestet.

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das sollte eigentlich kein Prob sein. Für das Display gibts doch auf der 
Seite hier ´ne Anleitung. Und für den UART auch.
Wenn du das erstmal einbaust, und dir dann noch ein Protokoll dazu 
ausdenkst sollte es doch klappen oder?

MfG
Torsten

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch ein ideales Projekt, um den Prozessor und Assembler richtig gut 
kennenzulernen. Machbar ist es allemal und auch nicht zu kompliziert. 
Also: Ran an die Tastatur!

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Motivation! Sehe ich es richtig, das man einfach per UART 
das ASCII Zeichen im Klartext empfängt (z.B. "A") und ebenfalls im 
Klartext ("A")zum Display schickt, nachdem es initialisiert wurde?
Dann wäre das ja wirklich recht einfach freu.

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal was anderes: Atmel hat ja jetzt ne wirklich schicke neue Website... 
aber wo finde ich AVR-Studio 3.x? Auf meinem Laptop hab ich es, aber 
leider nicht das Setup Paket.

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann versuch mal diesen Link
http://www.atmel.com/dyn/products/tools.asp?family_id=607
Anstatt viel Geld in das Aufpeppen der Website zu stecken, sollte man 
besser mehr in die Fertigstellung von AVR Studio 4.x investieren.

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das mit dem Display klappt. Ich hab das Programm aus dem Tutorial 
von dieser Seite hier auf den PortB angepasst (war nicht wirklich 
schwierig) und im Moment teste ich ein paar Befehle aus dem Datenblatt 
:).
Nur mir der seriellen Kommunikation klappt es noch nicht. Das Tutorial 
ist für den 4433 geschrieben und ich weiß nicht, wie ich es auf meinen 
2313 ummünzen kann (soll später auf einem SMD 1200 laufen!). Ich hab's 
versucht, aber es tut sich nichts:

.include "C:\Programme\Atmel\AVR Studio\Appnotes\2313def.inc" 
;bzw. 2333def.inc

.def temp = r16

ldi temp, RAMEND
out SPL, temp

sbi USR,TXEN                 ;TX aktivieren
ldi temp,8000000/(9600*16)-1   ;Baudrate 9600 einstellen
out UBRR,temp

loop:
ldi temp, 'T'
rcall serout       ;Unterprogramm aufrufen
ldi temp, 'e'
rcall serout       ;Unterprogramm aufrufen
ldi temp, 's'
rcall serout       ;Unterprogramm aufrufen
ldi temp, 't'
rcall serout       ;Unterprogramm aufrufen
ldi temp, '!'
rcall serout       ;Unterprogramm aufrufen
ldi temp, 10
rcall serout       ;Unterprogramm aufrufen
ldi temp, 13
rcall serout       ;Unterprogramm aufrufen
rjmp loop          ;zu loop springen

serout:
  sbis USR,UDRE  ;Warten, bis UDR für das nächste Byte bereit ist
  rjmp serout
  out UDR, temp
ret               ;zurück zum Hauptprogramm

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"TXEN" befindet sich im UART Control Register (UCR), nicht im UART 
Status Register (USR)!

Auf dem 1200 wird das übrigens nie laufen, da dieser Controller kein 
UART besitzt.

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, jatzt klappt es! Ich fange die Daten mit Hyperterminal ein. Nach 
ein paar Sekunden "Test!" wird aber das gesamte Fenster mit 
Dollarzeichen usw. beschrieben. Kommt das gute Hyperterminal da etwa 
nicht mit?
Das der 1200 kein UART hat ist schade (bzw. dumm, dass ich das eifach 
mal so angenommen hatte). Aber für 60Cent pro AVR kann man das gerade 
noch so akzeptieren ;).
Dann muss ich wohl oder übel meinen 2313 zum LCD Controller verdonnern. 
Naja, mal sehen ob es überhaupt klappt und Sinn macht...

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mich gerade mal durch die AVR-Studio Samples gewühlt und eine 
UART Software Lösung gefunden (avr304). Ist recht kompakt. Das wäre ja 
wieder eine Möglichkeit doch den 1200er für mein serielles Terminal zu 
nutzen, oder?

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin einfach zu voreilig. "avr305.asm" bietet mir ein "[...]very code 
efficient software UART" für den 1200er :D. Perfekt!

Autor: Carsten Sprung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nach ein paar Sekunden "Test!" wird aber das gesamte Fenster mit Dollarzeichen 
usw. beschrieben.

Stell die Flusskontrolle im Hyperterminal mal auf Xon/Xoff damit sollte 
es klappen.
Nur so nebenbei ich persönlich finde das Hyperterminal nicht soo toll 
besser ist imho TeraTerm.
http://hp.vector.co.jp/authors/VA002416/teraterm.html

Hat jetzt aber nix mit deinem Problem zu tun.

Gruss Cabal

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Xon/Xoff ist ein eigenes Protokoll, nur das Terminalprogramm umzustellen 
macht wohl keinen Sinn.

Das mit den Dollarzeichen darf normalerweise nicht passieren. 
Möglicherweise ist der Baudratenfehler bei dem 8MHz-Quarz zu groß, 
müsste man mal nachrechnen.

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bis 38400 Baud sind alle Standard-Baudraten mit einem 8 MHz Quarz ohne 
grosse Toleranzen möglich.

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es lag an Hyperterminal! Mit TerraTerm klappt es problemlos. Jetzt suche 
ich nur noch nach einen "RS232 Input" Tutorial, das ähnlich simlep wie 
das von dieser Seite hier ist... oder könnte ihr mir ein paar Tipps 
geben?
Das Einzige, was mir im Moment spontan einfällt, ist:

sbi UCR,RXEN
ldi temp,8000000/(9600*16)-1 ;Baudrate 9600 einstellen
out UBRR,temp
.
.
.
in UDR, temp

Autor: Carsten Sprung (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal was ähnliches geschrieben aber eigentlich nur als 
Fingerübung. Achtung der Code ist nicht sehr schön vielleicht ist er 
auch Verwirrend, aber er funktioniert. Wie was und wo steht im Header 
der asm Datei.



Gruss Carsten

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen vielen vielen Dank! Das ist genau das, was ich machen wollte. Ist 
recht simpel und baut auf dem auf, was ich schon gelernt habe (LCD 
Tutorial).
Klappt wunderbar auf meinem 2313.
Das Einzige, was ich jetzt noch herausfinden muss, ist die Ansteuerung 
aller vier Zeilen. Im Moment verhält es sich wie ein zweizeiliges 
Display. Also wenn die erste ZEile voll ist, schreibt er in die dritte!

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Eigenheit der 4-zeiligen LCDs. Wenn ich das richtig gesehen 
habe, hast Du ein 4x16. Es gibt einen Befehl, der den Cursor an eine 
definierte Stelle schreibt. Dann wäre die erste Zeile $80, die zweite 
$C0, die dritte $90 und die vierte $D0. Allerdings jetzt per Gedächtnis 
aus der Hüfte geschossen - wenn ich einen Fehler in meinen Zahlen haben 
sollte, bitte berichtigen.

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, es stimmt! :D
JEtzt versuche ich das Programm so hinzubiegen, dass es nach einem Druck 
auf ENTER (0D)in die nänchste Zeile springt. Ich hab versucht mit ENTF 
den Cursor einzuschalten. Das klappte aber nicht (er hat immer [4-> oder 
so geschrieben) und deshalb liegt das jetzt auf ESC. Dafür schaltet er 
auch den Cursor ein, wenn ich auf ENTF, EINFG usw drücke nachdem er eine 
[ geschrieben hat... hääää? Schnall ich nicht.
KAnn man auch irgendwie die Pfeiltasten verwenden? Die hab ich in der 
ASCII Tabelle nicht gefunden.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marco,

falls Dein Projekt jemals fertig werden sollte (  ;-)  ) , dann 
veröffentliche doch einmal Deinen Code.
Ich glaube ander Leute im Forum sind auch daran interessiert.

Gruß an Alle hier im Forum

Micha

Autor: Marco Vogt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar, kann ich gerne machen. Auf meiner Homepage 
(http://www.marcoshp.de) richte ich auch gerade eine AVR Sektion ein. 
Ist aber mein erstes Projekt mit dem AVR überhaupt und daher kann es 
schon noch ein paar TAge bis zur Vollendung dauern :).
Bis dahin bin ich auf eure HIlfe angewiesen (siehe Post von gestern 
abend).

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi all,

unter
http://members.tripod.com/Stelios_Cellar/AVR/Seria...
wird genau so ein Projekt beschrieben.

 Karsten

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.