mikrocontroller.net

Forum: Compiler & IDEs LCD ATtiny2313 8-bit?


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich verscuhe gerade mit meinem ATtiny2313 eine lcd Anzeige (HD44780 
kompatibel) zum Laufen zu bringen.

So weit ich mich informiert habe, gibt es die 4 sowie die 8-bit Lösung, 
allerdings wird für die 8-bit Lösung ein Mikrocontroller mit externem 
Bus Interface benötigt... Schafft das mein ATtiny oder mus ich die 4-bit 
Version versuchen?

Hat jemand vielleciht auch jemand einen Link zu einem Schritt für 
Schritt Tutorial? Ich habe bis jetzt nur Tutorials gefunden, die das 
entweder in Assembler oder BASCOM abhandeln... Mir würde einfaches C 
gefallen, weswegen ich auch hier im gcc Bereich poste ;)

Vielen Dank schon einmal :)

Autor: Andreas Hesse (asmhesse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau mal hier
http://jump.to/fleury

Gruss
Andreas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist der 8-Bit Modus beim tiny jetzt möglich?

Auf der Seite befindet sich ein Schaltplan und dort sind noch drei AND 
Gatter eingezeichnet... Muss ich die irgendwie beachten?

http://homepage.hispeed.ch/peterfleury/avr-lcd44780.html

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ist eine Schaltung für Memory-Mapped-Betrieb am 8515, also am 
externen Speicher-Interface.
Das hat der Tiny2313 nicht. Ansonsten kannst Du natürlich auch 8Bit-Mode 
machen, Du mußt nur genug Pins zum Anschluß verfügbar haben...
Beim 2313 bliebe z.B. Daten an PB0...PB7 und RS, RW, E an Pins vom Port 
D legen. Bleiben dann eben nicht allzuviele Pins mehr für andere Sachen 
frei.

Gruß aus Berlin
Michael

Autor: Karl-j. B. (_matrixman_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Unterschied zwischen 4 und 8 Bit ist nur das du beim einen 4 
Datenleitungen hast und beim anderen 8 Steuerleitungen brauchst du immer 
2 oder 3 (2 wenn du warteschleifen nimmst und 3 wenn du vom Display 
lesen willst obs fertig ist)


Also 4Bit Modus brauchst du 6 bzw 7 IO-Pins
8Bit Modus brauchst du 10 bzw 11 IO-Pins


Allgemein würd ich bei nem Controller welcher so schon wenig IO-Pins hat 
zu der 4Bit Variante gehen. Das spart zusätzlich auch noch 
Verdrahtungsaufwand dafür musst du mehr Programmieren (wobei das auch 
nicht so viel mehr ist).

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke :)

Da der Tiny bei mir eh nur die LCD Anzeige ständig mit neuen Daten 
beliefern soll, habe ich keine Problem mit zu wenig Pins...

Ich lege die 8 bits dann auf den PORTB.

Und R/W, RS und E dann auf PORTD. Ist es dabei egal, auf welchem PIN E 
usw. liegen?

Ich verzweifel momentan irgendwie mit Fleurys library... Ich hab die zip 
Datei heruntergeladen und entuzipped. Jetzt habe ich jede Menge Dateien, 
aber wo muss ich die hin kopieren, dass es funktioniert? (wahrscheinlich 
muss ich auch noch irgendwelche Einstellungen ändern, oder?)

Bei den Dateien ist auch eine makefile, abe rich habe mit makefiles 
irgendwie nur schlechte Erfahrungen gemacht..

Vielen Dank nochmal für die bisherige Hilfe und Danke, dass ihr euch die 
Mühe mit mir macht ;)

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Ich verzweifel momentan irgendwie mit Fleurys library

Da bist du nicht der Erste ;-))

Beitrag "Wie mache ich eine Textausgabe 8Bit auf Display?"

