www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ks0108 library funktionen und der stm32


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

Bewertung
0 lesenswert
nicht lesenswert
ich habe folgende zur biliothek "Universal KS0108 driver library STM32 
MCU low-level driver" von (c) Rados³aw Kwiecieñ, radek@dxp.pl.

in dieser bibliothek wird der port GPIOE als gesamtes verwendet(d.h. 
alle display pins liegen auf diesem port) bei meinem eval board sind 
aber leider nicht alle pins ausgeführt somit habe pins von verschiedenen 
ports(von A bis F) in verwendung.

das ist auch kein problem bei RS, RW, EN, CS1/2, RST nur bei den 
datenports D0-D7 fehlt es mir am wissen um den quelltext richtig zu 
lesen/umzuschreiben.

in der KS0108-STM32.c steht #define KS0108_D0   0  und für den 
KS0108_Port wird GPIOE angegeben.

in den c files tauchen immer wieder (shift)ausdrücke wie z.B. 
GPIO_InitStructure.GPIO_Pin = 0xFF << KS0108_D0;
oder
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin  = (0xFF << KS0108_D0);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(KS0108_PORT, &GPIO_InitStructure);
auf

meine frage was bewirkt ein GPIO_InitStructure.GPIO_Pin  = 0b11111110
bzw. wie könnte ich z.B.: GPIO_Init(KS0108_PORT, &GPIO_InitStructure); 
geschickt umschreiben ?

im anhang findet ihr die besagte bibliothek


Danke

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du kannst mit der folgenden Struktur die Portpins Konfigurieren:

z.B.
GPIO_InitTypeDef  GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode     = GPIO_Mode_Out_PP; // Ausgang PushPull
GPIO_InitStructure.GPIO_Pin      = 0xFF << 7;        //PE7..14
PIO_InitStructure.GPIO_Speed     = GPIO_Speed_2MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);

Du kannst auch GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7 | GPIO_Pin_8 | 
...
schreiben, damit Kannst Du die Portpins einzeln verodern. Ist 
übersichtlicher.

Zum Einlesen der Pins musst Du auf "GPIO_Mode_IN_FLOATING" schalten.

Gruß
Florian

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

danke für deine antwort deine erklärung leuchtet mir ja ein, aber wieso 
wird bei der von mir genannten
GPIO_InitStructure.GPIO_Pin  = (0xFF << KS0108_D0); ein 0er hinein 
geschoben wozu ist das gut, da initialisiere ich ja gar keinen pin oder 
?


danke !

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

so wie ich das verstehe steht in dem #define "KS0108_D0" eine 
Bitkombination, die die Pins auf dem ges. Port initialisiert.

Wenn Du "GPIO_InitStructure.GPIO_Pin = 0" angibst wird keine Portpin 
initialisiert.

Ich gehe mal davon aus, das Du das #define selber festlegen musst, je 
nachdem an welchen zusammenhängenden Portpins dein LCD hängt.


z.B. LCD an PORTx 7..14
GPIO_InitStructure.GPIO_Pin = 0xFF << 7; //P7..P14

Gruß
Florian

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

"Ich gehe mal davon aus, das Du das #define selber festlegen musst, je
nachdem an welchen zusammenhängenden Portpins dein LCD hängt."

....weißt du was ich daran komisch finde, dass in keiner funktion ein 
anderer pin auftaucht als der 0er(#define KS0108_D0   0) also auch wenn 
ich die restl. pins per #define setzen würde greift keine der funktionen 
darauf zu.
heißt das, das programm "arbeitet" nur mit dem pin D0 des displays ????
...kann ich mir nicht vorstellen.

deswegen meinte ich ja dass es mir an verständnis fehlt

danke

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Display arbeitet mit den 8 Datenleitungen D0 bis D7. So wie ich das 
sehe hängen die Datenleitungen des Displays am PORTE von Bit 0 bis Bit 
7. Die Portpins 0..7 werden gleichzeitig auf lesen geschaltet und dann 
parallel eingelesen. Beim schreiben werden sie parallel beschrieben.

Der Funktion "void GLCD_WriteData(unsigned char dataToWrite)
" werden 8 Bits als char übergeben und dann mit 
"GPIO_SetBits(KS0108_PORT, (dataToWrite << KS0108_D0));
" auf PORTE ausgegeben. Sie werden dazu um 0 Stellen geshiftet. Wenn Du 
die Datenleitungen an einem anderen Port hast musst Du ev. shiften. Das 
sieht hier nur komisch aus, weil Du die 8 Bits um 0 shiftest. Soll eben 
allgemein gültig sein.

Gruß
Florian

Autor: stm32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
servus florian,

.......so wies aussieht ist gegen dummheit kein kraut gewachsen
diesmal tut mein code ausnahmsweise das was er soll(hab ich mit 
breakpoints und Vmeter überprüft)

das problem ist folgendes: mein eval board von iar wird zwar über ein 5V 
netzteil versorgt. nur die GPIOS geben halt nur knappe 3.3V aus und im 
"0815" datenblatt dieser KS0108 displays steht drinnen:

Supply voltage for Logic 4.5V - 5.5V;
(min)Input voltage 'H' level 0.7*VDD

......in meinem fall ist VDD knappe 6V(unstab. netzteil) 
0.7*6V = 4.2V und das liegt halt doch fast 1V über den 3.3V der GPIO's

............aber wer denkt schon an solche kleinigkeiten ;+)
zumind. weis ich jetzt was es mit den shifts auf sich hat !!

Danke nochmal für deine tips
mfg

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.