Ich versuche, ein Arduino Mega mit einem Intel 8255 zu verbinden, und es scheint nicht zu funktionieren, hier ist mein Setup:
Ich verwende als LS245 IC, um 4 LEDs anzuschließen. Die Pins CS, RESET sind mit GND verbunden. Ich versuche, Port B zu verwenden, um Daten zum Ein- und Ausschalten einzelner LEDs zu senden. Mein Code setzt das Steuerregister nur in den E / A-Modus, und Port B wird als AUSGANG festgelegt. Irgendwelche Hinweise, was falsch sein kann?
Mein Code:
#define CS 22
#define RD 23
#define WR 24
#define A_1 27
#define A_0 26
#define RESET 8
char buffer[8] = {0, 0, 0, 0, 0, 0, 0, 1} ;
void setup()
{
pinMode(CS, OUTPUT) ;
pinMode(A_0, OUTPUT) ;
pinMode(A_1, OUTPUT) ;
pinMode(WR, OUTPUT) ;
pinMode(RD, OUTPUT) ;
int i=0, p=0 ;
for (i=32; i <=39; i++)
{
pinMode(i, OUTPUT) ;
}
digitalWrite(CS, LOW) ;
digitalWrite(WR, LOW) ;
digitalWrite(RD, HIGH) ;
digitalWrite(A_0, HIGH) ;
digitalWrite(A_1, HIGH) ;
for (i=32; i <=39; i++)
{
if (buffer[p])
{
digitalWrite(i, HIGH) ;
}
else
{
digitalWrite(i, LOW) ;
}
p++ ;
}
}
void loop()
{
digitalWrite(A_0, HIGH) ;
digitalWrite(A_1, LOW) ;
digitalWrite(WR, LOW) ;
digitalWrite(RD, HIGH) ;
int i=0 ;
for (i=32; i <= 39; i++)
{
digitalWrite(i, HIGH) ;
}
delay(2000) ;
}
Der 8255 ist als Schnittstelle zu einem Mikroprozessor mit externem Speicher und E/A-Bus ausgelegt und funktioniert in dieser Umgebung sehr gut.
Der Arduino hat jedoch keinen externen Bus, sodass Sie gezwungen sind, diesen Bus zu emulieren, indem Sie einzelne I/O-Pins mit Bits schlagen, was langsam und schmerzhaft ist. Ihr Code muss Impulse an den RD-, WR- und CS-Pins erzeugen, und das tut er derzeit nicht. Sie müssen sich die Timing-Diagramme im 8255-Datenblatt genauer ansehen.
Es gibt bessere Möglichkeiten, I/O-Erweiterungen auf Arduino mit SPI oder I2C durchzuführen. Schauen Sie sich zum Beispiel die Chips MCP23S17 und MCP23017 von Microchip an .
Joe Hass
krass
Kesrut