PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Je mehr ich Lese desto mehr komme ich mit dem durcheinander



becki133
03.07.2008, 23:10
Hallo ,

Also meine frage ist wievile Messungen mit dem ADC 1 kann ich
in 0,1 Ms machen .

Mein Problem ist eigentlich einfach glaube ich .
Ich möchte nach dem Abschalten eines Portes
die Entladung einer Spule Messen .
jetzt möchte ich das er bei 2,5 V oder etwas Tiefer einen Prozess anstößt .
Aber leider mißt er so selten das er erst bei ca 1 V ein Meßergebniss hatte.
Die Entladung dauert laut meines Oszis 0,1 Ms .
Aber ich komme nicht über 4 Messungen .
OK ich benutze bei jedem durchlauf den PRINT Befehl das Bremst bestimmt .

Dann habe ich es mal Versucht den Print hiner einer if Schleife zu legen.

If adc <= 300 then Print adc end if
aber da kammen auch immer andere Werte Raus .
Zwischen 50 und 200

Jetzt möchte ich einfach nur wissen
was ist die Schnellste Methode um mit dem ADC zu Messen ?

Ich habe einen Mega8 mit externen 12MhZ
der Prescaler ist auf AUTO eingestellt .
Oder macht es mehr sinn ihn fest einzustellen ?
Den High speed mode habe ich auch an hoffe ich.( set sfior.adhsm)
Oder müßen da noch andere einstellungen sein ?

Gruß Holger

fhs
03.07.2008, 23:38
Hallo Holger,


Also meine frage ist wievile Messungen mit dem ADC 1 kann ich in 0,1 Ms machen .

die schnellste A/D-Wandlung beim ATmega8 dauert 13 A/D-Zyklen. Falls Du die A/D-Wandler-Frequenz auf 200kHz einstellst, dauert eine Wandlung 65μs, Du schaffst also eineinhalb Messungen in 0,1ms. Für < 10-Bit-A/DC kannst Du die A/DC-Wandler-Frequenz auch erhöhen.


Ich habe einen Mega8 mit externen 12MhZ der Prescaler ist auf AUTO eingestellt .
Wovon Du hier sprichst, verstehe ich nicht. Der ADC-Prescaler lässt sich nur in Stufen (CK/2, CK/4, ...CK/128) einstellen, "AUTO" gehört nicht dazu.

Kann sein, dass Du von Bascom-Einstellungen sprichst, von denen ich nichts verstehe, da ich kein Bascom kann. Ich gehe nur von den Möglichkeiten des ATmega8 aus.

Viele Grüße

Fred

radbruch
04.07.2008, 03:11
Hallo

Zu den Samplezeiten der ATMegas:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=33070
Das dürfte für deine Spule reichen...

Hab' ich mal für ein eigenes Projekt erforscht:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=33228
(Im Thread ist ein Nachbau mit einem Mega8 beschrieben.)

Gruß

mic

Felix G
04.07.2008, 08:19
jetzt möchte ich das er bei 2,5 V oder etwas Tiefer einen Prozess anstößt.Wenn das alles ist, warum nimmst du dann nicht den analogen Komparator?

Der kann dir einen Interrupt erzeugen, sobald die Spannung einen bestimmten Wert erreicht. Du musst nur am einen Eingang deine zu messende Spannung und am anderen Eingang eine Referenzspannung (in deinem Fall 2,5V) anlegen.

Ich jedenfalls würde, wenn ich die Zeit messen wollte bis eine bestimmte Spannung erreicht ist, den Port abschalten und sofort danach einen Timer los rennen lassen (sofern noch einer verfügbar ist). Dann muss wenn der Interrupt vom Komparator kommt nurnoch der Zählerstand des Timers ausgelesen werden.

PicNick
04.07.2008, 08:51
Und nicht vergessen: bei 9600 Baud dauert der Print von einem Zeichen ~ 1 mS also wenn ein Zeichen + CRLF -> 3 Zeichen dann sind 3 mS weg

