Archiv verlassen und diese Seite im Standarddesign anzeigen : Getadc
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 ](*,)
wie wärs mal mit
start adc
bevor du mit dem messen anfängst?
Sorry hatte ich vergessen!!!
Aber funktioniert trotzdem nicht zeigt nur max Wert von 1023 an. Kann nicht verändert werden durch andere Poti Stellung
Klingt, als ob das Poti keine GND-Verbindung hätte.
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
ist dein kanal der richtige? und ist die hardware ok?
Wie gesagt die GRD-Verbindung ist Gut da ein anderes Programm von Roland Walter funtioniert. Leider mit anderen Befehlen ADMUX und ADCSR usw.
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.
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<
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.