ADC Werte speichern
Samstag, 19. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  AD-Wandler (CCS)  |  ADC Werte speichern « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: ADC Werte speichern  (Gelesen 4503 mal)
 
Readl
Gast
« am: April 07, 2006, 17:33:29 »

Hallo wieder ich!!
Habe das Problem das ich die Min und Max Werte meines eingelesen ADC Wertes auswerten muss
und ich habe es mit einer if anweisung versucht nur irgendwie funkt das mit dem überschreiben nicht so!!


MFG
Gespeichert
Flo
Full Member
***
Offline Offline

Beiträge: 229



Profil anzeigen
« Antworten #1 am: April 08, 2006, 13:59:46 »

Hea?
Poste bitte mal ein wenig Code oder so das man auch was hat zum drüber nach denken Smiley

Gruß
Flo
Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #2 am: April 09, 2006, 11:01:48 »

Also so hab ich mir das mal theoretisch vorgestellt

Code:
Adc_Data = read_adc();
      printf(LCD_PUTC,"A%04Lu",Adc_Data);
      if(wert>=Adc_Data)
      { Adc_Data=max;
      }
if(wert<=Adc_Data)
{ Adc_Data=min;
}
       vol=max-min;

Oder geht das irgendwie das man alle ADC-Werte in ein Array schreibt und danach auswertet??
ist zwar ein großer aufwand aber naja vl. doch eine komfortablere Lösung L&#228;chelnd
« Letzte Änderung: April 09, 2006, 11:03:43 von Readl » Gespeichert
Flo
Full Member
***
Offline Offline

Beiträge: 229



Profil anzeigen
« Antworten #3 am: April 09, 2006, 12:11:34 »

Was mir als erstes und sehr gravierend auffällt ist, das Du den C Syntax bissel verdrehst.

Code: (c)
if(wert>=Adc_Data) // Hier testest du ob wert >= Adc_Data ist, ist das so gewollt?
  {
    Adc_Data=max; // Hier weist du Adc_Data den Wert von max zu!
  }
if(wert<=Adc_Data) // siehe oben
  {
    Adc_Data=min; // siehe oben
  }

Sollte eher so aussehen:
Code: (c)
if(Adc_Data>=wert)
  {
    max=Adc_Data;
  }
if(Adc_Data<=wert)
  {
    min=Adc_Data;
  }

Versuch das mal!

Gruß
Flo
« Letzte Änderung: April 09, 2006, 15:00:37 von Flo » Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #4 am: April 10, 2006, 07:34:38 »

 :mad: ok das ist klar
 thx einmal ich werde es gleich einmal probieren
Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #5 am: April 10, 2006, 09:52:57 »

SO habs jetzt getestet und egal welche werte ich mitn poti ich einstelle er gibt mit immer
den Wert 1057 aus Schweigend !!
Hab eine 4 stellige long variable und 10bit!!
Gespeichert
Flo
Full Member
***
Offline Offline

Beiträge: 229



Profil anzeigen
« Antworten #6 am: April 10, 2006, 10:37:25 »

Poste doch bitte mal den gesamten Code oder falls er zu groß ist hänge ihn als Datei an.

Mit 10 Bit kommt man aber maximal nur auf 1023, da muss irgendwas mächtig faul sein. Ohne Code ist es halt nich möglich rückschlüsse zu ziehen.

Gruß
Flo
Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #7 am: April 11, 2006, 08:43:45 »

Also so sieht das bei mir mal aus:
Code:
switch(b) //Messung Stop
{case true: b=false;
ADC_akt = false;
wert=max-min;
printf(LCD_PUTC,"\fAuswertung:%04Lu",wert);
delay_ms(100);
break;
case false:break;
}
Hier wird der wert zuerst berechnet und dann auf dem LCD angezeigt

Code:
if(menu==30 && ADC_akt==true) //ADC Wert einlesen Auswerten??
{
Adc_Data = read_adc();
printf(LCD_PUTC,"A%04Lu",Adc_Data);
delay_ms(100);
if(Adc_Data>=max)
{ max=Adc_Data;
}

if(Adc_Data<=min)
{ min=Adc_Data;
}


}
Hier wird der wert eingelesen und anschließen oben beim beenden der Messung angezeigt
Gespeichert
Flo
Full Member
***
Offline Offline

