Forum: Mikrocontroller und Digitale Elektronik PIC 16F690 HITEC-PICC MPLAB Problem mit SPI & EUSART


von Thomas1123 (Gast)


Lesenswert?

Ich habe mitlerweile ein bisschen mit nem MAX7219 (7-Segmenttreiber) 
rumgespielt. dabei hatte ich die SPI-Schnittstelle per Software gelöst.

jetzt hat der PIC aber eine Hardware SPI-Schnittstelle welche ich dafür 
auch geren benutzen würde doch werde ich aus dem Datenblatt nicht schlau

ich bräuchte einmal einen Beispielcode oder ein ordentliches Flowchart 
um in der anwendung der schnittstelle durchzusteigen

hat einer von euch schonmal mit erfolg die SPI-Schnittstelle im einsatz 
gehabt und wenn ja wie?

habe damit vor eeproms porterweiterungen themperaturfühler usw. 
anzusprechen

bin für eure Hilfe dankbar

so zum zweiten problem

wie verwende ich die Serielle Schnittstelle des PIC?
is jetzt nicht ganz so dringend weil das projekt erstmal gestundet ist 
da ich im moment zu viele projekte paralell laufen habe 
(Abschlussprojekt Schule & ein weiteres Schulprojekt & das allgemeine 
leben etc.)
habe bei diesem projekt for ein funkthermometer mit kty81 und nem 433mhz 
funkmodul vom conrad zu bauen also 2 pics der eine sendet und der andere 
soll empfangen

auch hierbei werde ich für eure hilfe dankbar sein

von Thomas M. (thomas1123) Benutzerseite


Lesenswert?

habe jetzt rausgefunden wie das mit der spi-schnittstelle funktionirt 
und will es euch nicht verheimlichen

es handelt sich dabei un die ansteuerung eines digitalpotis (MCP41010 
Von Microchip)

cs (chipselect ist vorher definirt worden: :#define cs pin_yxz

die einstellung für die Spi-schnittstelle:
1
  SSPSTAT = 0b01000000; // datenblatt s. 178
2
  SSPCON   = 0b00100000; // datenblatt s. 179
3
  cs = 1;

Die funktion welche die daten sendet:
1
void send_poti(char data)
2
{
3
  GIE = 0; // interrupts ausschalten (gab probleme mit dem timerinterrupt)
4
  cs = 0; // Chipselect auf 0 ziehen 
5
  SSPBUF = 0b00010001; // 8-bit ins sende/empfangsregister laden
6
  while(BF == 0); // warten bis fertig gesendet
7
  spi_dummy = SSPBUF; // Sende/enpfangsregister auslesen (muss sein sonst geht
8
                      // es nicht)
9
  BF = 0; // könnte entfallen
10
  SSPBUF = data; // die nächsten 8-bit ins sende/empfangsregister laden
11
  while(BF == 0); // warten bis fertig gesendet
12
  spi_dummy = SSPBUF; // Sende/enpfangsregister auslesen (muss sein sonst geht
13
                      // es nicht)
14
  BF = 0; // könnte entfallen 
15
  cs = 1; // Chipselect auf 1 ziehen 
16
  GIE = 1; // interrupts wieder einschalten
17
}

ich hoffe das man den code einigermassen interpretiren und auch auf cc5x 
portiren kann

mfg thomas

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
Noch kein Account? Hier anmelden.