Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitweise und und oder
Hi,
könnte mir bitte einer sagen was dort gemacht wird?
#define SED1335_A0 (1 << PD4)
#define SED1335_WR (1 << PD5)
#define SED1335_RD (1 << PD6)
#define SED1335_CS (1 << PD3)
#define SED1335_RES (1 << PD2)
SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
asm("nop");
asm("nop");
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
Danke.
SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
hier werden SED1335_CS, SED1335_A0, SED1335_WR auf Low gesetzt, d.h. 0
und bei
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
werden sie wieder auf High also 1 gesetzt
in Bits
XXXXXXXX & 11000111 = XX000XXX
...
XX000XXX | 00111000 = XX111XXX
sast
Hi,
eigentlich fehlt da noch was:
Erst wird das WriteCommand angesprochen, danach das WriteData.
Stimmt dann das von vorher noch?
Danke.
#define SED1335_DATA_PORT PORTA
#define SED1335_DATA_DIR DDRA
#define SED1335_DATA_PIN PINA
#define SED1335_CONTROL_PORT PORTD
#define SED1335_CONTROL_DIR DDRD
#define SED1335_CONTROL_PIN PIND
#define SED1335_A0 (1 << PD4)
#define SED1335_WR (1 << PD5)
#define SED1335_RD (1 << PD6)
#define SED1335_CS (1 << PD3)
#define SED1335_RES (1 << PD2)
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_InitializePorts(void)
{
SED1335_DATA_DIR = 0xFF;
SED1335_CONTROL_PORT |= (SED1335_A0 | SED1335_WR | SED1335_RD | SED1335_CS | SED1335_RES);
SED1335_CONTROL_DIR |= (SED1335_A0 | SED1335_WR | SED1335_RD | SED1335_CS | SED1335_RES);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteData(unsigned char dataToWrite)
{
SED1335_DATA_PORT = dataToWrite;
SED1335_DATA_DIR = 0xFF;
SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
asm("nop");
asm("nop");
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
void GLCD_WriteCommand(unsigned char commandToWrite)
{
SED1335_DATA_PORT = commandToWrite;
SED1335_DATA_DIR = 0xFF;
SED1335_CONTROL_PORT &= ~(SED1335_CS |SED1335_WR);
asm("nop");
asm("nop");
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_WR);
}
//-------------------------------------------------------------------------------------------------
Das Wissen, das ich versucht habe zu vermitteln, darfst du gern auch auf die anderen Programmzeilen sinngemäß anwenden.
Zum Verständnis der Ansteuerung des GLCD wirst du die beste Hilfe sicher im dazugehörigen Datenblatt finden.
Die Bezeichner wie zB _CS, _RD, _WR usw sind doch recht aussagekräftig. Finde ich zumindestens.
sast
Hi,
ja das ist mir klar.
Ich habe meinen Bascom Code schon Teils in Assembler umgebaut.
Als Refenz habe ich nur den C Code und ich bin mir nicht sicher was da gemacht wird, da ich mich mit C nicht auskenne. Habe auch schon einiges durchsucht im Netzt, aber nicht ganz das Richtige gefunden.
Nach meinem Wissen sollte bei WriteData
SED1335_CS =0
SED1335_A0 = 0
SED1335_WR = 0
sein
und dann nach den NOP
SED1335_WR = 1
SED1335_A0 = 0
SED1335_CS = 0 (kann auch 1 sein - egal)
bei WriteCommand
SED1335_CS =0 (wenn vorher 1 war)
SED1335_A0 = 1
SED1335_WR = 0
sein
und dann nach den NOP
SED1335_WR = 1
SED1335_A0 = 0
SED1335_CS = 0 (kann auch 1 sein - egal)
Das funktioniert so, aber es ist anscheinend hier anders.
Also:
SED1335_WR muss 0 werden, dann werden die Daten(Data) in das Display geschrieben.
Wenn SED1335_A0 1 wird, dann wird das Command geschrieben wenn SED1335_WR = 0 wird.
So jetzt hast du es geschafft, dass ich mir doch mal die Infos zum 1335 etwas genauer ansehe. Command- und Datawrite unterscheiden sich nur im A0 Bit. Dh ist A0 High dann ist es ein Kommando ansonsten ein Datum.
Es ist nicht egal ob CS nun 1 oder 0 ist.
Nach dem Schreiben eines Datums ist es dafür aber erst einmal egal ob nun A0 auf 1 oder 0 steht. Das interessiert erst wieder bei der nächsten Aktion. Ist das ein Kommando dann kann das A0 auf 1 bleiben und wird somit gar nicht angefasst. Ist es ein Datawrite dann wird A0 auf 0 gesetzt. Nachdem Schreiben wird das A0 wieder auf 1 gesetzt und muss somit beim nächsten Kommando nicht erst gesetzt werden. Ob man das nun so macht oder andersherum ist vermutlich Geschmackssache.
Auf jeden Fall bleibt die Abarbeitung in Bezug auf CS und WR immer gleich. Nur A0 muss halt bei einem Kommando auf High sein und bei Daten auf Low.
sast
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.