PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Getadc



michi73
29.04.2005, 19:10
Kann mir einer weiterhelfen!
Leider kann ich seit kurzen mit diesem Programm nicht mehr auf den AD-Wandler von meinem ATMEGA8 zugreifen.
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config Adc = Single , Prescaler = Auto

Dim W As Word , Kanal As Byte

Kanal = 0

Do

W = Getadc(kanal)

Print " Kanal " ; Kanal ; " Wert " ; W

Loop

End

Mit einem anderen Beispiel aus dem Buch von Roland Walter klappt es jedoch.
Vor einiger Zeit hat mein eigenes Programm noch funtioniert leider weiss ich nicht was ich verstellt habe.
Es währe schön wenn jemand mir hierbei Helfen könnte!
Danke
Michael ](*,)

uwegw
29.04.2005, 19:23
wie wärs mal mit
start adc
bevor du mit dem messen anfängst?

michi73
29.04.2005, 19:29
Sorry hatte ich vergessen!!!
Aber funktioniert trotzdem nicht zeigt nur max Wert von 1023 an. Kann nicht verändert werden durch andere Poti Stellung

PicNick
29.04.2005, 19:33
Klingt, als ob das Poti keine GND-Verbindung hätte.

michi73
29.04.2005, 19:33
Ich hatte schon ein Funtionierendes Programm mit mehreren AD-Eingängen das Funtioniert hat. Leider zeigen die alle auch nur noch max Werte an. Hatte kurzzeitig Update auf BasCom 1.11.7.8 gemacht wegen Programm-Größen Probleme. Habe dies wieder rückgängig gemacht aber trotzdem funktioniert es nicht mehr

uwegw
29.04.2005, 19:35
ist dein kanal der richtige? und ist die hardware ok?

michi73
29.04.2005, 19:35
Wie gesagt die GRD-Verbindung ist Gut da ein anderes Programm von Roland Walter funtioniert. Leider mit anderen Befehlen ADMUX und ADCSR usw.

michi73
29.04.2005, 19:40
Es sind nur zwei verschiedene Arten den AD-Wandler abzufragen. Wobei beiden funktioniert haben, jetzt leider nur noch eine.
Leider ist die Abfrage von mereren Kanälen bei Roland Walter nicht so gut erklärt. Deshalb habe ich es mit Getadc probiert.

michi73
29.04.2005, 19:45
Habe nochmal mein Original Programm was funktioniert hat beigefügt.


$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400
$baud = 9600

Dim A As Word
Dim B As Single
Dim C As Single
Dim D As Single
Dim Channel As Byte




Config Adc = Single , Prescaler = Auto
Start Adc

Do
If Channel = 0 Then D = 9.775171
If Channel = 1 Then D = 0.293255132
If Channel = 2 Then D = 1.9550342
If Channel = 3 Then D = 1.1730205

A = Getadc(channel)
B = A * D
C = Round(b) / 100
Print C;
If Channel = 0 Then Print " Grad,";
If Channel = 1 Then Print " Ampere(3A),";
If Channel = 2 Then Print " Ampere(20A),";
If Channel = 3 Then Print " Volt,";
Incr Channel
If Channel > 3 Then Channel = 0
Waitms 200

Loop


müßte eigendlich so klappen!!

Und jetzt nicht mehr?????? [-o<

michi73
30.04.2005, 12:31
Ich habe es nun noch einige male Versucht aber es klappt einfach nicht mehr.

Habe das Programm von Roland Walter für meine Zwecke leicht umgeschrieben

Wenn ich nur ein Kanal Abfrage zeigt er mir den richtigen Wert an,
sobalt ich das Programm auf zwei Kanäle erweitere Vertausch er mir die Ergebnisse?????

Warum???



$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Quarz: 3,6864 MHz
$baud = 9600 'Baudrate zum PC: 9600 Baud

Dim A As Word
Dim B As Byte


Ddrc = &B00000000 'PC7...PC0=0: PortC-Pins auf Eingang
Admux = &B01100000
Adcsra = &B11100010

Do

B = 0
Admux = &B01100000
'Adcsra = &B11100010
A = Adch
Print "Kanal " ; B ; "= " ; A ; " - ";

Waitms 1000

B = 1
Admux = &B01100001
'Adcsra = &B11100010
A = Adch
Print "Kanal " ; B ; "= " ; A ; " - ";

Waitms 1000

Loop

michi73
03.05.2005, 20:19
In dem Forum habe ich einen Beitrag gefunden unter:
RoboterNetz.de Foren-Übersicht » Microcontroller und Computer Foren » AVR Basic-Programmierung mit Bascom
Atmega8 ADC unter Bascom

Er hatte das gleiche Problem wie ich er hatte angeblich die Hardware getausch, habe ich auch alles gemacht leider immer mit dem gleichen Ergebnis. Und das unabhängig mit drei Verschieden Experimentierboards.

Aufgrund das ich immer noch keine Lösung meines Problems gefunden habe habe ich das Programm von Roland Walter noch weiter verändert.Jetzt funktionieren alle Kanäle aber auch hier sind die Kanal irgendwie vertauscht.



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600


Dim Channel As Byte
Dim Adwert As Byte
Dim Faktor As Single
Dim Ergebnis As Single

Do

For Channel = 0 To 3

Admux = &B01100000 Or Channel
Adcsra = &B11100010
Adwert = Adch

If Channel = 0 Then
Faktor = 12 / 255
Ergebnis = Faktor * Adwert
Print "U:" ; Fusing(ergebnis , "##.#") ; "V,";
End If

If Channel = 1 Then
Faktor = 100 / 255
Ergebnis = Faktor * Adwert
Print "T:" ; Fusing(ergebnis , "###.#") ; "C,";
End If

If Channel = 2 Then
Faktor = 20 / 255
Ergebnis = Faktor * Adwert
Print "I1:" ; Fusing(ergebnis , "##.#") ; "A,";
End If

If Channel = 3 Then
Faktor = 3 / 255
Ergebnis = Faktor * Adwert
Print "I2:" ; Fusing(ergebnis , "#.#") ; "A,";
End If

Waitms 1000
Next Channel


Loop