-
wow das ist ja ein File da werde ich ne weile brauchen um durchzublicken so wie ich das sehe ist es für eine andere Anwendung geschrieben der Analogport wird dort auf den ersten Blick nicht einbezogen aber mal sehen ob ich was drauß machen kann.
Dank dir Mosi für deine Hilfe
Gruß
Steffen
-
Ist eigentlich nicht so schwer:
Bl ist die Anzahl der Stützstellen, je nach gewünschter Auflösung aus dem Atmel-Dokument entnehmen,
die Random Funktion soll in diesem Beispiel zufällige Messwerte liefern, natürlich komplett weglassen, dafür die Zeile
Value = Random(&H0f)
ändern in
value= Get ADC
Initialisierungen und Deklarationen nicht vergessen, schon läufts!
Wenn du das Programmfragment nochmal in eine Schleife mit den gewünschten ADC-Kanälen legst, hast du als Ergebnis ein Feld mit Analogwerten genauer als 10bit.
Habe übrigens oben einen Fehler gemacht: Wenn man durch die Anzahl der Stützstellen teilt, hat man ja nur den Mittelwert ohne höhere Auflösung,
man muss bei 4Stellen eine Stelle nach rechts schieben, bei 16 - 2 Stellen, bei 64- 3Stellen usw. so erhält man dann natürlich die hohen Auflösungen.
Einziger Hardwareaufwand ist das Bereitstellen eines Rauschens, das soll auch mit dem AVR selbst gehen, bin aber im Moment überfragt...
Gruß, Rene
-
Ich nochmal,
es geht auch wesentlich einfacher, eine gleitende Mittelwertbildung ist gar nicht notwendig.
Einfach in einer Schleife, die je nach gewünschter Auflösung entsprechend viele Male durchlaufen wird, also z.B. bei 12bit 16Mal, die Summe aus den ADC-Werten bilden, am Ende durch 4 teilen, bzw. shift,right,2 (das ist das gleiche, geht aber viel schneller) fertig! Das Ergebnis hat eine 4fach höhere Auflösung, also 2bit mehr
Gruß, Rene
-
Hi zusammen,
es gibt sonst auch PIC mit mehr bit auflösung. ich weis die meisten hier haben ein problem mit pics aber man könnte auch ein i2c device selber entwickeln. zB PIC18F2423 ist so einer. ca 12 AD-Inputs mit 12 Bit auflösung so viel ich weis.
mfG munkl
-
@munkel
naja einen einfachen Sprut ICSP Brenner habe ich mir schon gebaut aber ich habe noch nie mit Microchip² Produkten gearbeitet und wüßte nichteinmal welche Software ich benötige.
@mosi
cool danke das versuche ich morgen einmal. Was ich mir ausgerechnet habe ist das mir 12 Bit eigentlich schon reichen würden je mehr desso besser aber 12 Bit wäre auch ok.
Da teste ich morgen mal dein Vorschlag und melde mich dann wenn ich es hinbekommen habe.
Gruß
Steffen
-
hm also eigentlich ist ein PIC programieren so einfach wie ein atmel auch. was du brauchst ist ein kompiler: für C würd ich den C18 vorschlagen, da CCSC kostet
und dann brauchst du noch die brennsoftware von sprut.
ja die sprut brenner find ich auch klasse :) ich hab den 5er und den 8er im einsatz ;)
-
Bei 12 bit musst Du, wenn Du diese auch nutzen willst, bereits ein geeignetes Layout und entsprechende Schaltungsauslegung berücksichtigen. Sonst bleiben von den Bits wieder nur 8-10 übrig.
-
Der ADuC7026-ARM-Controller von Analog Devices hat einen 12bit-10Kanal-ADU intern.
Blackbird
-
@shaun
ich habe das RN-Control.
Meinst du ich muß es modifizieren um mit 12 Bit arbeiten zu können ?
https://www.roboternetz.de/wissen/index.php/RN-Control
Ich wollte mir wegen der zuwenigen ADC Ports dann den ATMEGA256 holen der Hat glaube 16 ADC´s. Aber das sind alles fertige Boards wo man doch im normalfall nichts mehr machen muß oder täusche ich mich ?
@Blackbird
der ADUC7026 ist beindruckent.
Serial Interface Ports (UART, SPI, and dual I2C) und 12-Channel, 1 MSPS, 12-Bit ADC. Den muß ich mir genauer anschauen ich hoffe das es den auch irgendwo zu kaufen gibt.
Wenn man einen Max232 anbaut könnte er dann sicher über RS232 kommunitieren. Der wäre spitze :-) Oder ich versuche über I2C anzubinden das erscheint mir einfacher.
Gruß
Steffen
-
mhh bis jetzt konnte ich nur Preise von über 300€ für den ADUC7026 finden und erhältlich ist er sogut wie nirgends.
So ich habe nun mal versucht das mit diesem 12 Bit hinzubekommen aber leider fehlen mir die Kenntnisse um es zu schaffen.
Ich habe mein normales Programm erstmal mit
do
loop until endwert = 16
ausgestatt dann hab ich erstmal eine Schleife die 16 mal zählt nur wie bekomme ich nun die Summe aus der sich in der Schleife befindlichen Meßwerte ?
Hier ist mein Quellcode :
Code:
$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 38400
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Dim Endwert As Single
Endwert = 0
Do
Dim Volt_a As Single
Dim Volt_b As Single
Dim Volt_c As Single
Dim Volt_d As Single
Dim Volt_e As Single
Dim Volt_f As Single
Dim Volt_g As Single
Dim Volt_h As Single
Const Ref = 5 / 1023 'Für Berechnung
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word
Dim E As Word
Dim F As Word
Dim G As Word
Dim H As Word
Config Porta = Input ' Port A als Anlogeingang konfigurieren
Start Adc '
A = Getadc(0)
B = Getadc(1)
C = Getadc(2)
D = Getadc(3)
E = Getadc(4)
F = Getadc(5)
G = Getadc(6)
H = Getadc(7)
'Bit Auflösung in Volt umrechnen
Volt_a = A * Ref
Volt_b = B * Ref
Volt_c = C * Ref
Volt_d = D * Ref
Volt_e = E * Ref
Volt_f = F * Ref
Volt_g = G * Ref
Volt_h = H * Ref
' Varible als String mit 6 Zeichen definieren
Dim Volt_a_2kommastellen As String * 5
Dim Volt_b_2kommastellen As String * 5
Dim Volt_c_2kommastellen As String * 5
Dim Volt_d_2kommastellen As String * 5
Dim Volt_e_2kommastellen As String * 5
Dim Volt_f_2kommastellen As String * 5
Dim Volt_g_2kommastellen As String * 5
Dim Volt_h_2kommastellen As String * 5
'STR() convert a numeric value into a string
Volt_a_2kommastellen = Str(volt_a)
Volt_b_2kommastellen = Str(volt_b)
Volt_c_2kommastellen = Str(volt_c)
Volt_d_2kommastellen = Str(volt_d)
Volt_e_2kommastellen = Str(volt_e)
Volt_f_2kommastellen = Str(volt_f)
Volt_g_2kommastellen = Str(volt_g)
Volt_h_2kommastellen = Str(volt_h)
' Fusing minmize to 2 decimal places
Volt_a_2kommastellen = Fusing(volt_a , "#.###")
Volt_b_2kommastellen = Fusing(volt_b , "#.###")
Volt_c_2kommastellen = Fusing(volt_c , "#.###")
Volt_d_2kommastellen = Fusing(volt_d , "#.###")
Volt_e_2kommastellen = Fusing(volt_e , "#.###")
Volt_f_2kommastellen = Fusing(volt_f , "#.###")
Volt_g_2kommastellen = Fusing(volt_g , "#.###")
Volt_h_2kommastellen = Fusing(volt_h , "#.###")
Print ";" ; Volt_a_2kommastellen ; ";" ; Volt_b_2kommastellen ; ";" ; Volt_c_2kommastellen ; ";" ; Volt_d_2kommastellen ; ";" ; Volt_e_2kommastellen ; ";" ; Volt_f_2kommastellen ; ";" ; Volt_g_2kommastellen ; ";" ; Volt_h_2kommastellen ; ";" ; "0.00" ; ";" 'Ausgabe aller 8 Analogausgänge + 1x Dummy da der letzte Wert im Excel durch den Zeilenumbruch nicht bearbeitet wird
Waitms 120 ' 120ms bis zur nächsten aktualisierung - Zu schnelle Aktualisierung -> Controller hängt sich auf
Loop Until Endwert = 16 'ende der Schleife
Das gesamte Programm macht nichts weiter als wie die ADC Werte aller 8 Ports meines ATMEGA 32 einzulesen und diese auf RS232 auszugeben und das leider nur in 8 Bit :-(
Gruß
Steffen