mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18F2420 hört auf SPI, obwohl SS high


Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum!

Ich habe hier einen PIC18F2440, dessen SPI ich als Slave MIT "SS Control 
enable" konfiguriert habe. Aber er setzt sein SSPIF (Synchronous Serial 
Port Interrupt Flag), wenn ein Byte über die SPI übertragen wurde, 
OBWOHL sein SS-Pin andauernd high ist.
Weder die Initialisierung durch manuelles Setzen der Register, noch die 
Funktion OpenSPI() liefern ein gewünschtes Ergebnis.

Hat jemand einen Tipp für mich? Bin langsam am verzweifeln...

Danke schon mal,
Grüße,
Michael
#include <stdio.h>
#include <stdlib.h>
#include <p18cxxx.h>
#include <spi.h>
#include "defs.h"

#pragma config OSC = HS   //high speed osc
#pragma config PWRT = ON  //powerup timer
#pragma config WDT = OFF  //Watchdog aus
#pragma config LVP = OFF  //LV-ICSP

#define TAKT 14745600UL


void init_mcu(void)
{
  LATA |= (1<<5);
  TRISA = ~(1<<4);
  LATB=0;
  TRISB = ~((1<<3)|(1<<4)|(1<<5));

  /* SPI enable, slave , rising clk */  
//  SSPSTAT |= (1<<CKE);
//  SSPCON1 = (1<<SSPEN)|(1<<SSPM2);
  OpenSPI(SLV_SSON, MODE_00, SMPEND);

  /* interrupt */
  /* glob en - SPI en */
  PIE1 = (1<<SSPIE);
  INTCON = (1<<GIE)|(1<<PEIE);
}


#pragma code
void main()
{
  unsigned char i=0;
  init_mcu();

  while(1)
  {
    LATB = (1<<i);
    i++;
    if(i>2)    i=0;
    Delay10KTCYx(1000);
  }
}

void high_isr(void);
#pragma code high_vector=0x08
void interrupt_at_high_vector(void) { _asm goto high_isr _endasm }
#pragma code
#pragma interrupt high_isr
void high_isr (void)
{
  if(PIR1 & (1<<SSPIF))
  {  /* SPI transaction done */
    LATB ^= (1<<4);
    PIR1 &= ~(1<<SSPIF);
  }
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schalte mal ADC- und Komparatormodul ab.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo holger,

ich hab das ADON bit in ADCON0 auf 0 gesetzt und die ComparatorMode-Bits 
in CMCON alle auf 1.
Damit sollte beides aus sein. Meine SPI funktioniert leider trotzdem 
noch nicht wie gewünscht.

Grüße,
Michael

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich hab das ADON bit in ADCON0 auf 0 gesetzt

Das reicht aber nicht!
ADCON1 auch richtig setzen.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>ich hab das ADON bit in ADCON0 auf 0 gesetzt
>
> Das reicht aber nicht!
> ADCON1 auch richtig setzen.

Hab ich auch gesetzt. Sogar das PBADEN config pragma hab ich auf OFF 
gestellt.
Hilft alles nichts!

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.