Forum: Mikrocontroller und Digitale Elektronik adc ist sehr empfindlich (codevision)


von Goku S. (gokussj4)


Angehängte Dateien:

Lesenswert?

halo leute bin neu hier habe gleich ne frage
ich habe mit codevision den wizard benutzt um ein adc_messer
zuschreiben und den wert über den portb(8_leds) auslessen und es geht
aber er ist sehr empfindlich die leds blinkeln zuschnell  entwider ist
er sehr empfindlich oder ich lesse nur die zahlen die hinter den
(komma) sind 0,01234 (und das will ich nicht) oder was meint ihr was
soll ich jetzt machen wäre super wenn einer mir eine code gibt die
nicht so empfindlich ist oder sagt mit wie ich das machen soll (ach ja
und ich möchteihn nicht langsam machen)
ich hoffe ihr habt mich verstanden


danke imvorraus

von Peter Dannegger (Gast)


Lesenswert?

Ich habe keinen Wizzard benutzt, sondern die paar Register selber
gesetzt und den ADC-Interrupt aufgesetzt:

http://www.mikrocontroller.net/forum/read-4-210743.html#new

Ich kann nicht klagen, die Anzeigewerte stehen wie ne 1.


Peter

von Goku S. (gokussj4)


Lesenswert?

thnx aber ich glaube das ist nicht mit codevision sondern mit gcc oder?

von Goku S. (gokussj4)


Lesenswert?

also mein prob ist das ich kein genauen wert bekomme!!!!! warum
eigentich???

von Goku S. (gokussj4)


Lesenswert?

oder lige ich falsch ich bin ein anfänger

von Jnes Erwin (Gast)


Lesenswert?

Ist der Vorteiler eingesetzt/geschaltet. Der AD-Wandler kann nur bis
200kHz arbeiten, deshalb muss der Vorteiler z.B. auf 64 gestellt
werden. (8Mhz Takt / 64 = 125 kHz)

von Martin #. (martin-)


Lesenswert?

Vorteiler wird wohl damit wenig zutun haben.
@goku ssj4
Wie sieht die Schaltung aus ?
Bilnken die Dioden auch wenn du den ADC-Pin mit der Masse kurzschließt
?

von Goku S. (gokussj4)


Lesenswert?

naja es ist so
ich benutze den testboard stk200 mit atmega32 auf portb sin die leds
und die leds spielen verrückt auser wenn ich den adc_poti auf maximale
power drehe dann alle leds sind an (hi)

von Martin #. (martin-)


Lesenswert?

Eigentlich ist da was du beschreibst normal, es gelangen bestimmt
störungen an den ADC-Eingang und deshalb binkt das ganze.
Und das in deinem Progarmm keine Bremse gibt, wird der Wert so schnell
geändert wie es MCU schafft.
_Bilnken die Dioden auch wenn du den ADC-Pin mit der Masse kurzschließt
?_
Wenn ja dann gibt es eine andere Ursache. Nimm doch ein Stück Kabel und
schliesse den entsprechenden Pin an die Masse.Ist doch einfach, oder ?



>testboard stk200
Es tut mir leid ich habe es,weiss also noch wie vor nicht wie die
Schaltung aussieht, das wäre aber sehr hilfreich.


Und da ich auch ein Noob bin gebe ich die einen Rat, fange erst an im
ASM zu programieren, das ist viel einfacher und man lernt auch etwas
über Hardware-Hintergrunde und ist nicht so hilflos ausgeliefert wenn
etwas nicht läuft.
Und bloss keine  "wizards" benutzen, damit vergeudet man wirklich nur
seine Zeit.

von Martin #. (martin-)


Lesenswert?

>delay_ms(200);
Habe übersehen gibts doch ein delay, egal das mach eh nicht viel aus.

von Goku S. (gokussj4)


Lesenswert?

nein ich will delay nicht benutzen
ich habe bischen gegooglet und rausgefunden das ich den adc_10bit in 8
umsetzen soll aber die frage ist wie ich das machen soll  mit
codevision hoffe das jemanden weiter hlfen kann

von moogqai (Gast)


Lesenswert?

na durch divisionen mit 2
10 bit zahlen muss man 2 mal durch 2 dividieren ( oder einmal durch 4 )
um 8 bit werte zu erhalten den rest bekommt man durch casten ( siehe asm
grunlagen )
mfg moogqai

von Martin #. (martin-)


Lesenswert?

>ich habe bischen gegooglet und rausgefunden das ich den adc_10bit in 8
umsetzen soll

Um was damit zu erreichen ?
Du wolltest doch dass die LEDs nicht so sinnlos blinken.

Es tut mir leid aber ich habe das gefühl das du meine Beiträge nicht
liest. Naja egal.

von Peter Dannegger (Gast)


Lesenswert?

"thnx aber ich glaube das ist nicht mit codevision sondern mit gcc
oder?"


Ja, aber das tut doch nichts zur Sache.

Der einzige Unterschied ist die Deklaration eines Interrupt-Handlers,
und wenn Du schon mal in Codevision einen Interrupt benutzt hast,
sollte nichts daran schwierig sein.

Und der Rest ist pures ANSI-C, d.h. 100% portabel.


Peter

von crazy horse (Gast)


Lesenswert?

Prinzipiell hast du schon mal +/- 1bit, also das LSB kann schwanken.
Dazu kommen dann Störungen auf dem Signal, der Referenzspannung und dem
Massepotential. Kann durch das Signal selbst (Rauschen, induzierte
Störungen, Versorgung der Signalquelle)oder durch den MC  (arbeitet ja
immerhin mit ein paar MHz) eingekoppelt werden.
Ein paar einfache Regeln:
-ordentliches Layout
-Entkopplung Vcc, AVcc, Gnd, AGnd, Vref
-eine Kapazität am Analogeingang (bei 200ms Abtastzyklus kannst du da
locker 100nF ranpacken)
Man kann mit dem AVR wirklich erstaunlich genau messen, dazu muss aber
das Umfeld stimmen. Kommt es auf das letzte Bit an, den MC schlafen
legen, siehe Atmel-Appnotes.

Dann gibts noch die Software-Hilfsmittel: mehrfach messen, Mittelwert
bilden, in deinem Fall beispielsweise alle 20ms messen, die 10
Messwerte in ein Array packen (neuer Wert schmeisst ältesten raus),
alle addieren und durch 10 teilen. Sollte recht ruhig sein. Gibt noch
deutlich intelligentere Verfahren, das sollte aber erstmal reichen, um
8bit ruhig zu stellen :-)

In 1.Linie aber das Übel an der Wurzel packen, siehe oben.

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.