Forum: Mikrocontroller und Digitale Elektronik GLCD Ansteuerung in C


von Trexis5 (Gast)


Lesenswert?

Hi,

kann mir bitte einer sagen was in der letzten #define Zeile gemacht 
wird?

#define   SED1335_M0         0
#define   SED1335_M1         0
#define   SED1335_M2         0
#define   SED1335_WS         0
#define   SED1335_IV         1

#define   SED1335_SYS_P1       0x10 | (SED1335_IV << 5) | (SED1335_WS << 
3) | (SED1335_M2 << 2) | (SED1335_M1 << 1) | SED1335_M0

Zusammengezählt oder?
Danke.

von asdf (Gast)


Lesenswert?

kurz gesagt - schei.e
0x10 | (1 << 5) = 0x30

die restlichen schiebeoperationen und "oder" sind absolut witzlos, da 
die (0 << x) immer 0 ist...

von Ralf (Gast)


Lesenswert?

> Zusammengezählt oder?
Nö, da wird ein Kommando draus gebildet.

0x10 ist das Grundmuster für das Kommando, die restlichen Bits sind 
entsprechende Flags.

Das obige Beispiel ergibt 0x30.

Ralf

von Trexis5 (Gast)


Lesenswert?

Hi,

super das brauche ich.
Also 30 Hex.
Das dachte ich mir.
#define   SED1335_FX         7
#define   SED1335_FY         7
#define   SED1335_WF         1

#define   SED1335_SYS_P2       0x00 | (SED1335_WF << 7) | SED1335_FX

Das ergibt dann 87 oder?

Wie habt ihr das ausgerechnet?

von Karl H. (kbuchegg)


Lesenswert?

Trexis5 schrieb:
> Hi,
>
> super das brauche ich.
> Also 30 Hex.
> Das dachte ich mir.
> #define   SED1335_FX         7
> #define   SED1335_FY         7
> #define   SED1335_WF         1
>
> #define   SED1335_SYS_P2       0x00 | (SED1335_WF << 7) | SED1335_FX
>
> Das ergibt dann 87 oder?
>
> Wie habt ihr das ausgerechnet?

Der Reihe nach durchgehen

Da ist erst einmal  0x00   oder in Bitschreibweise    00000000
Dann   SED1335_WF << 7
SED1335_WF ist laut define gleich 1
also  1<<7
also  eine 1 7 mal nach links geschoben

aus 00000001  wird daher 1000000

       00000000       (das bisherige Zwischenergebnis aus 0x00)
 ODER  10000000       ( von SED1335_WF << 7 )
  ---------------
       10000000

dann der nächste Term  SED1335_FX, das ist laut define 7 oder in 
Bitschreibweise 00000111

       10000000      (das bisherige Zwischenergebnis)
 ODER  00000111      (von SED1335_FX)
  ----------------
       10000111

und das ist wiederrum in Hex-Schreibweise  0x87


Einfach durchrechnen. Jeden Einzelterm ansehen, was macht das in 
Bitschreibweise und die einzelnen Bits miteinander verodern.

von Trexis5 (Gast)


Lesenswert?

Hi,

super danke.
Jetzt habe ich es kapiert.
Dann lag ich ja mit 87hex richtig.

von Trexis5 (Gast)


Lesenswert?

Hi,

ich habe noch was.
Was bedeutet das?
x ist ein Wert von 0-240



#define   SED1335_FX  7


if(color)
  tmp |= (1 << (SED1335_FX - (x % 8)));
else
  tmp &= ~(1 << (SED1335_FX - (x % 8)));


tmp ist dann das ergebnis

Danke

von Oliver (Gast)


Lesenswert?

Vielleicht wäre jetzt doch der Zeitpunkt gekommen, sich mal ein C-Buch, 
oder zumindest ein C-Online-Tutorial zuzulegen. Ganz ohne grundlegende 
Kenntnisse wird das nichts.

|= bedeutet: die linke Seite wird mit der rechten binär ver-odert.
&= bedeutet : die linke Seite wird mit der rechten binär ver-undet.

<< ist binäres schiften nach links

- ist minus

% ist modulo

() sind Klammern.

if und else sind C-Schlüsselworte, die bedeuten "if" und "else".

Den Rest bekommst du selber hin.

Oliver

von Trexis5 (Gast)


Lesenswert?

Hi,

danke.
Das wars schon.
Ich habe schon ein Display aufen mit Bascom Code.
Nun wollte ich nur einige Dinge aus dem C-Code in Bascom umstricken.
Das erste waren die Parameter, ich übergebe diese als Gesamter wert und 
im dem C-Code werden die zusammengestrickt und dann gesendet.
Das stimmt nun auch bei mir.
Der letzte Code ist für die 4 Farben. Das habe ich noch garnicht 
umgesetzt.
Hätte mich nur interessiert was da rauskommt.

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.