Hallo
versuche eine Verbindung zwischen einem ATmega 1284p(Master) zu einem
Attiny2313 (Slave) mit I2C bzw USI zubekommen. Verwende dazu die Datein
vom Martin Junghanns. Als Sender nutze ich das folgende:
1 | void s_write1 (void) // schreibe Daten von Master zu Slave
|
2 | {
|
3 | i2c_start(slave_adresse); // Slave ist bereit zum Schreiben
|
4 | i2c_write(0x00); // Buffer Startadresse setzen
|
5 | i2c_write(42); // ... 42-44
|
6 | i2c_stop(); // Zugriff beenden
|
7 | }
|
DerAufruf erfolgt damit. Zur Kontrolle lasse ich mit die Tasten
anzeigen.
1 | if (!(PINC & (1<<PINC2)) ) // Taster T1
|
2 | { // Wenn T1 gedrückt...
|
3 | PORTA &=~(1<<PA7); // LED Kontrolle ein
|
4 | s_write1(); // Schreib-Funktion aufrufen
|
5 | }
|
6 | else
|
7 | {
|
8 | PORTA |=(1<<PA7); // LED Kontrolle aus
|
9 | }
|
Beim Slave werte ich damit ais bzw. versuche in buffer zu schreiben.
1 | for (int i = 0; i < 4; i++) // rxbuffer[0-3] (Receiving/Empfangen)
|
2 | rxbuffer[i] = i + 20;
|
3 |
|
4 | byte1 = rxbuffer[0];
|
5 | byte2 = rxbuffer[1];
|
Damit möchte ich eine LED als Anzeige nutzen
1 | if (!(byte1==43))
|
2 | {
|
3 | PORTD &=~(1<<PD3); // LED Kontrolle ein
|
4 | PORTD |=(1<<PD4); // LED Kontrolle aus
|
5 | }
|
6 |
|
7 |
|
8 | if (!(byte2==42))
|
9 | {
|
10 | PORTD &=~(1<<PD4); // LED Kontrolle ein
|
11 | PORTD |=(1<<PD3); // LED Kontrolle aus
|
12 | }
|
Leider erfolgt kein Empfang von Daten bzw keine änderung.
Danach soll das senden vom Slave zum Master erfolgen.
Könnte mal jemand drüber schauen, was ich falsch mache.
achim