Grafik VFD GU128x64 an Mega32

Gast #1634762
Lesenswert?

Hallo Forengemeinde,

gibt es für das im Datenblatt angehängte Display schon irgend eine lib 
für gcc oder muss man da sich was coden?
Habe schon versucht, das Display lt. Datenblatt zu initialisieren, 
jedoch tut sich absolut nix. Wäre schonmal erfreut wenn ein Pixel 
leuchten würde.
1
#define F_CPU 8000000L    //4 MHz
2
#include <avr/io.h>    //IN / OUTPUT includen
3
#include <util/delay.h>   //Zeitverzögerung includen
4

5
int main(void){
6
DDRB = 0xff; //PortA als AUSGANG
7
PORTB = 0XFF;//Pullups aktivieren
8

9
DDRA = 0xff; //PortA als AUSGANG
10
PORTA = 0XFF;//Pullups aktivieren
11

12
PORTA = 0xFF;
13

14
PORTB = 0x5F;
15
_delay_ms(1);
16
char n;
17

18
  for(n=0;n<9;n++)
19
  {
20
   PORTA = 0x01; // C/D = 1
21
   PORTB = 0x62;
22
   PORTB = n;
23
   PORTA = 0x00; // C/D = 0
24

25
   PORTB = 0xFF;
26
   }
27

28
}


MfG
Angehängte Dateien:
#1634779
Lesenswert?

Also das was bei dir in dem Quelltext als Pullups markiert ist stimmt 
schon mal nicht, weil das sind keine Pullups, damit schaltest du den 
Ausgang high/low, aber gut ist nur ein sprachlicher Formfehler. Was mir 
an deinem Quelltext fehlt ist ein "Setzen" Impuls. Du gibst die Daten 
zwar an die Eingänge des Displays, aber du sagst nie übernehmen diese, 
oder seh ich da was falsch ?
Außerdem musst du den CSS wahrscheinlich auch noch mit low/high 
irgendwie ansteuern.
Ein Schaltplan wäre auch nicht schlecht, der zeigt wie du das Display 
angeschlossen hast.
#1634828
Lesenswert?

Wie ich vermutet hab, hast du nur ein Teil der benötigten Pins 
angeschlossen.
Das Display kenne ich nicht wirklich, aber beim überfliegen des 
Datenblatts ist mir aufgefallen, dass man anscheinend erst einmal die 
Jumper richtig setzen muss und dann schau dir mal Seite 15-16 des 
Datenblattes an, da ist beschrieben, wie du die Operationen ausführen 
musst.
Gast #1634834
Lesenswert?

/CSS, /RD, und /WR? Aber wann muss ich die dann setzen? Verstehe das 
Datenblatt in PDF-Seite 8/22 nicht ganz. Sind soviele umfangreiche 
Funktionen und dabei steht auch nicht wann /CSS, /RD, oder /WR zu setzen 
sind und was sie bewirken... Sorry, stehe im moment ein wenig auf der 
Leitung.

MfG
Gast #1634874
Lesenswert?

Hi

Als erstes solltest du dich für ein Interface entscheiden (Jumper J1/J2 
S.18). Parallel #1 entspricht dem 8080-Mode, #2 dem 6800-Mode üblicher 
Grafikdisplays. Seriell dürfte klar sein. Auf S.15-17 findest du dann 
das passende Timing.

MfG Spess
Gast #1634882
Lesenswert?

Aha, interessant. im Moment befindet sich das Display im Parallel 
#1-Mode. was ist deiner Meinung nach am einfachsten, um einen ersten 
Erfolg zu erzielen? Wahrscheinlich seriell. Dann müsste ich doch 
theoretisch nur TXD vom uC an RXD vom Display anschließen, der Rest ist 
Softwaresache. Oder liege ich da falsch?

MfG
Gast #1634889
Lesenswert?

Hi

>Dann müsste ich doch theoretisch nur TXD vom uC an RXD vom Display
>anschließen, der Rest ist Softwaresache. Oder liege ich da falsch?

Nein. Nur ist ein Parallelinterface wesentlich schneller.

MfG Spess
Gast #1637554
Lesenswert?

