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
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
@ 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
zeig mal den slave code. lass den slave immer das selbe byte ausgeben, z.b. 0x55, 0x81 etc. dann guck, was das oszi anzeigt.
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; } } }
Bin gerade draufgekommen, dass das er die ersten 4 BIT des Bytes immer richtig schickt aber die zweiten 4 ist immer high.
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
@ 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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.