Dsm0822a von Pollin an AVR unter Bascom

C

Carsten Tröller

Guest
Hallo Group :eek:)
Ich habe mir oben besagtes LCD Display zugelegt und würde es gerne mit
einem AVR 3213 zum laufen bringen.Jedoch scheitere ich irgendwo und
weiß nicht wo.Vielleicht hat ja schon jemand mit diesem LCD gearbeitet
und sieht anhand des Quellcodes wo der Bock sitzt.
Wäre für jede Hilfe dankbar.Programmiersprache Bascom.
Code:

$regfile = "2313def.dat"
'AT90S2313
$crystal = 4000000
Ddrd = &B0011000
Const Dsm0822a_lcd = &H70 'Defines the
address of the DSM-0822A


Const Pcf8574_write = &H40
Const Pcf8574_read = &H41
Config I2cdelay = 10
Config Scl = Portb.3 'Configure i2c
SCL
Config Sda = Portb.2
I2cinit
Dim A As Integer
Dim I As Integer

I2cstop

Do
Portd.4 = 1 'Rote LED
(Pin PD3) an
Portd.3 = 0
Waitms 500

For I = 0 To 255
I2cstart 'generate
start
I2cwbyte Pcf8574_write 'send slave
address
I2cwbyte I 'send a value
I2cstop
Waitms 100 'generate stop
Next

I2cstart
I2cwbyte Dsm0822a_lcd 'send slave
address // Display anprechen
I2cwbyte 128 + 64 + 32 + 0 '1110_0000 224
DEVICE SELECT Subdevice 0 select
I2cwbyte 128 + 64 + 8 '1100_1000 200
MODE SET Display an, LCD BIAS 1/3 MUX 1:4
I2cwbyte 0 '0000_0000 0
LOAD DATA POINTER auf 0
For A = 1 To 16
I2cwbyte 255
Waitms 100
Next
I2cstop

Portd.4 = 0
Portd.3 = 1 'Rote LED aus
Waitms 500
Loop
End


Vielen Dank
Troelli
 
"Carsten Tröller" <bcr-carsten_troeller@t-online.de> wrote in
news:cdlkrk$ni2$07$1@news.t-online.com:

Vielleicht hat ja schon jemand mit diesem LCD gearbeitet
Ja habe ich. Allerdings verwende ich C.
Diese Seite hat mir sehr geholfen:
http://home.wtal.de/Mischka/DSM-0822A.html

Vielleicht kannst du ja so deinen Fehler finden.


Paul
 
Paul Baumer wrote:
http://home.wtal.de/Mischka/DSM-0822A.html
Ich hätte auch noch ein paar Beispielprogramme für QuickBasic
anzubieten, vielleicht sind die für den OP leichter zu verstehen:
http://home.pages.at/arnerossius/bastel/dsm0822a.htm (vorsicht,
langsamer Server!).


Gruß,
Arne
 
Hey Arne ... :eek:)
Das nenne ich Zufall.Dein Proggi diente mir als Hauptmuster weil in
Basic.Ich habe mir das Beispiel gegriffen, wo alle Segmente mit einem Schlag
angezeigt werden.
Deswegen finde ich es echt merkwürdig das mein Proggi nicht läuft.Was ist
also anders ? Ich versuche mal meine Vorgehensweise aufzuzeigen damit Du das
mit dem synconisieren kannst , was Du weißt.
I2cstop
'Grundstellung
I2cstart '
I2c Startkondition
I2cwbyte Dsm0822a_lcd 'send slave
address // Display anprechen Festferdrahtet hex 70 oder dez 112
I2cwbyte 128 + 64 + 32 + 0 '1110_0000
dez224 DEVICE SELECT Subdevice 0 select
I2cwbyte 128 + 64 + 8 '1100_1000
dez200 MODE SET ,Display an, LCD BIAS 1/3 MUX 1:4
I2cwbyte 0
'0000_0000 0 LOAD DATA POINTER auf 0
For A = 1 To 16
'Schleife um jedes Segment zum leuchten zu bringen
I2cwbyte 255
Waitms 100
Next
I2cstop

