Forum: Mikrocontroller und Digitale Elektronik Probleme bei der AD-Wandlung mit PIC16F876


von Christian (Gast)


Lesenswert?

hallo zusammen.

ich habe die unter Link "http://www.cc5x.de/ADC.htm"; beschriebene 
AD-Wandlung mit der dazugehörigen Schaltung aufgebaut. Allerdings 
benutze ich kein RS232 Verbindung, sondern ein Display an dem ich 3 
verschiedene Potistellung ausgeben möchte.
dafür wurde der Code wie folgt verändert:
1
void main(void)
2
{
3
    PORTB=0x00;
4
    TRISB=0b00000000;
5
    uns16 a;             
6
    char n;
7
8
    //++  Einstellungen des AD-Wandlers  ++++++++++++++++++++++++++++
9
    ADCON1=0;               // Ganzer PortA als Analog Vdd Vss
10
    ADON=1;                 // ADC- Einschalten
11
    ADCS1=1;                // Geschwindigkeit des ADC
12
    ADCS0=0;
13
    ADFM=1;                 // Rechts Ausrichtung
14
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15
16
    lcdport=0;
17
    Delay1ms(1000);
18
    LCDInit();
19
20
  while(1)               
21
    {
22
        n=RCREG;            // Empfange Kanalnummer
23
        a=ADC(n);           // AD-Wandlung
24
        LCDPos(1,0); LCDAusgabe(n); 
25
        LCDPos(2,0); LCDAusgabe(a);
26
        Delay1ms(100);
27
 
28
        n=RCREG;            // Empfange Kanalnummer
29
        a=ADC(n);           // AD-Wandlung
30
        LCDPos(1,5); LCDAusgabe(n);
31
        LCDPos(2,5); LCDAusgabe(a);   
32
        Delay1ms(100);
33
    
34
        n=RCREG;            // Empfange Kanalnummer
35
        a=ADC(n);           // AD-Wandlung
36
        LCDPos(1,10); LCDAusgabe(n);
37
        LCDPos(2,10); LCDAusgabe(a);
38
        Delay1ms(100);        
39
    }                    
40
}

Die Funktionen habe ich nicht eingefügt, weil sie nicht verändert 
wurden. Sind die gleichen wie unter dem LINK.
Jetzt die Problematik:
Warum wird mir nur das Signal was am RA0 angeschlossen ist und nicht all 
3?
Wie ist das mit der Kanalauswahl gemeint? kann man bestimmte Kanäle 
einzeln auswählen?

Vielen Dank für die Antworten.

von holger (Gast)


Lesenswert?

Dein Code ist Scheisse !

>        n=RCREG;            // Empfange Kanalnummer

WO bekommst du die Kanalnummer her ?
Da fehlt eine komplette Funktion.

>Wie ist das mit der Kanalauswahl gemeint? kann man bestimmte Kanäle
>einzeln auswählen?

Nein kann man nicht ! Du kannst natürlich ALLE
AD-Kanäle mit einem einzigen Befehl auf einmal
in ein einziges Bit lesen. Das ist dann 0 oder 1.

Wie verblödet muss man sein um so eine Frage zu stellen ?

von Severino R. (severino)


Lesenswert?

@ holger

Sorry, aber mit Deiner Antwort ist Christian nicht geholfen.
Ich finde Deine Äusserungen ziemlich unfreundlich.
Bekanntlich gibt es keine blöden Fragen, sondern nur blöde Antworten. 
Und Du hast uns ein Beispiel davon geliefert.

@ Christian
RCREG enthält m.E. die gewünschte Kanalnummer, die vorgängig über RS232 
empfangen wurde. Da Du keine RS232 verwendest, aber immer alle drei 
Eingänge abfragen willst, kannst Du RCREG jeweils mit 0, 1, 2 ersetzen:
1
  while(1)               
