digitalfunke mit PIC und ADC

OP #966915
Hi Leute

Da digitale Funken (zum steuern von rc cars) recht teuer sind, dacht ich 
mir - mach ich selbst!

Jetzt hab ich eine alte funke bei ebay bestellt, den analogkram 
rausgeschmissen und nurnoch die potis drin gelassen

Ich möchte mit dem ADC meines pic16f877a die spannung an den potis 
ablesen, um damit die Knüppelstellung ermitteln zu können, allerdings 
schwanken die werte des ADC verdammt stark:

2,316 V
2,402 V
2,379 V
2,346 V
2,468 V

laut multimeter sinds 2.31V

Die Schaltung sieht so aus:

LF 33 CV (3.3v festspannungsregler) -> microchip
              |                          |
              |                         ADC
              |                          |
              1k ----------------------------- poti (2k-3k) ---- | GND
                                         |                    |
                                          ------| |-----------
                                                100nF
quellcode mit CCS C:

         setup_adc_ports( ALL_ANALOG );
         setup_adc(ADC_CLOCK_INTERNAL );
         set_adc_channel( 0 );
         delay_us(20);
         value = read_adc();

sitzte jetzt schon 3 std dran, aber die schwankungen werden nicht 
weniger ... hat wer ne idee?
Gast #966924
>delay_us(20);

Da scheinst du ganz schön zittrige Hände zu haben.

Wie wäre es mit:
- eine kleinen C parallel zur Ref-Spannng?
- ein kleines Mittelwert/Tiefpassfilter in der Software?
- langsamere Abtastung? oder brauchst du 50'000 Samples pro Sekunde?
OP #966928
schonmal danke für die antwort :D

hier nochmal der ganze QT


         setup_adc_ports( ALL_ANALOG );
         setup_adc(ADC_CLOCK_INTERNAL );
         set_adc_channel( 0 );
         delay_us(20); // warten bis adc bereit

         value = read_adc(); // 4 mal lesen
         value += read_adc();
         value += read_adc();
         value+= read_adc();

         value/=4;

         value=(value*33)/10;

         printf("%Ld \n\r", value);
         delay_ms(500);

Als Vref nutz ich VDD vom PIC, die sollte ja eigentlich durch den 
festspannungsregler recht stabil sein ?
Gast #966947
Durchdem daß du vcc als VREF nimmst, glättest du die automatisch mit
dem Kondensator des uC, das dir dann warscheinlich die wechselnden Werte 
verursacht. Versuch es mal, Vref extern zu beschalten.
OP #966964
Matthias Lipinsky wrote:
> Da kann ja nichts glätten. An JEDES Betriebsspannungs-Masse-Pin-Paar
> gehört ein 100nF Kondensator. Direkt an den µC


eingebaut, Vref extern verschaltet, keine verbesserung :\
OP #967003
5v geregeltes netzteil...

hab mal die verschiedenen spannungen am PIC gemessen:
am ADC pin, an dem der poti hängt ist die spannung konstant 2.31V
an den nicht angeschlossenen ADC pins schwankt die spannung: 0.17V-0.20V
am VDD pin vom PIC ist die spannung auch konstant 3.30V
Gast #967032
>konstant 3.30V

Hast du das mit einem Multimeter oder einem Oszi gemessen?
Ein Multimeter ist für solche Betrachtungen nämlich ungeeignet...
OP #967188
hmm .. bischen komisch

mit dem QT:

         setup_adc_ports(ALL_ANALOG);
         setup_adc(ADC_CLOCK_INTERNAL );
         set_adc_channel( 0 );
         delay_us(20);
         value=0;
         for(i=0;i<64;i++) {
            value += read_adc();
         }
         value/=64;
         setup_adc( ADC_OFF );

         value=((value*33)/10)>>2;
         value*=4;

         printf("%Ld \n\r", value);
         delay_ms(500);

(64 messungen und letzten 2 bits weggeschmissen)

gibts einigermaßen gute werte...

2,372 V
2,384 V
2,372 V
2,376 V

aber da muss doch mehr gehen ><
#967960
vielleicht liegts auch einfach daran, dass du den PIC ausserhalb der 
spezifikation betreibst:
PIC16F877  braucht 5.0V
PIC16LF877 kannst du mit weniger betreiben (glaub so bis 2V)

ps: digitale "Funke" (ich nehme an, damit meinst du fernsteuerungen), 
senden das signal für die servos eben digital und nicht analog. was du 
das machen willst - soweit ich verstanden habe - ist die poti-stellung 
mit dem PIC auslesen und dann wie versenden? der empfänger müsste dann 
auch ein digitaler empfänger sein, oder hat dein auto noch einen 
analogen?
OP #968109
soo .. stimmt schon, die 10mv genauigkeit reichen eigentlich vollkommen.
nachdem ich heute morgen den vorwiderstand etwas modifiziert hatte war 
der spannungsunterschied zwischen min und max stellung größer 
ausgefallen als erwartet

ich werfe jetzt die letzten 3 bits weg und komm damit auf eine 
genauigkeit von 100 LSB von min zu max, wenn sich ne fliege auf den 
knüppel setzt zeigt er 1 an O.O xD

zum funken werde ich die zigbit amp 2.4 ghz von meshnetics benutzen die 
vor mir liegen 8)  - die haben mit 10mW ausreichende reichweite

später kommt noch ein S65 lcd dran und das ding ist besser als die 
meisten gekauften xD
Gast #968351
was ähnliches hab ich meiner funke spendiert, allerdings nur ein 
RFM12B868 für einen rückkanal vom modell :)

solange man den HF-teil fertig nimmt seh ich kein problem beim betrieb

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.