SPI-Einstellungen im Betrieb ändern

Gast #1444732
Lesenswert?
• ▲
▼
Hallo,
ich habe folgendes Problem. Ich wollte 2 SPI-Slaves an den atmega32 
anschließen: enc28j60(Netzwerk) und mlx90316(Winkelgeber).
enc28j60 läuft mit f/2, CPHA=0 und mlx90316 nur mit f/16,CPHA=1.
Wäre es möglich dass ich zum Winkelauslesen eine Interrruptroutine 
benutze, bei der zuerst die SPI-Parameter richtg einstelle, und danach 
wieder auf den alten Wert (Frequenz/CPHA) setze?
Gast #1444747
Lesenswert?
• ▲
▼
>Wäre es möglich dass ich zum Winkelauslesen eine Interrruptroutine
>benutze, bei der zuerst die SPI-Parameter richtg einstelle, und danach
>wieder auf den alten Wert (Frequenz/CPHA) setze?

Das wäre äußerst kontraproduktiv wenn die
Interruptroutine die SPI Routinen vom ENC unterbricht.
Dann kommt nur noch Müll dabei raus.
Gast #1942129
Lesenswert?
• ▲
▼
Hallo sasa,

ich stehe gerade vor einen rätzel ich, ich versuche die ganze Zeit den 
mlx90316 über SPI auszuwerten aber bekomme leider nur Mull raus, 
entweder Nullen oder Einsen, als µc benutze ich einen atmega168, und 
einen npn-transistor(BC547), mein relevante stückCode Sieht So aus:

//*******************************************************

    DDRB  &=  ~(1 << MISO);
    DDRB  |=  ( (1 << MOSI) | (1 << SCK)| (1 << CS) );
    PORTB &=  ~((1 << MOSI) | (1 << MISO) | (1 << SCK));  //
  PORTB |= (1<<CS); //CS auf High
SPCR |= (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(1 << SPR1 )|( 0<< SPR0);
SPSR &= ~(1 << SPI2X);


PORTB &=~(1<<CS);
_delay_us(10);

  SPDR = 0xaa;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x0  = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x1  = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x2 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x3 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x4 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x5 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x6 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x7 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x8 = SPDR;
  _delay_us(10);

  SPDR = 0x00;
  while (!(SPSR&(1<<SPIF)));
  SPDR = 0xff;
  while (!(SPSR&(1<<SPIF)));
  x9 = SPDR;
  _delay_us(10);

PORTB|=(1<<CS);
_delay_ms(1);



habe ich was falsches dabei gemacht, ohne es zu merken?
ich bin für jede Art hilfe dankbar.

Antwort schreiben

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.

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.