LPC936 ADC auslesen

Gast #3235514
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
Gast #3305472
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
}
#3306819
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren