mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC mit Mega32


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: jaedle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor das jemand anders schreibt:

- Spannung hast du gemessen am Eingang mit nem Messgerät?
- Code posten wäre ne sinnvolle Sache

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey!

Klappt leider auch nicht

Autor: Jodel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kenn mich zwar mit Bascom nicht aus, aber wird irgendwo die 
Reference gesetzt?

Kann nirgends ein "Reference = AVCC" entdecken.

Autor: hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.