Hallo Patrick,
Etwas Software brauchst du dazu schon.
Du brauchst für jedes Bit einen Timer. Das kannst du mit einem Timer-Interrupt machen, welcher z.B. alle 1ms aufgerufen wird.
Wenn die Timer >0 wird der Wert jedes Mal um 1 verringert.
Wenn du PORTD einliest, wird jedes Mal für eine gelesene 1 der entsprechende Timer mit 200 beschrieben.
Für die Ausgabe musst für jeden Timer welcher >0 eine 1 ins entsprechende Bit setzen.
So in der Art (nicht getestet):
Code:
unsigned char timer[8];
void interrupt(void)
{
char i;
for (i = 0; i < 8; i++)
{
if (timer[i]) timer[i]--;
}
}
void out(void)
{
char i;
unsigned char x = 0;
for (i = 0; i < 8; i++)
{
if (timer[i]) (x |= (1 << i));
}
i2c_write (x);
}
unsigned char in(void)
{
unsigned char x;
char i;
x = PORTD;
for (i = 0; i < 8; i++)
{
if (x & (1 << i)) timer[i] = 200;
}
}
Kann Reste von Tippfehlern enthalten.
MfG Peter(TOO)
Lesezeichen