Hi, ich benutze einen Luftblasensensor und habe ein Problem mit SPI. Ich verwende einen PIC18F2480 (http://ww1.microchip.com/downloads/en/DeviceDoc/39637a.pdf) und verbinde über die SPI Schnittstelle den uC mit den AD-Wandler AD7790 (http://www.analog.com/UploadedFiles/Data_Sheets/AD7790.pdf). Ich habe PIN 1 (SCLK) des AD7790 mit PIN 14 (RC3/SCK/SCL) des PIC, PIN 2 (CS) mit PIN 13 (RC2/CCP1), PIN 9 (DOUT) mit PIN 16 (RC5/SDO) und PIN 10 (DIN) mit PIN 15 (RC4/SDI/SDA) direkt verbunden. Die anderen erklären sich von selbst. Als Compiler benutze ich CCS C. Mein Code sieht wie folgt aus:
1 | #include <18f2480.h> |
2 | #device *=16
|
3 | #device ADC=10
|
4 | |
5 | #use delay(clock=8000000)
|
6 | |
7 | #fuses NOWDT,HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP
|
8 | |
9 | |
10 | #define SPI_MODE_0_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
|
11 | #define SPI_MODE_0_1 (SPI_L_TO_H)
|
12 | #define SPI_MODE_1_0 (SPI_H_TO_L)
|
13 | #define SPI_MODE_1_1 (SPI_H_TO_L | SPI_XMIT_L_TO_H)
|
14 | |
15 | #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,BRGH1OK,stream=debug)
|
16 | |
17 | #define SPANNUNG_REF 4
|
18 | #define KOMPERATOR_REF 0
|
19 | #define LUFTBLASENSENSOR 1
|
20 | |
21 | #define CS PIN_C2
|
22 | |
23 | #define CREAD 0b00111100 // continous read
|
24 | |
25 | |
26 | void main() |
27 | {
|
28 | |
29 | int8 ad_in1; |
30 | int8 ad_in2; |
31 | int8 ad_in3; |
32 | |
33 | |
34 | setup_spi(SPI_MASTER | SPI_MODE_1_1 | SPI_CLK_DIV_16); |
35 | setup_adc(adc_off); |
36 | |
37 | |
38 | SET_TRIS_C( 0b00001000 ); |
39 | |
40 | output_high(CS); |
41 | |
42 | delay_ms(100); |
43 | |
44 | puts("\nLuftblase;Referenzspannung;Komparator_Ref;Luftblasensensor\n"); |
45 | |
46 | |
47 | while (TRUE) |
48 | {
|
49 | |
50 | delay_ms(20); |
51 | output_low(CS); |
52 | |
53 | |
54 | if (input(PIN_B0)) |
55 | {
|
56 | printf("Ja;"); |
57 | }
|
58 | else
|
59 | {
|
60 | printf("Nein;"); |
61 | }
|
62 | |
63 | spi_write(CREAD); |
64 | |
65 | ad_in1 = spi_read(0); |
66 | ad_in2 = spi_read(0); |
67 | ad_in3 = spi_read(0); |
68 | output_high(CS); |
69 | |
70 | fprintf(debug,"%u %u %u;\n", ad_in1, ad_in2, ad_in3); |
71 | }
|
72 | }
|
Wenn ich das Programm nun ausführe, erscheint am Computer (sende Daten über RS232 und sehe sie mir über Docklight an) noch ein "Ja" und dann kommt nichts mehr. Wo liegt der Fehler? Ich bin um jede Hilfe dankbar.