Forum: Compiler & IDEs LCD ATtiny2313 8-bit?


von Thomas (Gast)


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 :)

von Andreas H. (asmhesse)


Lesenswert?

Hi,

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

Gruss
Andreas

von Thomas (Gast)


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

von Michael U. (Gast)


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

von Karl-j. B. (_matrixman_)


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).

von Thomas (Gast)


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 ;)

von Joe (Gast)


Lesenswert?

>> Ich verzweifel momentan irgendwie mit Fleurys library

Da bist du nicht der Erste ;-))

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

von Karl-j. B. (_matrixman_)


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...

von Stefan (Gast)


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.

von Thomas (Gast)


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 ;)

von Thomas (Gast)


Lesenswert?

Also ich habe die lcd.h jetzt wie folgt angepasst:
1
#define XTAL 16000000

Da ich einen 16MHz Quarzbaustein habe.
1
#define LCD_PORT         PORTB        /**< port for the LCD lines   */
2
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
3
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
4
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
5
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
6
#define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
7
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
8
#define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
9
#define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
10
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
11
#define LCD_RS_PIN       4            /**< pin  for RS line         */
12
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
13
#define LCD_RW_PIN       5            /**< pin  for RW line         */
14
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
15
#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:
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4
#include "lcd.h"
5
#include "lcd.c"
6
7
8
9
int main(void)
10
{
11
  lcd_init (LCD_DISP_ON)
12
  lcd_puts ("Hello World :)");
13
14
15
    for (;;){};
16
}

Allerdings kommen dann die folgenden Fehlermeldungen:
1
../test003.c:4:17: lcd.h: No such file or directory
2
../test003.c:5:17: lcd.c: No such file or directory
3
../test003.c: In function `main':
4
../test003.c:11: warning: implicit declaration of function `lcd_init'
5
../test003.c:11: error: `LCD_DISP_ON' undeclared (first use in this function)
6
../test003.c:11: error: (Each undeclared identifier is reported only once
7
../test003.c:11: error: for each function it appears in.)
8
../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?

von Thomas (Gast)


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 :)

von Peter Fleury (Gast)


Lesenswert?

1
..
2
#include "lcd.c"
3
..


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.

von Thomas (Gast)


Lesenswert?

Warum sollte man dies nicht tun?

Es funktioniert zumindest prima.

von horst (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Thomas,

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

Gruss horst.

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
Noch kein Account? Hier anmelden.