Hallo,
ich habe bisher nur Arduinos benutzt und wollte nun mal einen ATtyin2313
direkt mit Atmel Studio nutzen.
Ich wollte als erstes mal mein Display testen und habe mir die Fleur Lib
besorgt und in den Projektordner gelegt.
In der lcd.h habe ich folgendes angepasst, bzw. gelassen:
XTAL auf 8000000 geändert
1
#define XTAL 8000000
2
3
4
#define LCD_PORT PORTA /**< port for the LCD lines */
5
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
6
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
7
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
8
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
9
#define LCD_DATA0_PIN PB0 /**< pin for 4bit data bit 0 */
10
#define LCD_DATA1_PIN PB1 /**< pin for 4bit data bit 1 */
11
#define LCD_DATA2_PIN PB2 /**< pin for 4bit data bit 2 */
12
#define LCD_DATA3_PIN PB3 /**< pin for 4bit data bit 3 */
13
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
14
#define LCD_RS_PIN PB4 /**< pin for RS line */
15
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
16
#define LCD_RW_PIN PB5 /**< pin for RW line */
17
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
18
#define LCD_E_PIN PB6 /**< pin for Enable line */
Nun habe ich die Anschlüsse des HD44780 kompatilen Displays wie folgt an
den Attiny angeschlossen (4bit Modus)
1
LCD_DATA0_PIN(DB4) -> PB0
2
LCD_DATA1_PIN(DB5) -> PB1
3
LCD_DATA2_PIN(DB6) -> PB2
4
LCD_DATA3_PIN(DB7) -> PB3
5
LCD_RS_PIN(RS) -> PB4
6
LCD_RW_PIN(R/W) -> PB5
7
LCD_E_PIN(E) -> PB6
Nun verstehe ich noch nicht so ganz wie ich die PIN's PB0-PB6 oben bei
definde korrekt nutze.. also welche nummern diese dann haben!?
Weil so funktioniert es leider noch nicht ;(
Vielen Dank
P.S:
So wollte ich das dann testen:
Dennis Davis schrieb:> Nun verstehe ich noch nicht so ganz wie ich die PIN's PB0-PB6 oben bei> definde korrekt nutze.. also welche nummern diese dann haben!?
Das sieht doch alles gut aus.
Dennis Davis schrieb:> Weil so funktioniert es leider noch nicht ;(
Zieh zum Testen deinen Programmer ab, der hängt auch auf PB5-PB7.
mfg.
den Programmer habe ich ab. Ich habe noch einen 10K an Reset zu VCC.
Sonst ist da nichts dran.
Habe gerade die ganzen Kabel auch nochmal geprüft, das müsste so
stimmen...
was meinst du mit #1, ich habe oben ja z.B. für
#define LCD_DATA0_PIN PB0 /**< pin for 4bit data bit 0 */
was dann zu DB4 am LCD geht
Dennis Davis schrieb:> sorry, wenn ich blöd frage, aber meinst du das dann so?
Zeig uns lieber mal, wo du das LCD tatsächlich angelötet hast und poste
deinen vollständigen Code.
mfg.
Thomas Eckmann schrieb:> Hermann-Josef schrieb:>> zwar sind PB0 und PA0 als defines für den Compiler identisch, aber nicht>> für den uController.> Da steht doch nur eine Nummer hinter. Das ist egal. Guck dir das in> portpin.h mal an.
Ja genau, so wollte ich das auch verstanden haben. Aber als Pin des
uControllers sind sie verschieden, eben über PORT_* ausgewählt.
@Denis: Und, wenn man den Kontrast verstellt, kann man dann etwas sehen?
-> dann wäre die Initialisierung schon mal nicht ganz falsch.
Hermann-Josef
Dennis Davis schrieb:> #include "lcd.c"
Völlig daneben!
Die *.c-Datei musst du in den Project-Settings dem Projekt hinzufügen.
Bei den Includes hat die gar nichts verloren.
mfg.
Den Kontrast habe ich über einen Poti angeschlossen und auch mal in
beide Richtungen gedreht. Man sieht in der ersten und dritten Zeile
"Blöcke". Die sieht man aber auch wenn der µC garnicht eingesteckt ist.
Ok, habe die .c Datei hinzugefügt und den include entfernt ;) Aber das
ändert ja nichts an der Funktionalität ;(
Dennis Davis schrieb:> so ist das verschaltet.
Stützkondensator 100nF zw. Vcc und GND so nah wie geht am Controller
fehlt.
Dem Display würde einer auch nicht schaden.
Was sagt der Compiler? 0 Errors, 0 Warnings?
mfg.
ist denn die lcd.h und der eigentliche Code 100% korrekt so? Weil ich
sonst nicht recht weiß, was da noch falsch sein soll ;)
hiernochmal der Code: (jetzt ohne lcd.c)^^
1
#include <avr/io.h>
2
#include "lcd.h"
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
lcd_init (LCD_DISP_ON);
8
lcd_puts ("Hello World :)");
9
10
DDRA = (1 << PA1);
11
PORTA |= (1 << PA1);
12
13
for (;;){};
14
}
und hier der relevante Teil der lcd.h
1
#ifndef LCD_H
2
#define LCD_H
3
4
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 303
5
#error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"
6
#endif
7
8
#include <inttypes.h>
9
#include <avr/pgmspace.h>
10
11
#define XTAL 8000000 /**< clock frequency in Hz, used to calculate delay timer */
12
13
14
15
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
16
17
18
#define LCD_LINES 4 /**< number of visible lines of the display */
19
#define LCD_DISP_LENGTH 20 /**< visibles characters per line of the display */
20
#define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */
21
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
22
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
23
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
24
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
25
#define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */
Moin Dennis,
Nee, besser nicht, wenn der Kontrast zu stark ist, siehst Du die Zeichen
ja nicht mehr.
Die Spannung sollte sich zwischen 0 und +5V einstellen lassen (bei
manchen Modellen auch 0 .. -5V). Aus dem Datenblatt wurde ich nicht ganz
schlau.
Deine Skizze schaut so aus, als hättest Du Mittenanzapfung und Masse am
Poti vertauscht.
Kennst Du die Seite von Sprut bzgl. LCDs?
http://www.sprut.de/electronic/lcd/index.htm
Gruß
Hermann-Josef