Beiträge: 229



Profil anzeigen
« Antworten #8 am: April 11, 2006, 09:19:04 »

Wo wird denn "ADC_akt" und "b" auf true gesetzt? Sicher das der Teil mit read_adc() überhaupt ausgeführt wird?
Zeigt er 1057 denn im ersten Teil für "wert" oder im zweiten Teil für "Adc_Data" an?

Ansonsten siehts vom Code her für mich eigentlich funktionsfähig aus bis auf printf, hab das noch nie verwendet und kann dazu keine Aussage machen, aber Du sagst ja er zeigt was an also wird das wohl funktionieren.

Code: (c)
if((menu==30) && (ADC_akt==true))
So ist die Leßbarkeit vielleicht etwas besser, aber das sollte an der Funktionsfähigkeit nichts ändern.

Gruß
Flo
Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #9 am: April 11, 2006, 16:54:12 »

Also ja ich bin mir sicher

Code:
printf(LCD_PUTC,"\fAuswertung:%04Lu",wert);
diese zeile zeigt mir den wert an und dieser ist aufeinmal 1022 und somit der ganze bereich den ich mit den sensor abdecke, jedoch ist dieser immer gleich  :x :-x

MFG
Gespeichert
Flo
Full Member
***
Offline Offline

Beiträge: 229



Profil anzeigen
« Antworten #10 am: April 11, 2006, 17:07:01 »

Wenn er z.b. für "max" 1022 und "min" 0 annimmt, was durchaus realistisch ist. Dann stimmt das doch auch. Die Werte muss er ja nur einmal geschluckt haben, dannach kannst Du soviel am Poti drehen wie Du willst und es ändert sich nix mehr wenn Du nicht über "max" oder unter "min" kommst.

Wie initialisiert Du denn "max" und "min"?
Zeigt er 1022 direkt nach dem einschalten schon an, ohne das Du am Poti gedreht hast?

Zum testen würde ich vielleicht einfach mal direkt den gewandelten Wert anzeigen lassen, um festzustellen ob der ADC auch richtig arbeitet.

Gruß
Flo
Gespeichert
Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #11 am: April 13, 2006, 21:01:44 »

So also hier der Source!!
So sieht mein projekt derzeit aus und die werte die ich berechne (Auswertung) sind immer 1067 oder 1022
aber nie den wert den ich einstelle!!


MFG Readl

* USB_Menu_ADC.c (4.63 KB - runtergeladen 229 Mal.)
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #12 am: April 13, 2006, 21:34:15 »

Zitat
Code:
#use delay(clock=48000000)
...
setup_adc( ADC_CLOCK_DIV_8 );

Die TAD für den AD-Wandler ist viel zu gering. Bei 48MHz und dem gewählten Divisor von 8 sind es nur 0,167µs. Gemäß Table 28-29 im Datenblatt beträgt die minimal zulässige TAD 0,7µs. Daraus folgt, daß Du TAD auf 64xTosc einstellen mußt.

In Table 21-1 findest Du außerdem eine Übersicht über die maximal zulässigen Taktfrequenzen bei den möglichen Teilereinstellungen (die Angabe von 40MHz bei 64 Tosc im Datenblatt ist falsch und sollte 48MHz lauten).


Viele Grüße

Bernd
Gespeichert

Readl
Newbie
*
Offline Offline

Beiträge: 13


Profil anzeigen
« Antworten #13 am: April 22, 2006, 18:13:59 »

ich verstehe nicht wo ich das ändern kann  Weinen
Aber meine Auswertung funktioniert jetzt  :yahoo:!
Das war mal ein Teiler meines Projekts thx an euch kommen bald wieder mir fragen  :mrgreen:

Großes lob an die "PIC-Versteher"  Schockiert:
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.049 Sekunden mit 19 Zugriffen.
 
Top! Top!