mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI immer gleiche Signal am MISO


Autor: SPI Master (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Problem:   Egal was ich im Slaveprogramm auf SPIDAT 
schreibe es liegt immer das selbe Signal an Miso an und zwar wie auf dem 
Bild


MISO
SCLK
SS

sind in dieser Reihenfolge auf dem Oszilloskope Bild zu sehen vielleicht 
weiß jemand einen guten Rat


MFG   Danke

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach dem empfangen schreibe ich die daten vom Master direkt auf ein 
array und kopiere dannach die Slavedaten auf SPIDAT


-----------------------------------------------------------
char daten;
char daten_aus = 0xF2;


void SPIINTERRUPT () interrupt 7
{
  ISPI = 0;

      daten = SPIDAT;                            SPIDAT = daten_aus; 
fertig = 1;




}


Bitte um dringende Hilfe

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ SPI Master (Gast)

>Dateianhang: MISO.JPG (165,5 KB, 5 Downloads)

Bildformate

>Ich habe ein Problem:   Egal was ich im Slaveprogramm auf SPIDAT
>schreibe es liegt immer das selbe Signal an Miso an und zwar wie auf dem
>Bild

>Nach dem empfangen schreibe ich die daten vom Master direkt auf ein
>array und kopiere dannach die Slavedaten auf SPIDAT

Welcher Controller?

Netiquette

MfG
Falk

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADUC 831    mit 8051 Kern

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert DANKE trotzdem

Autor: spi slave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeig mal den slave code.
lass den slave immer das selbe byte ausgeben, z.b. 0x55, 0x81 etc. dann 
guck, was das oszi anzeigt.

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAs Mach ich es funktioniert doch noch nicht;

es ist nur noch die serielle routine dabei, da ich etwas über rs232 
einlese







/****         Angabe der Include Dateien               ****/

#include <ADUC831.H>
#include <stdio.h>
#include <string.h>
#include "LCD_DOGM_SPI.h"



//Globale Variablen//

char c, buffer [21] , empfangswort[10]="AAAAA", sendewort[10];
char daten;
char daten_aus = 0xAB;
char buf[6];
bit fertig = 0;


char  empf[10];    // Hier wird ein Stringarray definiert (zum empfangen 
von ganzen Wörtern),(10 Stellen)

int
    empfzeiger=0,   //Definieren eines Zeigers, der später weiß, wie 
viele Buchstaben das empfangene Wort hat
    empfangen=0,   // Empfangsflag auf Null setzen
    zeitschicken=0,
    i=0;





void ini_ser1()    // Initialisierung der seriellen Schnittstelle 1
{
  T3CON = 0x085;  T3FD = 0x08;  SCON   = 0x052;  //Baudratengenerierung 
auf Seiten 56-58 im ADUC831.pdf
}



void RS232() interrupt 4  //siehe Seite 60 bei RI und dann erhält man 
mit (23-3)/8 die Interruptnummer 4
             //  beim calc achten, dass auf hex eingestellt ist
{

if (RI)
{

  empf[empfzeiger]=SBUF;//Hier werden nacheinander alle 8 bit aus dem 
Empfangsbuffer auf den string empf geschrieben (Seite 55)
  empfzeiger=empfzeiger+1;
  // Rücksetzzeiger wird erhöht
  if (empfzeiger == 5 )  // Solange nicht alle 5 Zeichen (Zeit) 
empfangen wurden wird dieser erhöht

  {
    empf[empfzeiger]='\0';
    strcpy(empfangswort, empf);  //steht der Empfangszeiger auf 5 dh, 
wurden alle 5 bytes empfangen wird der empf string auf
    empfzeiger=0;
    empfangen=1;        //das empfangswort kopiert und ist nun für 
Georg's Modul abholbar

  }

RI=0;       // RI mit der Resetmaske rücksetzen
}
}

/*
void SPIINTERRUPT () interrupt 7
{

  if(SPIDAT==0xA2 && zeitschicken==0)
  {
    print_lcd(1,1,"empfangen");
    i=0;
    zeitschicken=1;
    strcpy(sendewort, empfangswort);
    SPIDAT = sendewort[1+i];
    i++;
  }

  if (zeitschicken==1)
  {
    SPIDAT = sendewort[1+i];
    i++;

    if(i==5)
    {
      zeitschicken=0;
    }

  }
}

*/



void SPIINTERRUPT () interrupt 7
{
  ISPI = 0;

      daten = SPIDAT;            // SPI_Daten auf daten schreiben
      SPIDAT = daten_aus;        // Slave Daten auf SPIDAT schicken um 
zu senden
      fertig = 1;
    //  sprintf(buffer,"%x",daten);
    //  print_lcd(2,1,buffer);



}


main()
{

  P1 = 0xFF;
  SPICON= 0x23;       // Konfiguration SLAVE SPI
  init_lcd();      // LCD initialisieren
  blank_lcd();    // LCD Bildschirm löschen
  ini_ser1();      // Serielle Schnittstelle 1 initialisieren
  fertig = 0;


  ES=1;         // UART Serial Port Interrupt  Enable
  IEIP2 = IEIP2|0x01;  //für SPI Schnittstelle (Interrupt Enable)
  EX0=1;         //Enable External Interrupt von GPS Modul
  EA = 1;           // Befehl dass Interupts allgemein erlaubt werden
  empf[0]='\0';
  empfangswort[0]='\0';


  while(1)
  {

    if(fertig)
    {
    //  sprintf(buf,"%d",i);
    //  print_lcd(2,6,buf);
      i++;
    //  daten_aus = daten_aus + 1;
    //  print_lcd(1,1,"empfangen");

      fertig = 0;

    }
    if(empfangen)      //Prüfen ob etwas empfangen wurde
    {
    empfangen=0;
    }
}

}

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin gerade draufgekommen, dass  das er die ersten 4 BIT des Bytes immer 
richtig schickt aber die zweiten 4 ist immer high.

Autor: SPI Master (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wenn ich mit dem Tastkopf die SS leitung abgreife bekommt er die 
daten richtig


was ist da los?


Wer weiß eine Antwort

DANKE für eure Hilfe

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ SPI Master (Gast)

>und wenn ich mit dem Tastkopf die SS leitung abgreife bekommt er die
>daten richtig
>was ist da los?

Vielleicht gibt es da ein ähnliches Verhalten wie beim AVR. Dort muss 
SS am Master auf Ausgang stehen und beim Slave auf Eingang.

MFG
Falk

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.