Das sieht doch genauso aus wie Deins, zumindestens ist doch das Verfahren
gleich, oder? Würde ich eine 0 in die Schleife schicken hätte ich doch ein
Display clear.Aber das habe ich auch ohne code ... :eek:( ... das display
leuchtet nicht mal aus Gnade.Jetzt könnte man hingehen und sagen, der I2C
Bus lahmt, aber is nich.Am gleichen Bus läuft auch ein I/O Expander ohne
Probleme.Spannung (am Displayanschluss) ist auch da (5V).Ich kann Dir doch
wohl vertrauen, das jenes Display das auch vertragen kann ...
Ich habe auch schon mehrere probiert aber kein Display zeigt was an. Ne Idee
?
Mfg
Troelli


PS: Du solltest das Adressbyte nicht Auswahlbyte nennen das verwirrt.
 
Hey Paul
habe mir die Seite angesehen und jenes gefunden.

char i;
bstart();
schreib(112); // feste adresse
schreib(0b.1110.0000); // Device select
schreib(0b.1100.1000); // Mode set(enabled)
for (i=0;i<19;i++) schreib(0); //LCD Löschen
bstop();

genau ... das ist deine Initialisierungsroutine.Und das ist meine.

I2cstart
I2cwbyte Dsm0822a_lcd 'send slave
address // Display anprechen
I2cwbyte 128 + 64 + 32 + 0 '1110_0000 224
DEVICE SELECT Subdevice 0 select
I2cwbyte 128 + 64 + 8 '1100_1000
200 MODE SET Display an, LCD BIAS 1/3 MUX 1:4
I2cwbyte 0
'0000_0000 0 LOAD DATA POINTER auf 0
For A = 1 To 16
I2cwbyte 255
Waitms 100
Next
I2cstop

Bis auf die For next Schleife macht es doch das gleiche,oder? Das Problem
ist, das ich C nicht beherrsche und nicht wirklich weiß was abgeht in deiner
Initialisierungsroutine.Was passiert in Deiner for next Schleife ? Was heißt
in C i++ ?

Mfg
Troelli








"Paul Baumer" <baumer@unicum.de> schrieb im Newsbeitrag
news:Xns952DBCE14219Ebaumerunicumde@62.153.159.134...
"Carsten Tröller" <bcr-carsten_troeller@t-online.de> wrote in
news:cdlkrk$ni2$07$1@news.t-online.com:

Vielleicht hat ja schon jemand mit diesem LCD gearbeitet

Ja habe ich. Allerdings verwende ich C.
Diese Seite hat mir sehr geholfen:
http://home.wtal.de/Mischka/DSM-0822A.html

Vielleicht kannst du ja so deinen Fehler finden.


Paul
 
"Carsten Tröller" <bcr-carsten_troeller@t-online.de> wrote in
news:cdnncf$dm2$01$1@news.t-online.com:


Moin,

for (i=0;i<19;i++) schreib(0); //LCD Löschen

Bis auf die For next Schleife macht es doch das gleiche,oder? Das
Problem ist, das ich C nicht beherrsche und nicht wirklich weiß was
abgeht in deiner Initialisierungsroutine.Was passiert in Deiner for

Also die for Schleife kann man auch weglassen.
Die ist nur dazu da um das Display zu leeren, falls beim Start
irgendetwas drauf sein sollte.


next Schleife ? Was heißt in C i++ ?
Das i++ heisst i=i+1. i wird also um 1 erhöht.

Ich hab deinen Code mal überflogen und finde den eigentlich ganz in
Ordnung so (bin allerdings nicht wirklich ein Basic Crack...).


Paul
 

Welcome to EDABoard.com

Sponsor

Back
Top