Forum: Mikrocontroller und Digitale Elektronik ATTiny2313 & LDC-Display EA DOGM163E


von M. B. (freiberger77)


Angehängte Dateien:

Lesenswert?

Hallo,
ich bin Anfaänger mit AVR und versuche seit ner Woche ein EA DOGM163E - 
LCD-Display (5V) an nem ATTiny2313 im 4Bit-Modus laufen zu lassen.
(SPI habe ich auch versucht, ohne Erfolg)

Den Code habe ich im Netz gefunden ( nur Port C auf Port D geändert)
 * PD4     = RS
 * PD5     = Enable
 * PD0-PD3 = D4-D7
 * R/W ist n.c.

Allerdings bekomme ich keine Anzeige auf dem Display ?
Gibt es einen Trick, wie man sehen kann, ob das Teil überhaupt geht ?

Habe die PINS (PD0 bis PD5) mit ner LED geprüft, es flackert auch was.
Die F_CPU ist angepasst...

Ich weiß echt nicht weiter...

von (prx) A. K. (prx)


Lesenswert?

Marco Beyer schrieb:

>  * R/W ist n.c.

Muss am Display auf GND, sonst wird das nix.

von M. B. (freiberger77)


Lesenswert?

Habe beides schon probiert ( 5V und GND ).
Gibt es an dem Display einen "Test", den man abfragen kann, wenn das 
Teil geht ?

von (prx) A. K. (prx)


Lesenswert?

lcd_write mit seinen 2 Nibbles kann bei der Initialisierung erst 
verwendet werden, wenn der 4bit Modus fertig ausgehandelt ist. Davor 
wird das zweite Nibble logischerweise missverstanden.

Doku zum Display-Controller ST7036 lesen, da steht die korrekte 
Initialisierung für 4-Bit Modus drin.

NB etwas Kosmetik:
 PORTD = PORTD | ( 1<<DDD5 ) ;
DDD5 gehört zu DDRD. Also:
 PORTD |= ( 1<<PD5 ) ;

von (prx) A. K. (prx)


Lesenswert?

Apropos EA DOG: Die Dinger ähneln zwar der gängigen HD44780-Displays, 
anschlusstechnisch gibt es aber Unterschiede. In der Initialisierung 
auch. Hast du ein Schaltbild von deiner Verschaltung?

Such lieber Code speziell für solche EA DOG Displays, keinen 
Standardcode für die HD44780-Displays.

von M. B. (freiberger77)


Lesenswert?

habe leider keinen anderen Code gefunden, der ohne Probleme bei mir 
läuft.
Habe die Port-Einstellung geändert.
Die Anzeige bleibt leer...

von Peter D. (peda)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Wie ist das Display angeschlossen, und bitte komplett?

von M. B. (freiberger77)


Lesenswert?

ich versuche es mal damit...

von (prx) A. K. (prx)


Lesenswert?

@Peter: So ganz kommentarlos einem Anfänger den Code auf Basis der 
Anschlussvariante SPI unterzuschieben...

von M. B. (freiberger77)


Lesenswert?

Das Display ist wie im Datenblatt angeschlossen (auf Steckbrett).
5V 4Bit...

von (prx) A. K. (prx)


Lesenswert?

Was ist mit CSB passiert?

Das Teil kann man auch seriell ansprechen. Das zu passt Peters Code. Zu 
deinem 4-Bit Interface passt er nicht.

Könnte aber, da Steckbrett, für dich einfacher sein, den Anschluss auf 
SPI zu ändern und seinen Code zu verwenden.

von M. B. (freiberger77)


Lesenswert?

CSB int auf GND.
Den SPI-Code würde ich auch testen, muß ihn aber erstmal zum laufen 
bringen...
Der Takt sollte stimmen, sonst würde die LED an PB0 nicht mit 1Hz 
blinken...

von M. B. (freiberger77)


Lesenswert?

bei Peters Code kommen noch die Fehler...


Main.o: In function `main':
X:\AVR-Programme\LCD-Display_2\default/../Main.c:7: undefined reference 
to `lcd_init'
X:\AVR-Programme\LCD-Display_2\default/../Main.c:9: undefined reference 
to `lcd_pos'
X:\AVR-Programme\LCD-Display_2\default/../Main.c:10: undefined reference 
to `lcd_text_'
X:\AVR-Programme\LCD-Display_2\default/../Main.c:11: undefined reference 
to `lcd_pos'
X:\AVR-Programme\LCD-Display_2\default/../Main.c:12: undefined reference 
to `lcd_text_'
make: *** [LCD-Display_2.elf] Error 1
Build failed with 5 errors and 1 warnings...

Weiß noch nicht warum

