LCD 4x16 Problem

Gast #3684054
Lesenswert?

Servus,
ich habe mir bei Pollin dieses LCD bestellt:
LCD-Modul TC1604A-01 
http://www.pollin.de/shop/dt/MTczOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_TC1604A_01.html

Leider bringe ich es nicht zum laufen und benötige eure Hilfe.

aktueller Stand:
----------------
Die Hintergrundbeleuchtung funktioniert nach dem einschalten von PA5.
Kurz nach dem Start zeigt das Display in der ersten und zweiten Zeile 
jeweils 8 schwarze Felder an. Diese verschwinden nach ein paar Sekunden 
wieder und das Display ist dann "leer".

Verwendete Library:
-------------------
Peter Dannegger - 
http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip

main.h
------
1
#ifndef F_CPU
2
#define F_CPU 16000000UL
3
#endif
4

5
#include <avr/io.h>
6
#include <avr/interrupt.h>
7
#include <util/delay.h>
8
#include "defs.h"
9

10
#define  LCD_D4    SBIT( PORTC, 4 )
11
#define  LCD_DDR_D4  SBIT( DDRC, 4 )
12

13
#define  LCD_D5    SBIT( PORTC, 5 )
14
#define  LCD_DDR_D5  SBIT( DDRC, 5 )
15

16
#define  LCD_D6    SBIT( PORTC, 6 )
17
#define  LCD_DDR_D6  SBIT( DDRC, 6 )
18

19
#define  LCD_D7    SBIT( PORTC, 7 )
20
#define  LCD_DDR_D7  SBIT( DDRC, 7 )
21

22
#define  LCD_RS    SBIT( PORTA, 6 )
23
#define  LCD_DDR_RS  SBIT( DDRA, 6 )
24

25
#define  LCD_E0    SBIT( PORTA, 7 )
26
#define  LCD_DDR_E0  SBIT( DDRA, 7 )

main.c
------
1
#include "main.h"
2

3
#define TRIGGER PC0
4
#define FOCUS PD7
5
#define LED1 PD3
6
#define LED2 PD4
7
#define LED3 PD5
8
#define LED4 PD6
9
#define BACKLIGHT PA4
10
#define LCD_POWER PA5
11

12
int main(void)
13
{
14
  // Display initialisieren
15
  lcd_init();
16
  
17
  /*
18
  * Timer 1
19
  * 16-Bit
20
  * CTC-Mode
21
  * f = 1Hz
22
  */
23
  TCCR1B |= (1 << WGM12);
24
  TIMSK |= (1 << OCIE1A);
25
  OCR1A = 15625-1;
26
  TCCR1B |= ((1 << CS10) | (1 << CS12));
27
  
28
  // Auslöser an PC0
29
  DDRC |= (1 << DDRC0);
30
  
31
  // Focus an PD7
32
  DDRD |= (1 << DDRD7);
33
  
34
  // LEDS
35
  DDRD |= (1 << DDRD3);
36
  DDRD |= (1 << DDRD4);
37
  DDRD |= (1 << DDRD5);
38
  DDRD |= (1 << DDRD6);
39
  
40
  // LCD
41
  DDRA |= (1 << DDRA4);  // Backlight
42
  DDRA |= (1 << DDRD5);  // LCD Power
43
  
44
  // lcd einschalten
45
  PORTA |= (1 << LCD_POWER);
46
  
47
  sei();
48
  lcd_pos( 0, 1 );
49
  lcd_text( (u8*)"Zeile 1" );
50
  
51
    while(1)
52
    {
53
        PORTD ^= ( 1 << LED1 );
54
        PORTD ^= ( 1 << LED2 );
55
        PORTD ^= ( 1 << LED3 );
56
        PORTD ^= ( 1 << LED4 );
57
        _delay_ms(100);
58
    }
59
}
60

61
ISR (TIMER1_COMPA_vect)
62
{
63
    PORTC ^= ( 1 << TRIGGER );
64
}

Hat jemand nen Tipp für mich?

VG
Willy
Gast #3684074
Lesenswert?

Hallo Sascha,
danke für deine schnelle Antwort.

Das ich das Ding vorher Einschalten muss, da hätte ich auch selber drauf 
kommen können.

Leider bleibt das Display weiterhin "leer".

ich hab den Code mal angepasst und das Timer-Zeugs rausgeschmissen um es 
für dieses Problem übersichtlicher zu halten.

main.c
------
1
int main(void)
2
{
3
  // LEDS
4
  DDRD |= (1 << DDRD3);
5
  DDRD |= (1 << DDRD4);
6
  DDRD |= (1 << DDRD5);
7
  DDRD |= (1 << DDRD6);
8
  
9
  // LCD
10
  DDRA |= (1 << DDRA4);  // Backlight
11
  DDRA |= (1 << DDRD5);  // LCD Power
12
  
13
  // lcd einschalten
14
  PORTA |= (1 << LCD_POWER);
15
  
16
  // Display initialisieren
17
  lcd_init();
18
  lcd_pos( 0, 1 );
19
  lcd_text( (u8*)"Zeile 1" );
20
  
21
    while(1)
22
    {
23
        PORTD ^= ( 1 << LED1 );
24
    _delay_ms(100);
25
    }
26
}

Noch eine Zusatzinfo, machmal verschmieren die Schwarzen Balken nach dem 
Flashen, sind also nur halb zu sehen. Sieht aus wie ein Farbverlauf von 
Transparent nach Schwarz, ich versuche ob ich davon mal ein Bild machen 
kann.

Sascha Weber schrieb:
> Im übrigen keine gute Idee GND abzuschalten, da über die anderen Pins
> ohne entsprechende Vorkehrung immer irgendwo Masse herkommt!

Diese Funktion ist optional und nicht wichtig, wenns nicht hinhaut muss 
ich es das nächste mal anderst machen.
Gast #3684352
Lesenswert?

Hallo Georg

Georg G. schrieb:
> überbrücke doch mal deinen Transistor in der Masseleitung mit einem
> Stück Draht.

Hab ich gemacht, am Display liegen nun konstant 5V an (zwischen Pin1 und 
Pin2)

@Sascha
ich hab Pin3 nun auf GND gelegt (testhalber) um die vollen Kontrast zu 
haben.

Ergebnis:
Das Display zeigt nun nach dem Flashen einen dünnen schwarzen Strich an, 
der dann mit der Zeit verschwindet.
#3684362
Lesenswert?

Willy schrieb:
> ich hab Pin3 nun auf GND gelegt (testhalber) um die vollen Kontrast zu
> haben.
Den höchsten Kontrast bekommst du nicht bei GND sondern bei xV, 
ausprobieren.

> Ergebnis:
> Das Display zeigt nun nach dem Flashen einen dünnen schwarzen Strich an,
> der dann mit der Zeit verschwindet.
Da würde ich auf ein Kontaktproblem tippen.

Ohne jede Initialisierung, nur nach Anlegen der Betriebsspannung sollte 
das Display ein oder zwei Reihen dunkle Rechtecke zeigen. Diese Anzeige 
sollte stabil sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren