ANAG VISION 0820

- OCinside.de PC Forum
https://www.ocinside.de

-- Elektronik
https://www.forum-inside.de/forums.cgi?forum=16

--- ANAG VISION 0820
https://www.forum-inside.de/topic.cgi?forum=16&topic=1864

Ein Ausdruck des Beitrags mit 10 Antworten ergibt bei 3 Antworten pro Seite ca. 4 DIN A4 Seiten. Das entspricht bei 80 g/m² ca. 19.96 Gramm Papier.


-- Veröffentlicht durch MinniMan am 8:37 am 7. März 2006

Hallo
bin hier gerade in der Arbeit und versuche auch schon seit ein paar Tagen ein Anag Vision AV2020 Display anzusteuern. bzw. zuersteinmal initialisieren damit es 2 Zeilen bekommt. Aber ich weiß einfach nicht weiter.

Habe mit ein paar Beispielprogrammen (welche allerdings auch nicht funktionieren) und dem Datenblatt mein eigenes Programm zusammengebastelt.

Code
#include <dos.h>
#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include "TCPIPAPI.H"//für Warteschleidr API_SLEEP

static union REGS rein;//für Softwareinterrupts werden Datensätze benötigt,
static union REGS raus;//die später die Register des Prozessors beeinflussen
                             //die beiden Datensätze rein und raus werden
                             //hier definiert

#define TCPIPVECT0xAC //definiert einen Softwareinterrupt
#define Ausgang0x600//0X600 ist die Hardwareadresse der Ausgabekanäle

void warte(int ms);//kündigt ein Unterprogramm "Warteschleife" an


int main()


{
// Damit man folgendes Programm nachvollziehen kann, muss man die Wertigkeit
// der einzelen Bits am LCD-Display kennen. Das LCD-Display soll im Beispiel im
// 4-Bit-Daten-Modus betrieben werden.
// Die Bedeutung der einzelnen Bits im Betriebsartenmodus können in der Unterlage
// "Hardwarenahme Schnittstellenprogrammierung" (s.Seiten 25-27) nachgelesen werden

 //Ausgänge initialisieren   // Damit wird über den PCS6(Programable Chip Select)
rein.h.ah=0x83;              // der "Ein- Ausgabe-Baustein" freischaltet
rein.x.dx=0x40;              //
int86(0xA2,&rein,&raus);

warte(15);
// outportb(0x600, 0x31);
// warte(5);
outportb(0x600, 0x3);

// warte(5);
// outportb(0x600, 0x31);
warte(5);
outportb(0x600, 0x3);

// warte(5);
// outportb(0x600, 0x31);
warte(5);
outportb(0x600, 0x3);

warte(5);
outportb(0x600, 0x21);
warte(5);
outportb(0x600, 0x20);

warte(5);
outportb(0x600, 0x21);
warte(5);
outportb(0x600, 0x20);

warte(5);
outportb(0x600, 0x81);
warte(5);
outportb(0x600, 0x80);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);

warte(5);
outportb(0x600, 0xC1);
warte(5);
outportb(0x600, 0xC0);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);

warte(5);
outportb(0x600, 0x11);
warte(5);
outportb(0x600, 0x10);

warte(5);
outportb(0x600, 0x01);
warte(5);
outportb(0x600, 0x00);
warte(5);
outportb(0x600, 0x41);
warte(5);
outportb(0x600, 0x40);
warte(5);


outportb(0x600, 0x45);
warte(5);
outportb(0x600, 0x44);
warte(5);
outportb(0x600, 0x15);
warte(5);
outportb(0x600, 0x14);

return 0;
}



//Unterprogramm(e)

//Programm für Wartezeit

void warte(int ms)            //Warteschleifenprogramm ist ein Softwareinterrupt
//und wird hier eigentlich nur initialisiert
{
rein.h.ah = API_SLEEP;
rein.x.bx = ms;//Zeitangabe in ms
int86(TCPIPVECT,&rein,&raus);
}


ist sehr viel falsch oder warum geht nichts?


-- Veröffentlicht durch spacebull am 12:44 am 25. Feb. 2005

Moin, ja gerne geschehen.
Ich bin auch gerade dabei, für mein Display ne neue Routine zu schreiben. Hab es jetzt nämlich mit an den Speicherbus gehängt, kann es also mit MOVX adressieren. Da kam ich auch dank eines Artikels in der Elektor drauf. So spart man gut ein paar Ports, wenn man eh ein externes RAM hat.
Wie gesagt, die Displays gibts an sich überall mal im restposten (www.pollin.de,  http://www.neuhold-elektronik.at/catshop/)
Jetzt in den Sem-Ferien will ich mal ein altes Grafikdisplay mit Touchsreen ansteuner, was ich aus nem Kopierer ausgebaut hab. Das wird auch noch spassig glaub ich :-)

