Forum: Mikrocontroller und Digitale Elektronik Grafik VFD GU128x64 an Mega32


von disPlayer (Gast)


Angehängte Dateien:

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

von disPlayer (Gast)


Lesenswert?

Achso, habe noch vergessen zu erwähnen: PortB hängt 1zu1 an D0-D7, PortA 
hängt an C/D

MfG

von Ralf G. (sense)


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.

von disPlayer (Gast)


Angehängte Dateien:

Lesenswert?

Ja die Pullups waren ein Relikt aus Copy+Paste. Hier im Anhang der 
momentane Aufbau auf dem Steckbrett. Der uC ist über 8Mhz internem Takt 
betrieben.

MfG

von holger (Gast)


Lesenswert?

>Hier im Anhang der
>momentane Aufbau auf dem Steckbrett.

Da fehlen aber schon noch ein paar Leitungen.

von Ralf G. (sense)


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.

von disPlayer (Gast)


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

von spess53 (Gast)


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

von disPlayer (Gast)


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

von spess53 (Gast)


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

von disPlayer (Gast)


Lesenswert?

Stimmt. Ich muss CSS am Anfang der Übertragung auf 0 ziehen und bei 
jedem Takt SCK toggeln. Kann der AVR das automatisch über den 
vorhandenen SCK der ISP per Software oder muss das hardcoded sein?


MfG

von disPlayer (Gast)


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
}

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.