Autor: Karl-j. B. (_matrixman_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut so schwer ists auch wieder nicht...

Du hast einmal eine lcd.c Datei (Diese enthält den eigentlichen Code um 
das Display anzusteuern)

Und dann hast du noch ein lcd.h Datei (Dies ist die sogenannte 
Header-Datei da legst du fest was wo angeschlossen ist und wieviele 
Zeilen/Spalten dein Display hat... damit ist deine Frage obs egal ist 
was man wo anschließt schon beantwortet)

Einbinden musst du die lcd.h und lcd.c Datei in deinen Quellcode. 
(Header Datei zuerst!!)
#include <lcd.h>
#include <lcd.c>

Als Ort kannst du die Dateien entweder zu deinen anderen Quellcode 
Dateien tun (Musst aber dann statt <lcd.x> "lcd.x" schreiben)
Oder du tust sie einfach in den Include Ordner von deim Compiler wo die 
anderen Dateien auch sind. Dann hast du se für andere Projekte immer 
gleich drin.

wegen der makefile Datei würd ich mir mal keine Sorgen machen. Test am 
besten zuerst mal obs mit deiner makefile die du hast auch geht. Wenn ja 
dann ists gut ansonsten verwendest du einfach mal die wo dabei ist.

In der Hilfe Datei steht dann was für Befehle es gibt.
 Dann musst du nur zb das schreiben um dein Display zu initialisieren:
lcd_init (LCD_DISP_ON)

oder Inhalt löschen:
lcd_clrscr ();

oder Zeichen schicken:
lcd_puts ("Hello World :)");

Ich hoffe ich konnt dir helfen...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es reicht eigentlich die Header datei einzubinden und anzupassen. Die 
c-File einfach dem Projekt hinzufügen und mitcompilieren. Ich hab es mit 
WinAVR und dem AVRStudio 4.0 (glaub ich) gemacht.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank :)

So eine gute Erklärung habe ich bis jetz vergeblich gesucht :)

Ich werde mich wieder melden, wenn ich es durchgetestet habe und wieder 
am verzweifeln bin ;)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe die lcd.h jetzt wie folgt angepasst:
#define XTAL 16000000

Da ich einen 16MHz Quarzbaustein habe.
#define LCD_PORT         PORTB        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       4            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       5            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        6            /**< pin  for Enable line     */

Und dann noch das darüber und habe alles so angeschlossen.

Die lcd.h habe ich im AVR-Studio in dem Projekt in die Header-Files 
reinkopiert und das das lcd.c in die Source-Files, wo auch mein 
Testprogramm drinliegt:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include "lcd.c"



int main(void)
{
  lcd_init (LCD_DISP_ON)
  lcd_puts ("Hello World :)");


    for (;;){};
}

Allerdings kommen dann die folgenden Fehlermeldungen:
../test003.c:4:17: lcd.h: No such file or directory
../test003.c:5:17: lcd.c: No such file or directory
../test003.c: In function `main':
../test003.c:11: warning: implicit declaration of function `lcd_init'
../test003.c:11: error: `LCD_DISP_ON' undeclared (first use in this function)
../test003.c:11: error: (Each undeclared identifier is reported only once
../test003.c:11: error: for each function it appears in.)
../test003.c:12: error: syntax error before "lcd_puts"

Irgendwie versteh ich das mit dem einbinden nicht. Ich habe den include 
Ordner nicht gefunden und alles in meine Eigene Dateien kopiert. Aber 
das müsste doch trotzdem gehen, wenn ich die Sachen in das Projekt 
einbinde, oder nicht?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK es hat sich erledigt, denn ich habe das richtige include Verzeichnis 
jetzt doch noch gefunden.

Vielen Dank nochmal an alle, die mir geholfen hatten und so viel Geduld 
aufgewendet haben :)

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..
#include "lcd.c"
..


Bitte NIE c-Files includes, sondern nur h-files.  Wie man mehrere 
Source-Dateien zusammen linken muss, steht im Makefile zu meinem 
test_lcd Beispiele

Wenn man es mit AVRStudio macht, einfach lcd.c dem Projekt-File 
hinzufügen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte man dies nicht tun?

Es funktioniert zumindest prima.

Autor: horst (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

sehr einfach gestaltet sich die Lcd-Ansteuerung mithilfe eines
Schieberegisters 74595. Dann brauchst du nur 3 I/o Pins.

Gruss horst.

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.