www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grafik VFD GU128x64 an Mega32


Autor: disPlayer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.
#define F_CPU 8000000L    //4 MHz
#include <avr/io.h>    //IN / OUTPUT includen
#include <util/delay.h>   //Zeitverzögerung includen

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

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

PORTA = 0xFF;

PORTB = 0x5F;
_delay_ms(1);
char n;

  for(n=0;n<9;n++)
  {
   PORTA = 0x01; // C/D = 1
   PORTB = 0x62;
   PORTB = n;
   PORTA = 0x00; // C/D = 0

   PORTB = 0xFF;
   }

}


MfG

Autor: disPlayer (Gast)
Datum:

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

MfG

Autor: Ralf G. (sense)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: disPlayer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hier im Anhang der
>momentane Aufbau auf dem Steckbrett.

Da fehlen aber schon noch ein paar Leitungen.

Autor: Ralf G. (sense)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: disPlayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: disPlayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: disPlayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: disPlayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
#define F_CPU 8000000L    //4 MHz
#include <avr/io.h>    //IN / OUTPUT includen
#include <util/delay.h>   //Zeitverzögerung includen

//  DAT = PORTB
//  C/D = PORTA
//  W/R = PORTC
//  CSS = PORTD

char a;
char x;
char y;
int init(){

DDRB = 0xff; //PortB als AUSGANG
PORTB = 0X00;

DDRC = 0xff; //PortC als AUSGANG
PORTC = 0X00;

DDRA = 0xff; //PortA als AUSGANG
PORTA = 0X00;

DDRD = 0xff; //PortA als AUSGANG
PORTD = 0X00;

_delay_ms(1);
comwrite(0x5f);
_delay_us(1);
char n;
  for(n=0;n<10;n++)
  {
   comwrite(0x62);
   comwrite(n);
   datawrite(0xff);
   }


_delay_us(1);
comwrite(0b00101100);  // DISPLAY EIN
comwrite(0b01000100);

_delay_us(1);
comwrite(0b10000110);
}

int datawrite(a){
PORTD = 0xFF; //CSS AN
PORTA = 0xFF; //CD AN
PORTC = 0xFF; // WR AN
_delay_us(10);
PORTD = 0x00; // CSS AUS
PORTA = 0x00; //CD AUS
_delay_us(10);
PORTC = 0x00; // WR AUS
PORTB = a;
_delay_us(10);
PORTC = 0xFF; // WR AN
_delay_us(10);
PORTB = 0x00;

PORTD = 0xFF; //CSS AN
PORTA = 0xFF; //CD AN
_delay_us(10);
PORTD = 0x00; // CSS AUS
PORTA = 0x00; //CD AUS




}

int comwrite(a){

PORTD = 0xFF; //CSS AN
PORTA = 0xFF; //CD AN
PORTC = 0xFF; // WR AN
_delay_us(10);
PORTD = 0x00; // CSS AUS
_delay_us(10);
PORTC = 0x00; // WR AUS
PORTB = a;
PORTC = 0xFF; // WR AN
_delay_us(10);
PORTB = 0x00;
_delay_us(10);
PORTD = 0xFF; //CSS AN
PORTA = 0x00; //CD AUS
_delay_us(10);
PORTA = 0xFF; //CD AN
PORTD = 0x00; // CSS AUS



}

int gotoxy(x,y){

comwrite(0b01100101);  // Funktion X-POS GRAM
comwrite(x);  // Wert X-POS GRAM
comwrite(0b01100000);  // Funktion Y-POS GRAM
comwrite(y);  // Wert

}

int write_2(){

char startposx = 0;
char startposy = 0;

gotoxy(startposx, startposy);
datawrite(0b00001110);
gotoxy(startposx+1, startposy);
datawrite(0b00001111);
gotoxy(startposx+2, startposy);
datawrite(0b00001111);
gotoxy(startposx+3, startposy);
datawrite(0b00001101);
gotoxy(startposx+4, startposy);
datawrite(0b00001100);
gotoxy(startposx+5, startposy);
datawrite(0b00001100);
gotoxy(startposx+6, startposy);
datawrite(0b00001100);
gotoxy(startposx+7, startposy);
datawrite(0b00001100);


}


int main(void){

init();
comwrite(0b10110100);

write_2();


return(0);








}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.