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):
Kann Reste von Tippfehlern enthalten.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; } }
MfG Peter(TOO)
Lesezeichen