Harald schrieb:
> Vielleicht das Publikum mal aufklären, was das überhaupt ist. Die
> wenigsten werden Lust haben, erstmal Datenblätter zu saugen.
Der MCP3551 ist ein Sigma/Delta ADC, welcher einen PT100 auswerten soll.
Chris B. schrieb:
> Ja, weil um von SPI etwas zu lesen, muss man auch etwas Senden.
> Also würde ich am Anfang der der <isp_read()> Funktion irgendeinen Wert
> in das SSPBUF Register schreiben damit der Sende/Empfangsvorgang
> ausgelöst wird.
Harald schrieb:
> Egal, das Problem dürfte sein, dass keiner den Clock erzeugt. Du musst
> doch Dummy-Bytes senden, damit Clocks entstehen. Kenne diesen PIC nicht
> im Detail, wird hier aber ähnlich sein.
Max H. schrieb:
> Das SS low/high würde ich weglassen, da du um die 22bit einzulesen 3
> Bytes während SS auf low ist einlesen musst. Siehe Seite 17 unten:
> http://ww1.microchip.com/downloads/en/devicedoc/21950c.pdf
Danke! Jetzt geht etwas und der Wert ändert wenn der PT100
erwärmt/abgekühlt wird.
Max H. schrieb:
> Ich habe letztes Jahr einen MCP3550 mit dem PIC16F1825 angesteuert, wenn
> du willst kannst du heute Abend die Sources haben.
Ja gerne, das wäre eine grosse Hilfe.
Der Code sieht jetzt so aus:
1 | #include "..\Include\HTC_pbainc.h"
|
2 | |
3 | |
4 | void spi_wait_if(void)
|
5 | {
|
6 | while(!SSPIF); //Warten bis ISP-IF gesetzt (MSSP action done)
|
7 | SSPIF=0; //Interrupt-Flag rücksetzen
|
8 | }
|
9 | |
10 | void spi_init(void)
|
11 | {
|
12 | TRISC3 = 0; //SCL=output
|
13 | TRISC4 = 1; //SDI=input
|
14 | TRISD0 = 0; //SS=outpur
|
15 | SSPSTAT = 0b01000000; //CKE=1
|
16 | SSPCON = 0b00110001; //SSPEN=1, CKP=1, master mode, clock=Fosc/16
|
17 | SSPEN=1; //MSSP-Modul eingeschalten (SSP-Enable)
|
18 | RD0=1;
|
19 | }
|
20 | |
21 | unsigned char spi_read()
|
22 | {
|
23 | SSPBUF=0xFF; //Dummy byte
|
24 | spi_wait_if();
|
25 | return SSPBUF;
|
26 | }
|
27 | |
28 | void main(void)
|
29 | {
|
30 | init_pba(); //Initialisierungen
|
31 | spi_init();
|
32 | while(1)
|
33 | {
|
34 | unsigned char byte1;
|
35 | unsigned char byte2;
|
36 | unsigned char byte3;
|
37 | unsigned long data;
|
38 | RD0=0;
|
39 | byte1=spi_read();
|
40 | byte2=spi_read();
|
41 | byte3=spi_read();
|
42 | RD0=1;
|
43 | data=((byte1<<16)+(byte2<<8)+byte3);
|
44 | data=data&0x1FFFFF;
|
45 |
|
46 | printf("%lu",data);
|
47 | lcd_gotoxy(0,0);
|
48 | delay_ms(10);
|
49 | }
|
50 | }
|
Max H. schrieb:
> BTW: Die Schnittstelle heißt SPI und nicht isp.
Ups logisch, korrigiert :D