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.
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
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!
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.
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.
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.
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
"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.
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...
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?
Ich bin einfach zu voreilig. "avr305.asm" bietet mir ein "[...]very code efficient software UART" für den 1200er :D. Perfekt!
>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
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.
bis 38400 Baud sind alle Standard-Baudraten mit einem 8 MHz Quarz ohne grosse Toleranzen möglich.
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
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
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!
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.
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.
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
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).
Hi all, unter http://members.tripod.com/Stelios_Cellar/AVR/SerialLCD/serial_lcd_interface_using_avr.htm wird genau so ein Projekt beschrieben. Karsten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.