Forum: Mikrocontroller und Digitale Elektronik LPC936 ADC auslesen


von Chris (Gast)


Lesenswert?

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

von Lothar (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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
}

von R. W. (quakeman)


Lesenswert?

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
Noch kein Account? Hier anmelden.