becki133
04.07.2008, 10:37
Hallo
Danke für die vielen schellen Antworten .

Einer meiner größten fehler war bei mir im Kopf .


die schnellste A/D-Wandlung beim ATmega8 dauert 13 A/D-Zyklen. Falls Du die A/D-Wandler-Frequenz auf 200kHz einstellst, dauert eine Wandlung 65μs

Ich habe zwar zigmal die 200KHz gelesen habe aber immer
mit meinen 12MHz Quarzfrequenz gerrechnet beim überschlagen wie
wie oft er messen kann ](*,)
ABer da kommst du echt auf tolle Werte O:)

@ fhs
Ja es ist eine Bascom einstellung .
da Berrechnet er den Prescaler selber .

@ Felix G
Dann werde ich mir mal den Analog Komparator anschauen .
Werde aber erstmal gegen GND messen
Muß dann nochmal meinen Vorteiler überdenken
Der ist zurzeit 11:1 da kommt bei 5V nicht viel durch .
Oder ich erhöhe die Spannung zum Messen .

Bin auch am überlegen ob ich den Chip wechsel
Irgendwas mit mehr 16 Bit Timer und mehr Komparatoren .
Muß mich mal bei Atmel umsehen was da Passt .

@ PickNick
Sehr interessant mit den Laufzeiten des Print Befehls
habe ich noch nie Drüber nachgedacht .
Und ich bin sehr Großzügig mit dem Ausschmücken des Befehls.
Werde es wohl auch in anderen Projekten mal überarbeiten .

@radbruch
Werde ich mir mal alles durchlesen .

Gruß becki

radbruch
04.07.2008, 13:29
Werde ich mir mal alles durchlesen.
Ist nicht nötig. Es wird nur gezeigt, dass der ADC durchaus auch im Bereich einiger µs wandeln kann.

s.o.
05.07.2008, 08:44
Mal eine Querdenkerfrage: Brauchst du wirklich einen Adc, oder reicht es wenn sich ein pin ändert, wenn die Spannung unter x geht. Dann hätte ich eine Lösung. Nutz den internen AC(Analog Comparator), der bietet zugar meistens ein Interrupt bei Pinänderung.

Nochwas: Wer sich bei Bascom über die Geschwindigkeit beschwert, ist selber schult, da Bascom nicht das Ziel hat wie C schnell zu sein, sondern einfach. Weitere Infos dazu gibt es übrigens im Wiki unter Codevergleich...

becki133
05.07.2008, 09:14
Hallo S.O.

Ja ich werde auch den Komparatot benutzen .
Denn ich will ja nur das sich ein Pin ändert wenn eine
Spannung unterschritten wird .

In diesem Fall würde ich sagen ist die Sprache egal
denn der ADC wird einfach nicht schneller .


Gruß Holger

s.o.
05.07.2008, 14:39
Freut mich, dass Du meine Lösung nimmst.

Zur Sprache: Die Sprache ist - wie das Betriebssystem - ein Glaubensfrage. Klar geht das Hardware gleich schnell, nur die Verarbeitung hat deutliche Unterschiede. So kann Bascom nicht - wie der Gcc - mit Registern arbeiten, sondern legt alles immer ins RAM. Und jeder Ramaufruf kostet 2 Clocks. Macht im krassesten Fall (2(load) + 2(store) + 1(bearbeiten) 4 Clocks Differenz aus. Ich will jetzt aber nicht vom Thema abschweifen. Ich bin halt "überzeugter" "GCC"er. Wenn es dich interessiert, schau dir im WIki mal den Codevergleich an...
http://209.85.135.104/search?q=cache:ST6E6YcNFa4J:www.roboternetz.de/wissen/index.php/Codevergleich_AVR-Compiler+rn+wissen+codevergleich&hl=en&ct=clnk&cd=1&client=iceweasel-a