Estoy tratando de conectar un Arduino Mega a un Intel 8255 y parece que no funciona, aquí está mi configuración:
Estoy usando como LS245 IC para conectar 4 LED. Los pines CS, RESET están conectados a GND. Estoy tratando de usar el Puerto B para enviar datos para ENCENDER/APAGAR LED individuales. Mi código simplemente establece el registro de control en el modo de E/S, y el puerto B se establece como SALIDA. ¿Algún consejo sobre lo que puede estar mal?
Mi código:
#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) ;
}
El 8255 está diseñado para interactuar con un microprocesador que tiene una memoria externa y un bus de E/S, y funciona muy bien en ese entorno.
Sin embargo, el Arduino no tiene un bus externo, por lo que se ve obligado a emular ese bus golpeando los pines de E/S individuales, lo cual es lento y doloroso. Su código necesita generar pulsos en los pines RD, WR y CS, y actualmente no lo está haciendo. Debe observar más de cerca los diagramas de tiempo en la hoja de datos 8255.
Hay mejores formas de hacer la expansión de E/S en Arduino usando SPI o I2C. Por ejemplo, eche un vistazo a los chips Microchip MCP23S17 y MCP23017 .
joe hass
crasico
kesrut