So long und MfG


-- Veröffentlicht durch LPTKing am 9:24 am 25. Feb. 2005

Danke für das Datenblatt....:thumb:

Ich denke mal, daß Du kein Problem mit der Beschaffung eines LCD
Displays hast, liegt daran, daß Du - im Gegensatz zu mir- das Schnittsstellenkonzept schon verinnerlicht hast... bis vor Gestern
war das noch ziemlich mystisch für mich, nun wo ich ENDLICH rausgefunden hab (2 Drecks Tage!) wie das funzt, hab ich richtig
Vertrauen in das kleine Drecksteil... macht richtig Spaß mittels LPT Port..
Jetz geh ich mal davon aus, daß es mir wenn ichs mitm Atmel verheirate noch mehr Spaß macht...

Jedenfalls merce Jungs!

wie schließt man eigentlich ein Thema wieder ab?? Für mich ist das nun gegessen. Allerdings sollte man vielleicht mal den Fehler im C
Datenblatt posten, samt dem Umstand, daß der Offset nahe 0V einzustellen ist, da man sonst herzlich wenig sieht...;)

Mfg
Tyson


-- Veröffentlicht durch spacebull am 21:55 am 24. Feb. 2005

Moin, hier im Sheet auf Seite 24 stehen die. Ist immer einen Blick wert, wenns ums Timing geht.
Aber ich denk mal, das Sheet kennst du. Ansonsten ist diese Sequenz mal in der Elektor gewesen. Daher hab ich die übernommen.
Was meinst du mit Händlern von LCDs? Gibts die nicht überall? Ich hab zwar noch nie eins gekauft, aber sehe sie ständig irgendwo. Oder willst du was ganz spezielles (Bis auf den I2C-Bus ;-))

MfG


-- Veröffentlicht durch LPTKing am 14:25 am 24. Feb. 2005

Hallo Jungs, neues von der Front:

habe gerade - unabhängig von Spacebull- das LCD Display zum weiteren Zuckeln gebracht.

Grund für den Umstand: Im CONRAD Datenblatt steht sch****e!

Mein Verdacht mit dem Display Byte war richtig! Jetz wo ich dank
Kontrast Einstellung mal was sehe, gibts nen Unterschied!  

Nun blinkt das LCD Display!

Trotzdem Danke Spacebull! Aber wenn wir schon dabei sind, woher hast Du Deine Initialisierungsroutine? Wo kriegt man ordentliche Datenblätter her? Gibts ausser Anag Vision noch anständige Hersteller? Eventuell welche die auch noch Bürklin führt?!

Danke Jungs!  


-- Veröffentlicht durch spacebull am 14:14 am 24. Feb. 2005

Moin, auch wenn's schon lebt: Hier mal meine "Standart initialisierung::
0011 1000 = 0x38 für Init und 8 Bit
0000 1100 = 0x0C für Display On, kein Courser
0000 0001 = 0x01 für Display löschen

Warum du so eine lange Initsequenz hast is mir nicht so ganz klar, aber wenns läuft is ja gut.

MfG


-- Veröffentlicht durch LPTKing am 13:48 am 24. Feb. 2005

Das Display lebt!!!! Sieeg! ... :godlike: ... naja, nicht zu früh freuen,
hab grad festgestellt, wieso das Display keinen funz macht... hab das
Poti für den Kontrast auf 50% gestellt (nach guter Elektronik Sitte) aber das war wohl zu wenig! Nun hab ichs höher gestellt, (ca 90%, ),
nun seh ich zumindest die einzelnen Buchstabenfelder wenn ichs einschalte, wenn ichs dann von meinem Programm initialisieren lasse,
dann dann rührt sich schon mal was... immerhin....

Mal sehen, ob ich dem Drecksteil nicht doch noch ein paar Worte entlocken kann... Für die Zukunft mal ne andere Frage, gibt es keine
vergleichbaren Module mit I2C Schnittstelle (sorry daß ich das bereits neu gepostet hab, nur der jetzige Startpunkt lies sich nicht umändern...)

Gruß
Tyson


-- Veröffentlicht durch LPTKing am 13:38 am 24. Feb. 2005

Ich denke Verkabelungsfehler ausschließen zu können, nobody is perfect - ok, aber :

Habe da einen alten 486er mit nem Dos neben meinem Laptop stehen (wichtig da damit sichergestellt sein sollte das da nicht Multitasking in die Suppe spucken kann). Auf der alten Kiste hab ich ein schon oftmals
eingesetztes Parallelporttestprogramm drauf. Von da aus kann ich jedes Bit am Parallelport einlesen und setzen... Damit und einem Multimeter kann ich verifizieren, daß wenn ich z.B. D0 (PC Seite) setze,
auch Pin 7 Am Modul den Zustand ändert... damit habe ich alle Pins verifiziert, weshalb ich einen Verdrahtungsfehler meinerseits
ausschließen will.


