Hey! Ich versuche verzweifelt den wert eines Potis mit dem ADC auszulesen. Aber irgendwie bekomme ich es absolut nicht auf die Reihe Folgendes zum Aufbau: ATMega32 @ 1Mhz Vcc/ARef/AVCC --> 5V beide GND Pins --> Masse Reset mit R + C beschalten Poti hängt zwischen Vcc und GND, Schleifer am ADC0 Pin des AVR's Nun hab ich versucht mit dem Beispielprogramm von Bascom den Wert auszulesen. Erfolglos. Sowohl die Definitionsdatei als auch die Frequenz ist eingtragen. Hab ich noch irgendwas vergessen? Ich zweifel echt an mir selbst. Hab es auch schon mit anderen Avr's gemacht, da hat es geklappt. Danke schonmal für euere Hilfe
Bevor das jemand anders schreibt: - Spannung hast du gemessen am Eingang mit nem Messgerät? - Code posten wäre ne sinnvolle Sache
Hey! Spannung hab ich gemessen, stimmt soweit. Hier mal der Code aus BascomAVR: Hoffe er hilft mein Problem zu finden. '-------------------------------------------------------------------- ' ADC.BAS ' demonstration of GETADC() function for 8535 or M163 micro ' Getadc() will also work for other AVR chips that have an ADC converter '-------------------------------------------------------------------- $regfile = "M32def.dat" ' we use the 8535 'configure single mode and auto prescaler setting 'The single mode must be used with the GETADC() function 'The prescaler divides the internal clock by 2,4,8,15,32,64 or 128 'Because the ADC needs a clock from 50-200 KHz 'The AUTO feature, will select the highest clockrate possible Config Portb = Output Config Adc = Single , Prescaler = Auto 'Now give power to the chip Start Adc 'With STOP ADC, you can remove the power from the chip 'Stop Adc Dim W As Word , Channel As Byte 'now read A/D value from channel 0 Do W = Getadc(channel) Portb = Low(w) Loop End 'The new M163 has options for the reference voltage 'For this chip you can use the additional param : 'Config Adc = Single , Prescaler = Auto, Reference = Internal 'The reference param may be : 'OFF : AREF, internal reference turned off 'AVCC : AVCC, with external capacitor at AREF pin 'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin 'Using the additional param on chip that do not have the internal reference will have no effect.
HAllo, vileicht hilft es, wenn du die Variable Channel initialisierst bevor sie in der Anweisung "W = Getadc(channel)" benutzt wird. Also z.B. channel = 0 W = Getadc(channel) Mfg Willi
ich kenn mich zwar mit Bascom nicht aus, aber wird irgendwo die Reference gesetzt? Kann nirgends ein "Reference = AVCC" entdecken.
Hi, versuch es doch mal damit die Register zu schreiben, hier ein Beispiel für einen Tiny45: [c]'############ADC ############################################################### On Adc Onadc 'Interrupt für Adc Wert Admux = &B00100010 ' ^^-----------------Voltage Reference:00=Vcc ' ^----------------Left Adjust ' ^---------------Not Used ' ^^^^-----------Analog Channel:0010=ADC2 PB4 Adcsra = &B11111110 ' ^-----------------Adc Enable ' ^----------------Adc Start Conversion ' ^---------------Adc Auto Trigger Enable ' ^--------------Adc Interrupt Flag ' ^-------------Adc Interrupt Enable ' ^^^----------Adc Prescaler Select Bits '### Hauptschleife ################################################## Dim Akku_low As Bit Dim Analog As Word Do Loop '### Analog Digital Converter ################################################## Onadc: ' Interrupt ADC Analog = Adch 'ADC Wert an Variable übergeben If Analog < 15 Then Akku_low = 1 'Akku_low Bit bilden End If If Analog > 20 Then Akku_low = 0 End If Return ___________________________________________________ Klappt wunderbar, mustt du bloß die ADC Register anpassen. Oder versuch mal in deinem Code folgende stelle zu ändern: _________________________________ 'now read A/D value from channel 0 Do W = Getadc(channel) Portb = Low(w) Loop End so muss es funktionieren: _________________________________ 'now read A/D value from channel x Do W = Getadc(hier den verwendeten Kanal eintragen!) If w > 100 then Portb.1=1 end if Loop End ________________________________ nach eine Reset sollte so ein High Level an Portb.1 anliegen wenn die ADC Spannung > ca. 1/10Vcc ist. Grüße hugo
Hey! So hab mir jetzt einen andren Mega32 zukommen lassen. Und siehe da! Der AD Wandler war defekt. Hab die Programme mal durchprobiert. Haben alle funktioniert. Danke nochmals...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.