Hallo, ich habe die im Anhang sich befindende Schaltung und folgendes Problem bei der C-code Programmierung: datenblatt: http://www.analog.com/static/imported-files/data_sheets/AD7792_7793.pdf Microcontroller: Psoc Der adc soll im continious Mode laufen, also ständig neue Datenwerte herausgeben. Bei mir schick er aber andauernd nur 00 raus. Die Register sollten richtig gesetzt sein. das habe ich geschrieben um alles zu starten.
1 | void send(BYTE d) |
2 | {
|
3 | SPIM_SendTxData(d); |
4 | while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; |
5 | |
6 | send(0xFF);//reset |
7 | send(0xFF); |
8 | send(0xFF); |
9 | send(0xFF); |
10 | |
11 | //Config schreiben
|
12 | send(0x10); |
13 | //Config Schreibevorgang
|
14 | send(0xB16); |
15 | |
16 | //Mode schreiben
|
17 | send(0x8); |
18 | //Mode Schreibevorgang 16bit
|
19 | send(0x0009); |
20 | |
21 | //IO schreiben
|
22 | send(0x28); |
23 | //IO Schreibevorgang
|
24 | send(0x03); //IEXC2 an IOUT2 // 1mA |
25 | |
26 | send(0x58); //Continuous Conversion Mode einleiten |
27 | |
28 | while(1) { |
29 | if (((PRT0DR & 0x10) == 0x00) && (i < 2)) { |
30 | send(0x00); |
31 | i++; |
32 | x = SPIM_bReadRxData(); |
33 | y = x + (y << 8); |
34 | |
35 | } //Warten bis Din Flanke unten ist >>dann ausgeben |
36 | |
37 | if (((PRT0DR & 0x10) == 0x00) && (i == 2)) { |
38 | send(0x00); |
39 | i++; |
40 | }
|
41 | if(i >= 3) { |
42 | |
43 | LCD_Position(1,0); |
44 | LCD_PrHexInt(y); |
45 | y=0; |
46 | i=0; |
47 | }
|
In der while-schleife sollte er andauernd das Data register ausgeben mit der 0x00. Als Ausgabe am Display sieht man nichts sinnvolles. Ich hab mir die anderen Threads angeschaut, haben mir aber nicht geholfen.