von (prx) A. K. (prx)


Angehängte Dateien:

Lesenswert?

Weil Peter möglicherweise eine etwas urtümliche Umgebung verwendet. 
Anbei aktualisiert. Wirst aber trotzdem nicht drum herum kommen, beide 
.c Files zusammen zu übersetzen.

von M. B. (freiberger77)


Lesenswert?

OK, der Code läuft.
Mußte noch
#include "lcd_drv.c"
in MAIN.c hinzufügen...

Ich werde mal das Steckbrett umbauen.
Danke aber erstmal für eure schnelle Hilfe

Aber ich muß dann doch in der MAIN.H die Ports zuordnen.
(oder das Steckbrett danach anschließen)
1
#define  LCD_DI    SBIT( PORTB, 3 )
2
#define  LCD_DDR_DI  SBIT( DDRB, 3 )
3
4
#define  LCD_RS    SBIT( PORTB, 2 )
5
#define  LCD_DDR_RS  SBIT( DDRB, 2 )
6
7
#define  LCD_SCK    SBIT( PORTB, 0 )
8
#define  LCD_DDR_SCK  SBIT( DDRB, 0 )
9
10
#define  LCD_CS    SBIT( PORTB, 1 )
11
#define  LCD_DDR_CS  SBIT( DDRB, 1 )

Ich habe laut Schaltplan
SI, CLK, RS & CSB
Ich nehme mal an SI=DI, RS=RS, CLK SCK & CSB=CS, bin ich da richtig ?

von (prx) A. K. (prx)


Lesenswert?

Marco Beyer schrieb:

> #include "lcd_drv.c"
> in MAIN.c hinzufügen...

Geht auch ist aber trotzdem ein falscher Weg. Womit arbeitest Du, dem 
Studio? Dann einfach das zweite .c File zum Projekt hinzufügen.

> Ich nehme mal an SI=DI, RS=RS, CLK SCK & CSB=CS, bin ich da richtig ?

Ja.

von M. B. (freiberger77)


Lesenswert?

Das zweite .c-File ist hinzugefügt.
Aber wenn ich #include "lcd_drv.c" rausnehme geht es manchmal und nach 
dem Neustart von AVR-Studio gehts dann mal wieder nicht...

von M. B. (freiberger77)


Lesenswert?

Hey, viele Dank für die Hilfe,
mit SPI kann ich endlich mal was sehen.

Es steht schon mal "Hallo" in der ersten Zeile.
Laut Code sollte noch "Peter" darunter stehen, aber ich denke mal das 
liegt an den Einstellungen in der MAIN.h, da es für EA_DOGM162 ausgelegt 
ist.
In der LCD_DRV.c kann man das ja änder, aber wie ???
1
#ifdef      EA_DOGM081
2
  lcd_command( 0x31 );
3
  lcd_command( 0x1C );
4
  lcd_command( 0x51 );
5
  lcd_command( 0x6A );
6
  lcd_command( 0x74 );
7
#elif defined    EA_DOGM162
8
  lcd_command( 0x39 );
9
  lcd_command( 0x1C );
10
  lcd_command( 0x52 );
11
  lcd_command( 0x69 );
12
  lcd_command( 0x74 );
13
#else
14
#error No LCD type defined !!!
15
#endif

von (prx) A. K. (prx)


Lesenswert?

Datesheet, Display oder ST7036.

von M. B. (freiberger77)


Lesenswert?

OK, habe es gefunden.
DANKESCHÖN !    ;-)

von Peter D. (peda)


Lesenswert?

1
#ifdef      EA_DOGM081
2
  lcd_command( 0x31 );
3
  lcd_command( 0x1C );
4
  lcd_command( 0x51 );
5
  lcd_command( 0x6A );
6
  lcd_command( 0x74 );
7
#elif defined    EA_DOGM162
8
  lcd_command( 0x39 );
9
  lcd_command( 0x1C );
10
  lcd_command( 0x52 );
11
  lcd_command( 0x69 );
12
  lcd_command( 0x74 );
13
#elif defined    EA_DOGM163
14
  lcd_command( 0x39 );
15
  lcd_command( 0x1D );
16
  lcd_command( 0x50 );
17
  lcd_command( 0x6C );
18
  lcd_command( 0x7C );
19
#else
20
#error No LCD type defined !!!
21
#endif

und
1
void lcd_pos( u8 line, u8 column )
2
{
3
  switch( line ){
4
#ifdef      EA_DOGM163
5
    case 2: column += 0x10;
6
    case 1: column += 0x10;
7
#else
8
    case 1: column += 0x40;
9
#endif
10
  }
11
  lcd_command( 0x80 + column );
12
}


Peter

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.