www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik digitalfunke mit PIC und ADC


Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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?

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>recht stabil sein
poste mal die komplette Schaltung, mit allen Bauteilen (Block-Cs)

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mehr is nich dran an der schaltung ><

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da kann ja nichts glätten. An JEDES Betriebsspannungs-Masse-Pin-Paar 
gehört ein 100nF Kondensator. Direkt an den µC

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :\

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>LF 33 CV

Wie wird der am Eingang versorgt?

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>konstant 3.30V

Hast du das mit einem Multimeter oder einem Oszi gemessen?
Ein Multimeter ist für solche Betrachtungen nämlich ungeeignet...

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab leider kein oszi ;\

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ><

Autor: Olli R. (xenusion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Oszi, und da nimmst Du Dir so ein Projekt vor?

Abgesehen davon, das Ganze ist sowieso akademisch, da Du die "Funke" - 
sollte sie irgendwann funktionieren - ohnehin nie in Betrieb nehmen 
darfst.

Autor: Mätte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso willst du für ein ferngesteuertes Auto das Poti genauer 10mV 
auslesen, brauchts das so genau ?

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Kall Heinz (kned)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: morph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.