USI Verbindung von ATmega 1284p zu Attiny2313A

OP #4568112
Lesenswert?
• ▲
▼
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
Persönliche Seite #4568694
Lesenswert?
• ▲
▼
Hallo,

Als erstes was allgemeines: Nimm wann immer es geht nur einen 
Controller. Das nimmt einem viel Arbeit ab, zB weil man nicht auf 
den/die Partner warten muss.
Und wenn es doch sein muss und es nur wegen fehlender Pins ist, könnte 
man über SPI/I2C Portexpander nachdenken.

Aber jetzt zu deinem Code.
(Ich kenne deinen Code zur Ansteuerung nicht und kann ihn mir wegen 
Zeitmangel auch nicht runterladen)

Selbst wenn du in einem ungenanntencodestück was in rxbuffer schreibst, 
spätestens hier überschreibst du die ersten 4 Byte mit 20, 21, 22 und 23

Achim S. schrieb:
> for (int i = 0; i < 4; i++)         // rxbuffer[0-3]
> (Receiving/Empfangen)
>   rxbuffer[i] = i + 20;

Das bedeutet was immer du sendest geht gar nicht in deine Berechnung 
beim Slave ein. (Falls ich keine Tomaten auf den Augen habe)

Mfg
N.G.
#4568724
Lesenswert?
• ▲
▼
Achim S. schrieb:
> Beim Slave werte ich damit ais bzw. versuche in buffer zu schreiben.for
> (int i = 0; i < 4; i++)         // rxbuffer[0-3] (Receiving/Empfangen)
>   rxbuffer[i] = i + 20;
>
> byte1 = rxbuffer[0];
>     byte2 = rxbuffer[1];


Damit ist Byte1 20 und Byte2 21 wenn du damit nichts mehr machst dann 
treffen beide Bedingungen der If Abfragen zu.  Die zweite überschreibt 
aber die erste.

Gruß JackFrost

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren