Wie wäre es, wenn Sie für Ihren Mikrocontroller auf dem C-Control-PRO-Mega32-Experimentierboard für bestimmte Anwendungen zusätzliche Portleitungen zur Verfügung hätten? Dies ist möglich, wenn man z. B. einen oder zwei funktionsfähige Portbausteine 8255 in der Bastelkiste liegen hat, die ohnehin einer sinnvollen Verwendung zugeführt werden sollten.
Die C-Control Pro-Unit wird nach dem abgebildeten Plan mit
einem bzw. zwei der oben erwähnten Portbausteine verbunden. Dabei sind die
Datenleitungen, die Leitung /WR(Schreiben), /RD(Lesen) , A0(Adresse 0), A1
(Adresse 1) sowie Masse(GND) gemeinsam, während die Leitung /CS mit dem ersten
8255 direkt und mit dem zweiten über eine Inverterstufe verbunden ist. Dies ist
notwendig, da immer nur jeweils einer der Portbausteine vom Mikrocontroller
angesteuert werden kann. Beide 8255 haben eine eigene Spannungsversorgung.
Die Leuchtdioden einschließlich ihrer Vorwiderstände und die Pull-up-Widerstände an einem Teil der Portpins fehlen der Übersichtlichkeit wegen im oben abgebildeten Plan.
Da bis zu zwei Portbausteine an die C_Contro PRO-Unit
angeschlossen werden sollen, dient die /CS-Leitung als „dritte“ Adressleitung. Legt der
Mikrocontroller /CS 0 auf 0, ist Portbaustein 1 mit ihm verbunden, während bei
/CS = 1 der zweite 8255 von ihm angesteuert werden kann. Sein /CS-Eingang ist mit dem Mikrocontroller über einen
Inverter verbunden.
Aus den Datenblättern, die man im Internet herunterladen
kann, ist zu entnehmen, dass durch die
Programmierung des Steuerregisters festgelegt wird, welcher Port Ausgang,
welcher Eingang usw. sein soll. Dort kann man auch nachlesen, dass es je nach
Anwendung drei Betriebsarten für den Portbaustein gibt. Hier in diesem Projekt
wird für beide die Betriebsart 0 verwendet.
Die C-Control PRO-Unit kann für diese Anwendung z. B. in
Compact-C programmiert werden.
Dies sind Auszüge aus dem Programmlisting, das ich entworfen habe :
#define RD 16 // RD
(PortC.0), Portnummer bei Mega32
#define WR 17
#define A0 18
#define A1 19
#define CS
20
/ /Variablen
int Dat_ea;
int Dat_s;
int Dat_e;
int Dat_ad;
...
void
main(void)
{
// RD, WR,
A0, A1 und CS sind Ausgänge
Port_DataDir(1,255);
// Alle Pins von Port B auf Ausgang
Port_DataDirBit(RD,1);
// Port C.0 =1
Port_DataDirBit(WR,1);
Port_DataDirBit(A0,1);
Port_DataDirBit(A1,1);
Port_DataDirBit(CS,1);
// Anfangszustand
Port_WriteBit(R,1);
Port_WriteBit(WR,1);
Port_WriteBit(CS,1);
Port_WriteBit(A0,1);
Port_WriteBit(A1,1);
Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600);
{
//Endlosschleife
{
// Wird zuerst vom angeschlossenen PC eine 1 gesendet, soll
an einen Portbaustein //geschrieben werden.
if(Dat_ea==1)
{
Dat_aus();
}
// Wird eine 2 empfangen, soll von einem Portbaustein
gelesen werden.
{
Dat_ein();
}
}
}
}
…
// Datenausgabe an einem Portbaustein
// zuerst nach Ad_wahl verzweigen,
// um die Adresse festzulegen
// Adresse 0..3: Portbaustein 1, Adresse 4..7: Portbaustein 2
{
Dat_ad=Serial_Read(0);
Ad_wahl();
Dat_e=Serial_Read(0);
//Byte an Port B ausgeben.
Port_Write(1,Dat_e);
Port_WriteBit(WR,0);
AbsDelay(1);
Port_WriteBit(WR,1);
}
…
Unter Windows lässt sich die C-Control PRO-Unit mit den angeschlossenen Portbausteinen mit dem, wie ich finde, ausgezeichneten Terminal-Programm von Burkhard Kainka ansteuern, das von seinen Seiten heruntergeladen werden kann. Dort wird auch anschaulich erklärt, wie sich eine COM-Nummer bei Bedarf ändern lässt.
Werden nun nacheinander 1, 0 und dann 3 gesendet, werden an Port A desselben Portbausteins die Bits 0, 1 und 3 gesetzt. Die eingeschalteten roten Leuchtdioden im ersten Bild verdeutlichen dies. Um die Bits 0 und 1 von Port B zu setzen, sendet man 1, 1 und dann 3.
Aus den Bytes im abgebildeten Screenshot ist zu entnehmen, dass 1 , 7 und 155 gesendet wurde. Damit wurde für den zweiten Portbaustein festgelegt, dass seine drei Ports auf Eingang geschaltet worden sind. Liest man nun durch Senden von 2 und dann einer 4 bzw. 2 und darauf einer 6 die Ports A und C ein, sendet der Mikrocontroller in beiden Fällen 255 an den PC. Das ist richtig, da im Bild oben alle Portpins über Pull-up-Widerständen mit + 5V verbunden sind, und gerade keiner von ihnen gerade mit Masse verbunden ist.
Eine andere Möglichkeit der Steuerung unter Windows bietet das von mir entwickelte Programm in Visual Basic 5, von dem ein Screenshot abgebildet ist..
Nach der Wahl der COM-Schnittstelle wird durch Anklicken von
OptionButtons festgelegt, welche der Ports der Portbausteine 8255_1 bzw. 8255_2
auf Ausgang oder auf Eingang geschaltet werden soll. Dann wird das zugehörige
Steuerwort mit dem jeweiligen Button links an den Mikrocontroller gesendet, und
dieser überträgt es an das betreffende Steuerregister.
Die Buttons und Textfelder, die nicht benötigt werden, sind der Übersichtlichkeit ausgeblendet, wie dies durch den Screenshot veranschaulicht wird.
Nun kann man in die entsprechenden Textfelder Werte eintragen. Anschließend werden jeweils durch Drücken des zugeordneten Buttons die Bytes an Port A, hier z. B. 7, an Port B, hier 3, sowie an Port C0-3, hier z. B. 7, übertragen.
Von Port C4-7 wird 15 eingelesen, wenn gerade alle vier Portpins PortC.4.. PortC.7 z. B. über Pull-up-Widerstände an +5V angeschlossen sind.
Das Programm in Visual Basic 5 benötigt die Funktionsbibliothek RSCOM.DLL sowie die Datei RSCOM.BAS von Burkhard Kainka, die von seinen Seiten heruntergeladen werden können. Es gibt dort jeweils eine Suchmöglichkeit, mit der man die beiden Dateien leicht finden kann.
Das kleine Steckboard im Bild mit den Leuchtdioden(Low Current-LEDs mit Widerstandsnetzwerken, die 4k7-Widerstände enthalten) war in der Entwicklungsphase der Programme für den Mikrocontroller und auch für dasjenige in Visual Basic 5 recht nützlich.
Programmlisting für Mikrocontroller auf der Platine des Franzis Lernpakets Mikrocontrollertechnik mit C-Control Pro sowie die Dateien zum Windows-Programm in Visual Basic 5 hier herunterladen.