Das Programm sieht in den prozeduralen Aufrufen folgendermaßen aus:
{Start der Initialisierung für 8Bit Interface}
Kommando($30);
Enabledata ;
delay(5);
Kommando($30);
Enabledata;
delay(1);
Kommando($30);
Enabledata;
{Display 8bit Konfiguration abgeschlossen}
Kommando($38);
Enabledata;
Kommando($3d);
Enabledata;
Kommando($01);
Enabledata;
Kommando($07);
Enabledata;
Zeichen($12);
Enabledata;


Hierin wird in Kommando das RS Bit auf Null gezogen und dann die als Argument übergebene hex Zahl auf den Port gegeben. Zeichen ist im Prinzip das gleiche wie Kommando nur daß hier eben RS high gemacht wird.
Enabledata generiert schließlich ein toggeln des Enable Bits (HLH), mit jeweils einer Milisekunde zwischen den Übergängen. Das heißt, das
Display sieht sowohl einen HL als auch einen LH Übergang mit gültigen Daten.


Ok... Ich werd nun meine LED Box anschließen, und mir wirklich zusätzlich nochmal jedes Byte ansehen.
Ist es wirklich normal, daß ich nichtmal ein blinzeln der Anzeige sehe,
wenn ich Sie ein/Ausschalte? denn egal was ich bisher gemacht habe,
ich sehe da gar nichts.... die Anzeige is total tot...

ich teste weiter...


-- Veröffentlicht durch ocinside am 13:08 am 24. Feb. 2005

Erstmal herzlich willkommen in unserer Community :thumb: :)
Aber warum machst du dir das Leben so schwer und probierst zum ersten Test am PC mal eine fertig geschriebene Software ? ;)
Sonst hast du ja noch eine weitere Fehlerquelle und weißt nicht, ob dein Display defekt ist, oder ob du einfach nur bei der Programmierung einen kleinen Fehler eingebaut hast.

Sicherlich können wir uns da auch nochmal etwas vertiefen, da ich mich damit auch recht viel auseinandergesetzt habe, aber ohne 100%iges Wissen, ob das Display und die Verkabelung stimmt, würde ich dort nicht weiterproggen ;)


-- Veröffentlicht durch LPTKing am 10:13 am 24. Feb. 2005

Hallo,

will ein LCD Display von einem AVR Microcontroller ansteuern. Ehe ich
das machen wollte, wollte ich das Ding auch mal vom PC aus via LPT-
Port ansteuern.  Da ich da bereits I2C und SPI emuliert hab, dachte ich das kann ja nicht so schwer sein, ein paar Bytes rüber zu schieben...

Jedenfalls, nachdem ich die Initialisierungsroutine durchfahren habe,
genau so wie es in diesem windigen Conrad Datenblatt beschrieben ist, sieht man gar nichts auf dem Display.

Hier die gesendeten Initialisierungsbytes (RS jeweils 0 RW jeweils 0)
(D7....D0)
1.: 00110000 Funktionset
2.: 00110000 Funktionset
3.: 00110000 Funktionset
4.: 00111000 Funktionset
5.: 00111100 Display on
6.: 00000001 Display clear
7.: 00000110 Entry mode set

Der 5te Befehl wundert mich. Da hier im Datenblatt im HD44780 Befehlssatz ein anderes Kommando für Display On/off steht... Aber
diese Bytefolge steht für die Initialisierung im Conrad Datenblatt,
und mit dem anderen Byte geschieht auch nichts anderes....

Timing wurde wohlwollend berücksichtigt, sprich wenn es heißt länger
als 4.1 ms warten, habe ich ein Delay von 5ms ins Programm eingebaut.  Zu guter letzt habe ich die Byterate so weit runter gedreht, daß man es mit dem Auge verifizieren kann, was da am Modul anliegt... ohne Erfolg...

Meine Vermutung: entweder stimmt was mit dem Timing nicht, oder das Ding ist schon immer kaputt gewesen...

Aja: Das Enablepin wird von mir immer von High nach Null und nach 1ms wieder nach High gelegt, um dem Modul die gültigkeit der Daten zu signalisieren...

Kann sich jemand vorstellen warum es nicht funzt?

Werd mir jetz erst mal ein zweites Modul kaufen, und dann mal den
4Bit Modus probieren... abschließend laß ich dann noch den AVR drauf los, vielleicht kriegt der es ja hin...

Gruß LPTKing  

(Geändert von LPTKing um 10:15 am Feb. 24, 2005)


OCinside.de PC Forum
© 2001 - 2024 www.ocinside.de