PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : a/d wandler programmieren



elektropro
04.04.2007, 20:14
hallo zusammen!!
vielleicht kann mir einer von euch helfen??
ich suche ein befehl das ab einer bestimmten voltanzahl z.B. ab 4 volt ein anweisung ausgeführt wird.
ich hörte was von a/d wandler, das der analoge in digital umwandelt. aber ich bekomme das mit bascom einfach nicht hin.
Liar
mein versuch war:
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Pina.5 As Byte
W = Getadc(pina.5)
Incr Pina.5
If Pina.5 > 4(volt)Then
Gosub 2
End If
Loop
End

ich hoffe um hilfe. :
http://www.david-schleicher.de/

Jon
04.04.2007, 20:22
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word
W = Getadc(<ADC an dem spannung rein kommt (1,2,3,4,5,6,7,8...>)
If W > xxx
Gosub 2
End If
Loop
End

Musst den entsprechenden Kanal für den ADC einstellen und dann den ADC-Wert für 4Volt herausfinden.

jon

elektropro
04.04.2007, 21:48
hallo!!
danke für die antwort!!
nur wie bekomme ich den adc wert für die 4 volt heraus??
gibt es da ne formel oder so??

david
http://www.david-schleicher.de/

Jon
05.04.2007, 07:56
Ein Digit entspricht 4,88mVolt.
Also sind 4Volt ca. 820.

jon

mat-sche
05.04.2007, 08:17
Moin at all,

nun da hab ich mir doch ein Kopf gemacht und da war doch der Jon schneller :) !

Wollt Dir, elektropro, noch sagen, dass der interne DA-Wandler bei 10 bit eine Auflösung von 1023 hat. Bei einer Ref. Spannung für die A/D-Wandlung von 5V entspräche das einem mathem. 204,6mV pro Schritt.
Also 204,6x4= 818,4, besser ist dann aufzurundendas Du somit nicht mit Kommastellen rechnen musst!

Viel Spass und gutes Gelingen!!!


MAT

mat-sche
05.04.2007, 08:19
Moin at all,

nun da hab ich mir doch ein Kopf gemacht und da war doch der Jon schneller :) !

Wollt Dir, elektropro, noch sagen, dass der interne DA-Wandler bei 10 bit eine Auflösung von 1023 hat. Bei einer Ref. Spannung für die A/D-Wandlung von 5V entspräche das einem mathem. 204,6mV pro Schritt.
Also 204,6x4= 818,4, besser ist dann aufzurundendas Du somit nicht mit Kommastellen rechnen musst!

Viel Spass und gutes Gelingen!!!


MAT

Jon
05.04.2007, 08:20
Wie kommst du auf 204,6mV pro Schritt? Hab ich mich verrechnet?? Wie hast du das gerechnet?
Aber auf das selbe Ergebnis komme ich trotzdem. 8-[
Hab nur etwas aufgerundet. O:)

jon

mat-sche
05.04.2007, 08:53
@ Jon,

na ganz einfach! Bei einer Ref. von 5V und einem 10 bit D/A ergibt bei 1023 / 5V = 204,6 mV pro Digit.

Eine andere Form wäre eine Verhältnisgleichung mit gleicher Lösung.

So jetzt wiesst du es :)

Schönen Tag Euch

MAT

Jon
05.04.2007, 08:56
achso.
Ich habe 5/1023 gerechnet und um dann die 4 Volt raus zu kriegen 4/0,00488 gerechnet.

jon

Sauerbruch
05.04.2007, 11:43
Als alter Mathe-Nachhelfer kann ich Euch beruhigen, Ihr habt beide Recht:

@ MAT: Der Ansatz 1023 / 5 liefert als Ergebnis zwar 204,6, die Einheit ist aber logischerweise Digits/Volt. Eine Spannung vin 1 Volt liefert 204,6 (also 205) Digits.

@Jon: Andersrum ergibt 5 / 1023 = 0,00488, das sind aber nun Volt/Digit. Ein Digit entspricht also 0,00488 Volt.

1 Volt = 205 Digits bzw. 1 Digit = 0,0048 Volt - vom Ergebnis ist das genau das gleiche. Im Zweifel helfen die Dimensionen weiter - die sind unbestechlich und müssen IMMER stimmen - sonst ist der Ansatz falsch!

