Hallo Zusammen
Ich beschäftige mich seit kurzem mit dem Hardware-TWI des ATMega16 um
damit den LED-Controller TLC59116 anzusteuern.
Als Software-Basis hab ich die beiden Code-Dateien aus diesem Beitrag
hier übernommen:
Beitrag "TLC59116 ansteuern mit C"
Mit einem ganz einfachen Programm möchte ich auf den TLC59116 zugreifen.
Mein Problem ist, dass die Rechteck-Impulse an SCL und SDA sehr stark
verschliffen sind. Siehe dazu den Screenshot.
Das Programm:
1 | volatile uint8_t test, adr;
|
2 | int main(void)
|
3 | {
|
4 | DDRC= 0b00000011; //SCL und SDA als Ausgänge
|
5 | i2c_init();
|
6 | adr=0;
|
7 | while(1)
|
8 | {
|
9 | test=i2c_start(adr);
|
10 | _delay_ms(1);
|
11 | adr++;
|
12 | }
|
13 | return 1;
|
14 | }
|
Wenn ich stattdessen über Software einen einfachen Rechteckimpuls an den
beiden Pins erzeuge sieht das Signal sehr gut aus, siehe Screenshot.
1 | volatile uint8_t test, adr;
|
2 | int main(void)
|
3 | {
|
4 | DDRC= 0b00000011; //SCL und SDA als Ausgänge
|
5 | i2c_init();
|
6 | adr=0;
|
7 | while(1)
|
8 | {
|
9 | PORTC = 0b00000011;
|
10 | _delay_us(5);
|
11 | PORTC = 0b00000000;
|
12 | _delay_us(5);
|
13 | }
|
14 | return 1;
|
15 | }
|
Zwischen beiden Screenshots wurde lediglich die Software geändert. An
beiden Pins sind immer zwei Pull-Ups mit 4,7k nach 5V dran.
So richtig kann ich mir das nicht erklären woran das liegt. Habt ihr
eine Idee? An was könnte das liegen? Im Datenblatt selbst konnte ich
bisher keinen Hinweis finden, dass sich die Flankensteilheit oder
Signalverhalten mit Registern konfigurieren lässt.
Danke schon mal im Voraus.
Felix