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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.