Gruß & Co,

Daniel

elektropro
05.04.2007, 21:32
hey danke!!!
leider funktioniert es bei mir immer noch nicht. ich weiße es nicht ob es an der programmierung oder an der hardware liegt.
ich wollte mein roboter fernsteuren. dazu verwende ich eine fernsteuerung und das funkboard eines helikopters. ich verbinde den pin der motoransteuerung des helikopters mit dem adc5 pin meines atmega32.
wenn ich bei der fernsteuerung gas gebe, soll sich der roboter nach vorne bewegen. das board des helikopters verwende ich mit einer 4.5 volt batterie und das hauptboard mit dem atmega32 mit 8 volt.
meine frage: kann der atmega32 die spannung an dem pin adc5 überhaupt messen wenn der atmega32 mit einer anderen spannungsquelle betrieben wird als das funkboard des helikopters???

ganzen programm:

[/code]Declare Sub 1()
Declare Sub 2()
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config Pinc.6 = Output
Config Pinc.7 = Output
Config Pind.4 = Output

Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pind.5 = Output
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02

Config Adc = Single , Prescaler = Auto
Const Adc = 4.5 / 1023

Sub 1()
Portc.6 = 0
Portc.7 = 1
Portd.4 = 0

Portb.0 = 1
Portb.1 = 0
Portd.5 = 1

Start Adc
Dim Z As Word
Z = Getadc(5) '5 ist der pin adc5 des atmega32
If Z > 909 Then 'also wenn mehr spannung als 4 volt(909)anliegt dann soll es die motoren starten
Do
Pwm1a = 1023
Pwm1b = 1023
Loop Until Z < 100 'er soll es solange ausführen bis an pin adc5 weniger als ungefähr 0.44 volt anliegt
End If



If Z < 100 Then ' wenn weniger als 0.44 volt anliegt dann soll er die motoren still legen
Do
Pwm1a = 0
Pwm1b = 0
Loop Until Z > 909 ' er soll die motoren stoppen bis an pin adc5 mehr als 4 volt anliegen
End If
End Sub[/scroll]

david
http://www.david-schleicher.de/

wkrug
05.04.2007, 23:01
Moment mal,

normale Flugsteller verwenden im Normalfall eine Pulsbreitensteuerung.
Das bedeutet, das hier nicht wirklich eine analoge Spannung anliegt, sondern zwischen voll an und voll aus hin und her geschaltet wird, sodass im Mittel dann die Spannung rauskommt, die der Motor kriegen soll.


Es kommt also darauf an, wann dein A/D Wandler seine Messung macht.
Und er wird dann immer entweder 0V oder 5V messen.

Wenn Du ohnehin den Motor über den Controller ansteuerst, warum gehst Du dann den Umweg über den Steller und wertest nicht gleich das Servosignal vom Gaskanal aus ?
Wie das geht könntest Du Dir mal bei www.rclineforum.de im Elektronik Teil unter BASCOM Programmierung anschauen.
Wenn das nicht möglich ist, weil bei deinem Board alle Komponenten auf einer Platine sind, solltest Du mit einem RC Glied wieder eine analoge Spannung aus dem PWM Signal zurückgewinnen. Die kannst Du dann auf deinen A/D Wandler geben.
Um welches Hubschrauberboard handelt es sich denn ?
Die Leutchen aus der Modellbauecke haben da schon so einiges gebastelt.

elektropro
07.04.2007, 10:14
also das forwärts fahren klappt jetzt gut.
aber ich wollte noch fragen kann der atmega 32 noch ungefähr 40-60 mV messen.
wenn ich eine refenenzspannung von 2.3 volt habe dann müssten 40-60 mV ungefähr 18-34 digit sein.
wollte mal fragen ob des richtig ist.

david
http://www.david-schleicher.de/

elektropro
07.04.2007, 10:22
bei dem hubschrauber board handelt es sich um ein walkera rc model.
so ein kleiner für anfänger. das board steuert 2 servos und zwei motoren an.
es ist so: ich habe einmal ein board mit dem atmega 32 selber gebaut und einmal das board des hubschraubers.
aber wie ich das signal gleich mit dem atmega 32 auswerten kann weiß ich net
wie das geht. wkrug danke für dein link ich werde mal schauen.
http://www.david-schleicher.de/