Forum: Mikrocontroller und Digitale Elektronik SPI mit AT90USB162


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 Eugen.S (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich sitze schon eine Weile an diesem Problem und komme einfach nicht zum 
Ergebnis.
Ich möchte den Controlle AT9 USB162 mit 74HC165 um 8 Eingänge erweitern, 
da ich keinen anderen Controlle verwende kann und die Eingänge benötige. 
Ich habe das Datenblatt studiert und hoffe die Initialisierung richtig 
gemacht zu haben.
Mein Problem ist, dass ich kein SCK-Signal messe und daher 
wahrscheinlich doch in der Initialisierung was falsch sein müsste.

Könnte einer bitte einen Blick drauf werfen.

Danke im Voraus.

von holger (Gast)


Lesenswert?

>ich sitze schon eine Weile an diesem Problem und komme einfach nicht zum
>Ergebnis.

Kein Wunder wenn du dir dauernd selber ein Bein stellst.
1
  SPDR = sData;
2
  /* Wait for transmission complete */
3
  while(!(SPSR & (1<<SPIF)))
4
  {
5
    SPDR = sData;

Was soll der Quatsch mit dem zweiten  SPDR = sData;?
Wenn Transfer nicht beendet prügel noch mehr Daten in SPDR?

1
void SPI_SlaveInit(void)
2
{
3
  /* Set MISO output, Set SS output, all others input */
4
  DDRB = (1<<DD_MISO)|(1<<DD_SS);
5
  // Set SS to high
6
  PORTB = (1<<PB0);
7
  /* Enable SPI */
8
  SPCR = (1<<SPI_ENABLE);
9
}

MISO ist ganz sicher kein Ausgang. Master In, Slave Out.
Dann schaltest du im SPCR den Mastermode wieder ab.

von Eugen.S (Gast)


Lesenswert?

holger schrieb:
> Was soll der Quatsch mit dem zweiten  SPDR = sData;?
> Wenn Transfer nicht beendet prügel noch mehr Daten in SPDR?

Damit wollte ich erreichen, dass die Daten durchgängig gesendet werden. 
Das dabei nur Müll raus kommt war mir bewusst. Der Aufruf er Funktion in 
der main sollte das kontinuierliche Sende ja machen, aber anscheinend 
geht es nicht.
Auch wenn ich das zwei SPDR = sData entferne, kann ich an der LED sehen, 
dass das Programm hier while(!(SPSR & (1<<SPIF))) hängen bleibt, weil 
das Flag anscheinend nicht gesetzt wird. Trotzdem habe ich keine Daten 
an Mosi und kein SCK.

holger schrieb:
> MISO ist ganz sicher kein Ausgang. Master In, Slave Out.

Danke für den Tipp ;-).

von holger (Gast)


Lesenswert?

Dann versuchs mal so:
1
void SPI_MasterInit(void)
2
{
3
  /* Set MOSI, SS and SCK output, all others input */
4
  DDRB = (1<<DD_MOSI) | (1<<DD_SCK) | (1<<DD_SS);
5
  // Set SS to high
6
  PORTB |= (1<<PB0);
7
8
  /* Enable SPI, Master, set clock rate fck/16, LSB first */
9
  SPCR = (1<<SPI_ENABLE)|(1<<SPI_MASTER)|(1<<SPI_FREG_16)|(1<<SPI_LSB);
10
}
11
12
uint8_t SPI_MasterTransmit(uint8_t sData)
13
{
14
  /* Start transmission */
15
  SPDR = sData;
16
  /* Wait for transmission complete */
17
  while(!(SPSR & (1<<SPIF)));
18
19
  return SPDR;
20
}
21
22
int main(void)
23
{
24
  uint8_t sData = 0xFF;
25
  uint8_t rData = 0x00;
26
  
27
  uc_init();
28
  SPI_MasterInit();
29
  
30
   while(1)
31
   {
32
     PORTD = (1<<LED_PORT);
33
     _delay_ms(1000);
34
     PORTD &= ~(1<<LED_PORT);
35
     _delay_ms(1000);
36
    
37
     PORTB |= (1<<PB0);
38
     PORTB &= ~(1<<PB0);
39
40
     rData = SPI_MasterTransmit(sData);
41
   }
42
}

SS muss ein Ausgang werden bevor man den SPI Master aktiviert.

von Eugen.S (Gast)


Lesenswert?

werde ich versuchen, danke!

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.