Hallo Zusammen, Ich habe einen LPC936 und möchte den internen ADC ansteuern und abfragen, weis aber nicht den C-Code dazu. Kann mir jemand helfen? Danke im vorraus :) Mfg Chris
ADINS = 0x40; // select e.g. AD12 as ADC input (here pin P0.3) ADMODA = 0x10; // AD1 in fixed channel single conversion mode ADCON1 = 0x04; // ADC channel 1 enabled ADMODB = 0xE0; // divide by 8 ADC clock ADCON1 |= 0x01; // start conversion immediately while((ADCON1 & 0x08) == 0); // wait for end of conversion ADCON1 &= 0xF7; // clear EOC flag ... = AD1DAT2; // value
Hey Leute, ich will mit meinem LPC936 eine Ganganzeige realisieren, hier ist mein Code welcher aber noch nicht funktoniert, ich weis aber nicht warum -.- Ich geh auf Pin0.3 mit meinem Analog wert (0-2,5V) Dann den ADC WERT abfragen und mit meiner Vref vergleichen und dem entsprechende und 1,2,... ausgeben. Könnt ihr mir helfen?
1 | #include <reg936.h> //Reg Datei einbinden |
2 | |
3 | sbit Segment = P2; //Definiere Port 2 mit 7 Segment |
4 | adcWert =0x00; // adcWert auf 0 |
5 | |
6 | |
7 | void main (void) // Hauptprogramm |
8 | {
|
9 | ADINS = 0x40; // Wähle adcWert als ADC-Eingang (hier Pin P0.3) |
10 | ADMODA = 0x10; // AD Wandler in "Single |
11 | ADCON1 = 0x04; // AD Wandler aktivieren |
12 | ADMODB = 0xE0; |
13 | |
14 | ADCON1 |= 0x01; // Wandlung starten |
15 | while((ADCON1 & 0x08) == 0); // Warte auf Ende der Wandlung |
16 | ADCON1 &= 0xF7; // ADCON1 auf 247 |
17 | adcWert = AD1DAT2; // Wert abfragen |
18 | |
19 | while (1) // Schleife |
20 | {
|
21 | |
22 | {
|
23 | if (adcWert<011010010) |
24 | {Segment=00000101;} |
25 | |
26 | else if (adcWert<010101111) |
27 | {Segment=00000100;} |
28 | |
29 | else if (adcWert<010001100) |
30 | {Segment=00000011;} |
31 | |
32 | else if (adcWert<01101001) |
33 | {Segment=00000010;} |
34 | |
35 | else if (adcWert<01010000) |
36 | {Segment=00000001;} |
37 | }
|
38 | }
|
39 | |
40 | }
|
In deinem Programm sind mehrere syntaktische Fehler enthalten. Erstens musst du die globale Variable "adcWert" erst mal deklarieren mit z.B. "unsigned char adcWert = 0x00". Zweitens kannst du (je nach Compiler) in dem if else Zweig Binärzahlen so nicht schreiben. Diese Zahlen werden wegen der führenden "0" sonst als Oktalzahlen interpretiert werden und überschreiten somit den Gültigkeitsbereich. Verwende dort am besten Hex Zahlen. Drittens hast du in der while(1) Schleife zwei(?) öffnende und schließende Klammern, was keinen Sinn ergibt. Ich würde dir empfehlen, erst mal etwas die Programmierung in der Hochsprache C zu vertiefen. Dann wird dir auch gleich einiges selber klar, wie du weiter vorgehen musst. :) Ciao, Rainer
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.