USI -- Three-wire -- ATTiny25 -- Slave soll Daten senden -?

Gast #978831
Lesenswert?

Hallo,

bitte helft mir, komme nicht weiter --- habe alles über USI hier im 
Forum gelesen.

Ich schicke aller Sekunden von einem Master 8 Taktimpulse auf den Slave, 
aber er will nichts ausgeben ...

Über Leds usw. habe ich herausbekommen, dass die SLK-Impulse ankommen 
und die While-Schleife auch beendet wird, aber eben nur 1 mal. Aber auch 
bei diesem einem mal bekomme ich keine Daten an DO. Hier muss ich was 
vergessen haben ...
Eigentlich müsste der Slave an der while-Schleife warten, bis die 
nächsten 8 Clocks kommen oder?
Der 4BitCounter läuft auch los ...

Danke ...


ATTiny25

1
void InitSPI(void)
2
{
3
  
4
USICR |= (1<<USIWM0) | (1<<USICS1);  
5

6
// USIWM0 = Output wird jetzt vom 
7
//uC gesetzt und gelöscht und nicht mehr per Software
8
// USICS1 = External Clock enabled, wird also von außen gesteuert      
9
}
10

11

12
uint8_t SlaveSPITransfer (uint8_t a)
13
{
14
  DDRB |= (1<<PB1);  
15

16
  USIDR = a;   // Daten übergeben
17

18
  USISR &= ~(1<<USIOIF);  // Counter Overflow Flag wird gelöscht   
19

20
  while (! (USISR & (1<<USIOIF)))
21
  
22
  DDRB &= ~(1<<PB1);
23

24
  return USIDR;
25
}
26

27

28

29
// in der Main steht
30

31
while(1)
32
  { 
33
     // Test
34
    uint8_t a;
35

36
    a = SlaveSPITransfer(50);
37
  }

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