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 :)
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
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
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).
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 ;)
>> Ich verzweifel momentan irgendwie mit Fleurys library Da bist du nicht der Erste ;-)) Beitrag "Wie mache ich eine Textausgabe 8Bit auf Display?"
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...
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.
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 ;)
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?
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 :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.