Hallo,
ich habe eine Frage,...
Ich möchte vom CH0 beim MCP3208 den Wert auslesen. Eigentlich möchte ich
dieses "Beispiel":
http://erik-bartmann.de/component/attachments/download/21.html
nachmachen, aber statt mit dem MCP3008 mache ich das mit dem MCP3208.
Ich habe die Verkabelung schon geprüft, die scheint zu stimmen. Beim
Ausgang D_out habe ich mal den Strom gemessen, der aber meistens 60
MikroA betrug. Ich verwende den RPi B+ und die Programmiersprache C
sowie ein 100k Potenziometer. Nun zum Code, kann der stimmen?
Möglicherweise liegt es nur an dem; wenn Nein, wo kann das Problem sonst
noch liegen??
Danke im Voraus
1 | #include <stdio.h>
| 2 | #include <wiringPi.h>
| 3 |
| 4 | #define D 10
| 5 |
| 6 | //GPIO Pins wurden genommen, nicht die WPi-Pins!!
| 7 | #define CSPin 8 //Chip-Select
| 8 | #define SCLKPin 9 //Clock
| 9 | #define DINPin 2 //Data-In
| 10 | #define DOUTPin 0 //Data-Out
| 11 |
| 12 | //returns 0 on error
| 13 | int pinSetup(int cs, int sclk, int dinp, int doutp){
| 14 | if (wiringPiSetup() != 0){ fprintf(stderr, "Error with wiringPi"); return 0; }
| 15 | pinMode(cs, OUTPUT);
| 16 | pinMode(sclk, OUTPUT);
| 17 | pinMode(dinp, OUTPUT);
| 18 | pinMode(doutp, INPUT);
| 19 | digitalWrite(doutp, 0);
| 20 | return 1;
| 21 | }
| 22 |
| 23 | int getData(int CS, int SCLK, int DIN, int DOUT, int CH){
| 24 | int sendCMD = CH;
| 25 | int getData = 0;
| 26 | int i = 5;
| 27 | sendCMD |= (3 << 3);
| 28 |
| 29 | //CS
| 30 | digitalWrite(CS, 1);
| 31 | delay(D);
| 32 | digitalWrite(CS, 0);
| 33 | delay(D);
| 34 | digitalWrite(SCLK, 0);
| 35 | delay(D);
| 36 | //DIN
| 37 | for (; i > 0; i--){
| 38 | digitalWrite(SCLK, 1);
| 39 | delay(D);
| 40 | digitalWrite(SCLK, 0);
| 41 | delay(D);
| 42 | }
| 43 |
| 44 | for (i = 4; i <= 0; i--){
| 45 | digitalWrite(DIN, sendCMD & (1 << i));
| 46 | delay(D);
| 47 | digitalWrite(SCLK, 1);
| 48 | delay(D);
| 49 | digitalWrite(SCLK, 0);
| 50 | delay(D);
| 51 | }
| 52 | //DOUT
| 53 |
| 54 | digitalWrite(SCLK, 1);
| 55 | delay(D);
| 56 | digitalWrite(SCLK, 0);
| 57 | delay(D);
| 58 |
| 59 | for (i = 11; i <= 0; i--){
| 60 | digitalWrite(SCLK, 1);
| 61 | delay(D);
| 62 | getData |= (digitalRead(DOUT) << i);
| 63 | digitalWrite(SCLK, 0);
| 64 | }
| 65 | return getData;
| 66 | }
| 67 |
| 68 | int main(void){
| 69 | int a;
| 70 | pinSetup(CSPin, SCLKPin, DINPin, DOUTPin);
| 71 | a = getData(CSPin, SCLKPin, DINPin, DOUTPin, 0);
| 72 | printf("\n%d\n", a);
| 73 | return 0;
| 74 | }
|
OK ich habe den Fehler gefunden... 1 | int getData(int CS, int SCLK, int MOSI, int MISO, int CH){
| 2 | register int command = CH, i = 0, result = 0;
| 3 | command |= (3 << 3);
| 4 |
| 5 | digitalWrite(CS, 1);
| 6 | digitalWrite(SCLK, 0);
| 7 | digitalWrite(MOSI, 0);
| 8 | digitalWrite(CS, 0);
| 9 |
| 10 | //MOSI
| 11 | for (i = 4; i >= 0; i--){
| 12 | digitalWrite(SCLK, 0);
| 13 | digitalWrite(MOSI, command&(1 << i));
| 14 | digitalWrite(SCLK, 1);
| 15 | }
| 16 |
| 17 | //MISO
| 18 | clock(SCLK);
| 19 | clock(SCLK);
| 20 | for (i = 11; i >= 0; i--){
| 21 | digitalWrite(SCLK, 0);
| 22 | delay(D);
| 23 | result |= (digitalRead(MISO) << i);
| 24 | digitalWrite(SCLK, 1);
| 25 | }
| 26 | return result;
| 27 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|