USI Interface als SPI Schnittstelle beim ATtiny261A

OP #2739949
Hallo liebe Controllerfreunde,

ich sizte gerade vo dem Problem, dass die Kommunikation über das 
USI-Interface einfach nicht klappen will. Alle denkbaren 
Konfigurationsmethoden aus dem Datenblatt hab ich schon durch. Vielleich 
kann mir von euch aber einer weiter helfen.
Das Ergebnis meines Werkes ist an Hand des Bildes im Anhang am besten zu 
sehen. (v.o.n.u. SCK, SDI, SDO, CS)

Ich habe alle nötigen Ausgänge konfiguriert:
1
  DDRB  |= (1<<CS)|(1<<SCK)|(0<<SDI);  // Ausgang
2
  DDRB  &= ~(1<<SDO);  // Eingang
3
  PORTB |= (1<<SDO);  // Pull-up

Ich habe den Timer0 im CTC-Mode initialisiert um den Takt für das 
USI-Interface zu generieren:
1
  TCCR0A = 0b00000001;      // CTC-Mode
2
  TCCR0B = (0<<CS01)|(1<<CS00);  // Vorteriler 0
3
  OCR0A = 100; // rund XXX kHz
4
  TIMSK = 0;
5
  
6
  ...
7
  TIMSK |= (1<<OCIE0A);    // Timer0 AN
8

9
  ...
10
ISR (TIMER0_COMPA_vect)
11
{
12
   USICR |= (1<<USITC);    // Takt-Pin toggeln
13
}

Und ich nutze die folgende Senderoutine:
1
while(1)
2
{
3
   PORTB &= ~(1<<CS);  // CS
4
         
5
   (void)SPITransfer(0x80 | 0x55);
6
   output = SPITransfer(0);
7

8
   PORTB |= (1<<CS);      // Chipselect zurücksetzen  
9
   _delay_ms(25);
10
}
11

12
static uint8_t SPITransfer(uint8_t d)
13
{
14
    USIDR = d;
15
    USISR = (1<<USIOIF);
16
    do {
17
         USICR = (1<<USIWM0)|(0<<USICS1)|(1<<USICS0)|(0<<USICLK);
18
       } while ((USISR & (1<<USIOIF)) == 0);  
19
    return USIDR;
20
}

Danke schon mal für eure Hilfe!
Angehängte Dateien:
OP #2739982
> Wozu. Die USI erzeugt ihren eigenen Takt.

Hallo Spess,

ich wollte den Takt durch den Timer erzeugen, da ich ihn dadurch besser 
einstellen kann, da ich noch nicht weiß, welche Geschwindigkeit der 
Speicherbaustein der als Slave dran hängen soll schafft.

Die Appnote für das USI-Interface und die Codebeispiele hab ich mir 
schon angesehen. Halfen mir aber halt irgendwie nicht weiter, da 
nirgends darauf eingegangen wird, wie das mit einem externen Takt durch 
Timer0 aussieht.

LG
Gast #2740051
Hi

>Halfen mir aber halt irgendwie nicht weiter, da
>nirgends darauf eingegangen wird, wie das mit einem externen Takt durch
>Timer0 aussieht.

Verstehe ich jetzt nicht. Die Software in der Zip-Datei beruht doch auf 
der Verwendung des Timers.

MfG Spess
Gast #2740439
Hi

>#define USI_DATAIN_PIN   PB1   //!< USI data input pin.
>#define USI_DATAOUT_PIN  PB0   //!< USI data output pin.

Das ist genau umgedreht. PB1 ist Ausgang und PB0 Eingang.

MfG Spess
OP #2740589
>>#define USI_DATAIN_PIN   PB1   //!< USI data input pin.
>>#define USI_DATAOUT_PIN  PB0   //!< USI data output pin.
>
>Das ist genau umgedreht. PB1 ist Ausgang und PB0 Eingang.

Hallo

genau das war der Fehler! Ich hab mich nach den Bezeichnungen MISO und 
MOSI auf Seite 2 des Datenblatts gerichtet, da diese ja eigentlich die 
Datenrichtung für SPI angeben.

Vielen Dank dir für deine Hilfe!
LG
Gast #2740601
Hi

>Ich hab mich nach den Bezeichnungen MISO und
>MOSI auf Seite 2 des Datenblatts gerichtet, da diese ja eigentlich die
>Datenrichtung für SPI angeben.

Das hat aber in diesem Fall nichts mit SPI zu tun. MOSI und MISO gehören 
in dem Fall zum ISP.

MfG Spess

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.