Forum: Mikrocontroller und Digitale Elektronik USI SPI (AtTiny24V)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Swen W. (swen_w)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kriege SPI auf dem AtTiny 24 nicht zum laufen. Ich bin er st in der 
Testphase und habe mir einen c- code aus dem Internet besorgt. Laut 
Datenbankwelt hätte dies schon eine Chance zu funktionieren, geht aber 
leider nicht.
1
#define F_CPU 1000000
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
#define PORT_SPI    PORTA
7
#define DDR_SPI     DDRA
8
#define USI_SCK     PA4
9
#define USI_DO      PA6
10
#define USI_DI      PA5
11
12
int main(void)
13
{
14
  DDR_SPI &= ~(1<<USI_DI);
15
  PORT_SPI |= 1 << USI_DI;
16
17
  // Define the following pins as output
18
  DDR_SPI |= ((1<<USI_DO)|(1<<USI_SCK));
19
  
20
    while (1) 
21
    {
22
    volatile uint8_t result = 0;
23
    uint8_t data = 0b10101010;
24
    USIDR = data;
25
    USISR |= 1 << USIOIF;
26
27
    while ((USISR & (1 << USIOIF)) == 0 ) {
28
      USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC);
29
    }
30
    
31
    result = USIBR;
32
    
33
    volatile int sepp = 0;
34
    }
35
}

Dachte mir wenn ich nun eine Brücke zwischen MOSI und MISO stecke dass 
ich im result den Wert von data habe, bleibt aber auf 0.

Hat jemand einen Tip für mich was ich falsch mache?

Danke!

von Swen W. (swen_w)


Bewertung
0 lesenswert
nicht lesenswert
Ok, Problem gefunden:

Es liegt daran, dass
MOSI = DI auf PA6
MISO = DO auf PA5

liegt.

Das verstehe ich zwar nicht ganz, denn eingentlich ist ja 
MasterOutSlaveIn der Ausgang des Masters, müsste also DataOut sein, ist 
aber als DataIn verschaltet.

Komisch....

von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn Du die Beschaltung vom Programmer aus getrachtest, ist MOSI am µC 
der IN, da der µC hier der Slave ist.

MfG

von Swen W. (swen_w)


Bewertung
0 lesenswert
nicht lesenswert
Aha, ja das macht es dann wieder verständlich.

Danke.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> Dachte mir wenn ich nun eine Brücke zwischen MOSI und MISO stecke dass
> ich im result den Wert von data habe, bleibt aber auf 0.

> Es liegt daran, dass
> MOSI = DI auf PA6
> MISO = DO auf PA5

Aber der Brücke ist doch die Signal-Richtung egal! Was war der wirkliche 
Grund für die Fehlfunktion?

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> der wirkliche Grund
DDR: In <-> Out?

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Soweit ich von AVR's gewohnt bin, spielt das DDR Register keine Rolle, 
sobald für einen I/O Pin eine Special-Function aktiviert ist.

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ehrlich gesagt, ich habe es, entgegen meiner sonstigen Gewohnheit, nicht 
ausprobiert. Aber im Datenblatt steht: "The code example assumes that 
the DO and USCK pins have been enabled as outputs in DDRA."

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stefan U. schrieb:

> Soweit ich von AVR's gewohnt bin, spielt das DDR Register keine Rolle,
> sobald für einen I/O Pin eine Special-Function aktiviert ist.

Das ist längst nicht bei allen SpecialFunctions so. Das fängt schon bei 
den OCR-Ausgängen der Timer an, die auch bei Aktivierung sehr wohl noch 
der Kontrolle durch das DDR-Register unterliegen.

Und auch im Falle des USI der Tinys ist es nicht so, wie du schreibst, 
ganz sicher jedenfalls nicht im Betrieb als TWI(I2C)-Interface. Der 
Beweis dafür findet sich (wer hätte das gedacht...) im DB, und das auch 
noch genau im zuständigen Abschnitt (was leider nicht immer so ist, 
weswegen ich in diesen Fällen Verständnis für Nichtwissen aufbringe, 
aber eben NUR in diesen Fällen, denn alles andere ist schlicht nur 
eins: Faulheit)...

However: Zitat aus dem entsprechenden Abschnitt des DB für Tiny25..85:

"Note that the Data Direction Register bit must be set to one
for the output to be enabled". (Seite 133)

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis bezüglich I2C.

Für SPI Gilt das allerdings nicht. Ich zittiere aus dem Datenblatt des 
ATtiny24 Kapitel 10.2.1:

"MISO: Master Data input, Slave Data output pin for SPI channel. When 
the SPI is enabled as a Master, this pin is configured as an input 
regardless of the setting of DDA5. When the SPI is enabled as a Slave, 
the data direction of this pin is controlled by DDA5."

"MOSI: Master Data output, Slave Data input for SPI channel. When the 
SPI is enabled as a Slave, this pin is configured as an input regardless 
of the setting of DDA6. When the SPI is enabled as a Master, the data 
direction of this pin is controlled by DDA6."

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Bewertung
2 lesenswert
nicht lesenswert
Meine Frage an Swen W, was denn nun der wirkliche Grund für den Fehler 
war, ist noch offen. Es wäre nett, wenn sich der Swen mal dazu äußern 
würde.

Man verschwindet nicht einfach so, sobald man keine Hilfe mehr braucht. 
Zumindest nicht, wenn man demnächst nochmal Hilfe bekommen möchte.

Wir sollten ihm genug Zeit geben, zu antworten.

von Paul H. (powl)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Thread ist zwar schon etwas älter aber ich hatte gerade auch einen 
Moment der Verwirrung mit dem USI bzw. der Terminologie. Ich dachte 
immer d

Stefanus F. schrieb:
> "MISO: Master Data input, Slave Data output pin for SPI channel. [...]"

Allerdings steht im Datenblatt ganz klar, dass MISO der DO = Data Out 
ist, sieht man auch im Schaubild. Daher frage ich mich, was "When the 
SPI is enabled as a Master, this pin is configured as an input 
regardless of the setting of DDA5." zu bedeuten hat. Das stimmt dann 
halt einfach nicht, wenn man mal das Schaubild im Anhang betrachtet, 
welches ich direkt aus dem USI-Kapitel des Datenblatts vom ATtiny24A 
rausgesnapped habe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.