Forum: Mikrocontroller und Digitale Elektronik AVR mit Noritake VFD


von daniel (Gast)



Lesenswert?

Hallo,

ich versuche derzeit das Noritake VFD Display aus dem Anhang per ATMega 
32 anzusteuern. Den Testmodus des Displays habe ich schon ausprobiert, 
dieser funktioniert und das Display spielt seine Testsequenz ab. 
Versuche ich nun aber den Buchstabe "A" auf dem Display auszugeben 
passiert einfach nichts. Ich verwende dafür aktuell folgenden Code:
1
  DDRA = 0xff;                            //PORTA als Ausgang
2
  DDRD |= (1 << DDD5) | (1 << DDD4) | (1 << DDD3);          //PC3,4,5 als Ausgang
3
  
4
  PORTD |= (1<<PD4);                          //RESET auf High
5
  PORTD |= (1<<PD3);                          //WR AUF HIGH
6
  _delay_ms(1);
7
  
8
  PORTA = 0b00000001;                          //Header ausgeben
9
  _delay_us(10);                            //Warten
10
  PORTD &= ~(1<<PD3);                          //WR toggeln
11
  _delay_us(80);                            //Warten
12
  
13
  PORTD |= (1<<PD3);                          //WR wieder auf 1
14
  PORTA = 0b01000011;                          //OP Code 0x43 ausgeben
15
  _delay_us(10);                            //Warten
16
  PORTD &= ~(1<<PD3);                          //WR toggeln
17
  _delay_us(80);                            //Warten
18
  
19
  PORTD |= (1<<PD3);                          //WR wieder auf 1
20
  PORTA = 0b00000000;                          //Start Adresse 0x00 ausgeben
21
  _delay_us(10);                            //Warten
22
  PORTD &= ~(1<<PD3);                          //WR toggeln
23
  _delay_us(80);                            //Warten
24
  
25
  PORTD |= (1<<PD3);                          //WR wieder auf 1
26
  PORTA = 0b00000100;                          //länge ausgeben 0x04
27
  _delay_us(10);                            //Warten
28
  PORTD &= ~(1<<PD3);                          //WR toggeln
29
  _delay_us(80);                            //Warten
30
  
31
  PORTD |= (1<<PD3);                          //WR wieder auf 1
32
  PORTA = 0b01000001;                          //Write Mode wählen 0x41
33
  _delay_us(10);                            //Warten  
34
  PORTD &= ~(1<<PD3);                          //WR toggeln
35
  _delay_us(80);                            //Warten
36
  
37
  PORTD |= (1<<PD3);                          //WR wieder auf 1
38
  PORTA = 0b10000010;                          // 'A' auf dem Display ausgeben
39
  _delay_us(10);                            //Warten
40
  PORTD &= ~(1<<PD3);                          //WR toggeln

Habe ich in meiner Interpretation des Datenblattes einen Fehler gemacht, 
bzw. hat das Programm einen Fehler? Leider konnte ich kein bestehendes 
Programm zu diesem Display finden, indem ich hätte nachgucken können, da 
die ganzen "neueren" VFDs alle I2C, RS232 oder SPI haben.

Vielen Dank für eure Hilfe!

Gruß, Daniel

von hp-freund (Gast)


Lesenswert?

Ich würde das so sehen:

0x01 -> Header
0x43 -> "C" Op Code für char write
0x00 -> Start Adr 0
0x01 -> Länge / ein Zeichen
0x53 -> "S" / Zeichen in RAM
0x41 -> "A" ausgeben

von c-hater (Gast)


Lesenswert?

daniel schrieb:

>   PORTD |= (1<<PD4);                          //RESET auf High
>   PORTD |= (1<<PD3);                          //WR AUF HIGH
>   _delay_ms(1);
>
>   PORTA = 0b00000001;                          //Header ausgeben

Du resettest das Display nicht explizit (möglicherweise aber per 
Pulldown, kann man mangels Schaltplan nicht entscheiden).

Für beide Fälle ist der Code aber Mist, denn du hast keinerlei Vorsorge 
dafür getroffen, das Reset-Timing einzuhalten. Vgl. DB, Abschnitt 11.2.

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.