2
    {
3
        a=ADC(0);           // AD-Wandlung
4
        LCDPos(1,0); LCDAusgabe(n); 
5
        LCDPos(2,0); LCDAusgabe(a);
6
        Delay1ms(100);
7
 
8
        a=ADC(1);           // AD-Wandlung
9
        LCDPos(1,5); LCDAusgabe(n);
10
        LCDPos(2,5); LCDAusgabe(a);   
11
        Delay1ms(100);
12
    
13
        a=ADC(2);           // AD-Wandlung
14
        LCDPos(1,10); LCDAusgabe(n);
15
        LCDPos(2,10); LCDAusgabe(a);
16
        Delay1ms(100);        
17
    }

Ja, Du musst den gewünschten Kanal (=Eingang) angeben. Das erfolgt über 
den Parameter beim Aufruf von ADC(n).

Alles klar?

Severino

von Christian (Gast)


Lesenswert?

@Holger.
... na da kommt sich einer besonders klug vor. Hat man dir nicht 
beigebracht Leute freundlich zu behandeln?
Aber da gibts immer wieder einige die es unbedingt raushängen lassen 
müssen wie arrogant und großkotzig sie daher reden.
Wahrscheinlich wurden sie als Kinder von jeden verarscht und als Freek 
bezeichnet und muss deshalb jeden Kommentar mit einer Abwertung 
abschließen.

Vielen Dank trotzdem.

War mal wieder ein Beweis dafür wie beschränkt manche sind.

... n=PORTA.0; n=PORTA.1; n=PORTA.2; ...

wäre vielleicht eine mögliche Antwort gewesen. Oder du hättest auf einen 
anderen Code hinweisen können. Aber egal....

von Christian (Gast)


Lesenswert?

@ Severino.
Danke für die Antwort.
Danach habe ich gesucht.

Servus

von holger (Gast)


Lesenswert?

@ Severino

>Sorry, aber mit Deiner Antwort ist Christian nicht geholfen.
>Ich finde Deine Äusserungen ziemlich unfreundlich.

Stimmt, das waren sie. Mit Absicht ;)
Und so ganz ohne Informationen waren sie ja nun auch nicht.

>Bekanntlich gibt es keine blöden Fragen, sondern nur blöde Antworten.
>Und Du hast uns ein Beispiel davon geliefert.

Doch es gibt blöde Fragen. Hat er mal das Datenblatt zum Thema
RCREG gelesen ? Neeeiiin, die Mühe macht man sich doch nicht.

@ Christian

>... na da kommt sich einer besonders klug vor. Hat man dir nicht
>beigebracht Leute freundlich zu behandeln?

Doch, in der Regel bin ich ein sehr höflicher Mensch.
Aber im Laufe meines Lebens hat es sich als
sehr hilfreich erwiesen lernresistenten gelegentlich
mal einen Tritt in den Hintern zu geben.
Das beschleunigt die Lernkurve um ein vielfaches ;)

von Severino R. (severino)


Lesenswert?

@ holger

"C'est le ton qui fait la musique"

Einerseits magst Du recht haben, man sollte die Fragesteller dazu 
animieren, selber nach den Antworten zu suchen.
Aber Suchen muss auch zuerst gelernt sein:
Wie sucht man?
Wo sucht man?
Was sind die relevanten Suchbegriffe?
Sehr wichtig: wie erklärt man das Problem knapp und präzis?

Aber Du kannst ja Hinweise in die richtige Richtung geben, und zwar 
nicht in solche einem niederschmetternden Ton.

Ausserdem:
Wenn jeder alles selber suchen würde, bestünde ein Forum wie dieses hier 
aus einem einzigen Link:
www.google.com

Im Übrigen passiert es wohl den Meisten hier (Dir natürlich nicht ;-) 
manchmal, dass sie den Wald vor lauter Bäumen nicht sehen und einen 
Hinweis gebrauchen können.

Schade, dass Du keine Gelegenheit hattest, Christian zu zeigen, was für 
ein "sehr höflicher Mensch" Du in der Regel bist.

Severino

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.