TWI Master-Slave will nicht so ganz

Gast #2588168
Hallo,
ich habe 2 Atmega8 über TWI verbunden und verwende folgendes Programm, 
jedoch tut sich bei dem Slave nichts... währe super wenn einer von euch 
mit vlt. helfen könnte

Slave:
1
#define F_CPU 1000000
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6

7
void twi_init()
8
{
9
  // 10khz 
10
  TWBR = 10;
11
  TWSR = 1;
12

13
  // Meine Adresse
14
  TWAR = 50;
15

16
  // TWI aktivieren
17
  TWCR = (1<<TWEN | 0<<TWSTO | 1<<TWSTA);
18
}
19

20

21
int main(void)
22
{
23
  // PortB als Eingang
24
  DDRB = (1<<0 | 1<<1 | 1<<2 | 1<<3);
25

26
  // TWI Init
27
  twi_init();
28
  _delay_ms(500);
29

30
  while(1)
31
  {
32
    PORTB = TWDR;
33
  }
34
}


Der master
1
#define F_CPU 1000000
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6

7
void twi_init()
8
{
9
  // 10khz 
10
  TWBR = 10;
11
  TWSR = 1;
12
}
13

14
void send(unsigned char daten)
15
{
16
  // Startbedingung
17
  TWCR = ((1<<TWINT) | (1<<TWSTA) | (1<<TWEN));
18
  
19
  // Warten
20
  while(!(TWCR &(1<<TWINT)));
21
  
22
  // Adresse von dem Slave auf dem Bus senden
23
  TWDR = 50;
24
  TWCR = ((1<<TWINT) | (1<<TWEN));
25
  while(!(TWCR &(1<<TWINT)));
26

27
  //Daten senden
28
  TWDR = daten;
29
  TWCR = ((1<<TWINT) | (1<<TWEN));
30
  while(!(TWCR &(1<<TWINT)));
31

32
  // Stopp senden
33
  TWCR = ((1<<TWINT) | (1<<TWSTO) | (1<<TWEN));
34
}
35

36
int main(void)
37
{
38
  // Variablen
39
  unsigned char zustand;
40

41
  // PortB als Eingang
42
  DDRB = 0;
43

44
  // TWI Init
45
  twi_init();
46
  _delay_ms(500);
47

48
  while(1)
49
  {
50
    // Status von PortB abfragen
51
    zustand = PINB;
52

53
    send(zustand);
54

55
    _delay_ms(100);
56
  }
57
}
#2588670
Hallo,

Erst mal,
am Slave hat TWSTA beim Init nichts zu suchen - du willst ja keine 
Startbedingung senden. Dafür musst du TWEA setzen.

Im übrigen währe es für Tests sinnvoll wenn du am Master die Statusbits 
(TWSR) ausgeben könntest - das erleichtert die Fehlersuche ungemein. Im 
übrigen sollte man die auch nach jeder Aktion prüfen.

Sascha
Gast #2589409
...
1
  // TWI aktivieren
2
  TWCR = (1<<TWEN | 0<<TWSTO | 0<<TWSTA | 1<<TWEA);
...

Habe ich jetzt umgeändert, jedoch leuchtet immer nur ein und die selbe 
led bei den anderen tut sich nichts, es ändert sich auch nichts wenn ich 
die eingänge per schalter am master ändere.

Eine Möglichkeit zum anzeigen habe ich leider nicht.

Im späterem Velrauf wollte ich das ganze noch in Interrupts und 
Statusabfragen verpacken mir ging es jetzt hedoch ersteinmal darum 
überhaupt etwas zu "versenden" über TWI

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.