Verwende jetzt Parallel#1. Initialisierung und Ansteuerung einzelner 
Bildpunkte funktioniert jetzt wunderbar. Jetzt ist nur die Frage ob es 
vordefinierte Fonts gibt. Das Display ist laut Datenblatt nur auf Grafik 
und nicht auf Text ausgelegt, hat also keinen Fontspeicher. Unten seht 
ihr die Darstellung der oberen Hälfte einer "2" im Block "write_2". Wäre 
echt cool, wenn es dafür schon ein Fontset mit Zahlen gäbe, das Display 
soll im übrigen die Anzeige eines DCF-Weckers werden, also würden große 
Zahlen ausreichen. Die Menüauswahlpunkte könnte man ja per Hand malen. 
Allerdings wäre es einfacher wenn man mit ner Routine einfach ala 
_write_string("helloworld"); nen Text auf das Display zaubern könnte. 
Habt Ihr vielleicht irgendwelche Ideen?

MfG
1
#define F_CPU 8000000L    //4 MHz
2
#include <avr/io.h>    //IN / OUTPUT includen
3
#include <util/delay.h>   //Zeitverzögerung includen
4

5
//  DAT = PORTB
6
//  C/D = PORTA
7
//  W/R = PORTC
8
//  CSS = PORTD
9

10
char a;
11
char x;
12
char y;
13
int init(){
14

15
DDRB = 0xff; //PortB als AUSGANG
16
PORTB = 0X00;
17

18
DDRC = 0xff; //PortC als AUSGANG
19
PORTC = 0X00;
20

21
DDRA = 0xff; //PortA als AUSGANG
22
PORTA = 0X00;
23

24
DDRD = 0xff; //PortA als AUSGANG
25
PORTD = 0X00;
26

27
_delay_ms(1);
28
comwrite(0x5f);
29
_delay_us(1);
30
char n;
31
  for(n=0;n<10;n++)
32
  {
33
   comwrite(0x62);
34
   comwrite(n);
35
   datawrite(0xff);
36
   }
37

38

39
_delay_us(1);
40
comwrite(0b00101100);  // DISPLAY EIN
41
comwrite(0b01000100);
42

43
_delay_us(1);
44
comwrite(0b10000110);
45
}
46

47
int datawrite(a){
48
PORTD = 0xFF; //CSS AN
49
PORTA = 0xFF; //CD AN
50
PORTC = 0xFF; // WR AN
51
_delay_us(10);
52
PORTD = 0x00; // CSS AUS
53
PORTA = 0x00; //CD AUS
54
_delay_us(10);
55
PORTC = 0x00; // WR AUS
56
PORTB = a;
57
_delay_us(10);
58
PORTC = 0xFF; // WR AN
59
_delay_us(10);
60
PORTB = 0x00;
61

62
PORTD = 0xFF; //CSS AN
63
PORTA = 0xFF; //CD AN
64
_delay_us(10);
65
PORTD = 0x00; // CSS AUS
66
PORTA = 0x00; //CD AUS
67

68

69

70

71
}
72

73
int comwrite(a){
74

75
PORTD = 0xFF; //CSS AN
76
PORTA = 0xFF; //CD AN
77
PORTC = 0xFF; // WR AN
78
_delay_us(10);
79
PORTD = 0x00; // CSS AUS
80
_delay_us(10);
81
PORTC = 0x00; // WR AUS
82
PORTB = a;
83
PORTC = 0xFF; // WR AN
84
_delay_us(10);
85
PORTB = 0x00;
86
_delay_us(10);
87
PORTD = 0xFF; //CSS AN
88
PORTA = 0x00; //CD AUS
89
_delay_us(10);
90
PORTA = 0xFF; //CD AN
91
PORTD = 0x00; // CSS AUS
92

93

94

95
}
96

97
int gotoxy(x,y){
98

99
comwrite(0b01100101);  // Funktion X-POS GRAM
100
comwrite(x);  // Wert X-POS GRAM
101
comwrite(0b01100000);  // Funktion Y-POS GRAM
102
comwrite(y);  // Wert
103

104
}
105

106
int write_2(){
107

108
char startposx = 0;
109
char startposy = 0;
110

111
gotoxy(startposx, startposy);
112
datawrite(0b00001110);
113
gotoxy(startposx+1, startposy);
114
datawrite(0b00001111);
115
gotoxy(startposx+2, startposy);
116
datawrite(0b00001111);
117
gotoxy(startposx+3, startposy);
118
datawrite(0b00001101);
119
gotoxy(startposx+4, startposy);
120
datawrite(0b00001100);
121
gotoxy(startposx+5, startposy);
122
datawrite(0b00001100);
123
gotoxy(startposx+6, startposy);
124
datawrite(0b00001100);
125
gotoxy(startposx+7, startposy);
126
datawrite(0b00001100);
127

128

129
}
130

131

132
int main(void){
133

134
init();
135
comwrite(0b10110100);
136

137
write_2();
138

139

140
return(0);
141

142

143

144

145

146

147

148

149
}

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