mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nur 8Bit ADC im Mega8?


Autor: Sebastian Knödler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen!
Ich steh hier wie der Ochs vor'm Berg und komm nicht weiter. Ich hab
ein ATMega8 Experimentierboard (von Roland Walter, wem's was sagt) und
daran angeschlossen ein Spannungsteiler, der wiederum am ADC-Kanal 0
(sprich Port C Pin 0) hängt (4,7 zu 8,1kOhm -> kommen laut Multimeter
ca. 1,8V raus).

Nun hab ich in Bascom versucht das ganze zu Programmieren. Ich kann
auch den ADC abfragen, jedoch nur mit 8 Bit! Ich dachte zu erst es
liegt an diesem "ADC Left Adjust Result"-Bit im ADMUX Register (dann
kommen nur 8 Bit am ADCH raus). Also erstmal auf 0 gesetzt...bring aber
nix! Dann erstmal gemerkt das ich auf das ADCSRA Register zugreifen
will, Bascom kennt das aber anscheinend unter dem Namen ADCSR.
Geändert, aber wieder nur 8 Bit!

Ich setzte meine Register wie folgt:
Ddrc = &B00000000

Admux = &B11000000

Adcsr = &B10001111

On Adc Onadc


Sreg.7 = 1


Meines erachtens heißt das folgendes:
PortC auf Eingang
Admux: 2,56V interne Referenz, KEIN Left Adjust, Bit 4 gibt's nicht
(also 0), AD-Input 0 gewählt
Adcsr: AD an, aber nicht starten, Free Run aus, Interrupt Flag auf 0,
Interrupt an, Prescaler auf 128 (ergibt mit 3,6864MHz ca. 28,8kHz) was
aber nix bringt! Egal welcher Prescaler, immer das selbe Ergebnis!

Später lese ich dann erst ADCL dann ADCH. Das ganze mit Makeint(ADCL,
ADCH) zusammenführen.

Ich weiß grad echt nimmer weiter! Bitte Bitte helft mir heul

MfG
Basti

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach meinen Erinnerungen kann dir Bascom das ganze Setzen und Auslesen
der Register abnehmen. Der ATMEGA8 hat definitiv einen 10Bit Wandler!

PS: Ich hab auch nich eine veraltete Version des ATEMEGA8 Datenblatts
in dem einem glaubhauft gemacht werden sollte dass zwei der 6 A/D
Eingänge nur 8Bit Auflösung hätten.

Autor: Sebastian Knödler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das mit den zwei 8 Bit Kanälen stimmt, ist nur so weil da auch die
Hardware I²C-Ports mit drauf sind!
Ich weiß das Bascom das auch machen kann, allerdings braucht mir das
zuviel speicher (und man lernt nix, ausser "Config ADC=XYZ")!

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Pobiere doch erst mal ob die  „lernt nix“ Methode
mit (Config ADC=XYZ") funktioniert und du so die 10 Bit erhältst .
Wenn das geht, dann Versuchs über die Register, aber dann auch komplett
und nicht halbe /  halbe (On Adc)

oder sonnt bitte etwas mehr Programmausschnitt.
Wie ist die Variable dimensioniert die dein
Makeint(ADCL, ADCH) aufnimmt ?

„Mein mega8 hat auch mit bascom 10 Bit“

Gruß HH

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch was wenn du wissen willst, welche Registernamen Bascom
„hören will“ dann schau in der „m8def.dat“ nach

Autor: Sebastian Knödler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab jetzt auch mal mit der "Nix-lern-Methode" probiert, und
siehe da: Er liefert mir 10Bit!
Allerdings läuft das ganze ein wenig merkwürdig: Egal welchen ADC-Kanal
und welche Referenz ich wähle...es kommt immer ein Wert zwischen 350 und
500 raus!
Am Kanal 0 liegen ~1,8V, raus kommen tut aber (umgerechnet) 1,25V! Am
Kanal 1 liegen ca. 3,9V, kommt aber auch so um die 1,5V raus.
Bei den restlichen (nicht angeschlossenen) kommt der Wert 372 raus.

Ich glaub fast das liegt am Mega selbst! Der is bestimmt schon 400-500
Programmiert worden (aber er sollte ja mindestens 1.000 oder 10.000?
Programmierungen aushalten)!

Mein Quelltext mit der Bascom Methode habt ihr hier:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Dim E As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Do

Start Adc

E = Getadc(1)

Stop Adc
Print E

Wait 2

Loop

End



Ist recht einfach aufgebaut, aber mehr braucht's grad auch nicht.
Soll ich auch den gesamten Text der anderen Quelldatei (Register von
Hand setzen) posten?

MfG
Basti

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das es am mega8 hängt kann ich mir nicht denken ,
auch nicht wenn er noch sooft programmiert wurde  .

Ist dein Avr richtig beschaltet an AVCC ,AREF ?,
wo kommt die Spannung am Messeingang her, ist das
saubere DC ?

Dann solltest du erst mal
Config Adc = Single , Prescaler = Auto , Reference = INTERNAL

verwenden und auch mehrere Werte einlesen und
nicht den ADC gleich wieder Stoppen

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.