Hallo,
hat jemand eine Idee wie mit Bascom die Spannungsreferenz von der
internen Spanung (1,1 Volt) auf VCC (5 Volt) erfolgt ? Der von VCC als
AREF Ssollte gemäß Datenblatt an PIN 5 erfolgen.
Der Befehl
Config Adc = Single , Prescaler = Auto , Reference = AVCC
funktioniert nicht. Für die interne Referenz wird
Config Adc = Single , Prescaler = Auto , Reference = 2
' as the number of reference options increase, we use a number to
specify the option
' option 2 is internal 1.1V ref
genannt. Nur welche Zahl muß ich für die externe Referenz angeben ?
Danke für jede Hilfe.
Bernd
Wirf die vermaledeiten Config-Anweisungen weg und fange an sauber zu
programmieren. Lies das Datenblatt (zum Thema ADMUX) und setze die
benötigten Registerwerte von Hand. Das funktioniert dann wenigstens, so
macht es übrigens auch jeder ASM- oder C-Programmierer.
...
Hallo,
danke für die Antworten, aber die Standardbefehle:
OFF ' AREF
AVCC ' AVCC oder VCC
INTERNAL ' ---> 2.56 V
INTERNAL_1.1 ' 1.1 V---> zB. ATtiny45
INTERNAL_2.56 ' 1.1 V oder 2.56 V ist nur bei einigen AVR
möglich.
INTERNALEXTCAP ' Wenn, zB. beim Tiny15L, ein Kondensator an AREF
angeschlossen is
funktionieren nicht, BASCOM bringt einen Syntaxfehler beim ATTINY. Bei
MEGA8 funktioniert es.
Wie setzt man die Register in ADMUX ?
Die Angaben sind AMUX: Bit REFS2 = X, REFS1 = 0, REFS0 = 1.
REFS1 = Bit 7
REFS0 = Bit 6
REFS2 = Bit 4
Allerdings gibt es den Hinweis: When differential channels and gain are
used, using VCC or an external AREF higher than (VCC - 1V) as a voltage
reference is not recommended as this will affect the ADC accuracy.
Kann ich dann garnicht 5 Volt als Spannungsreferenz benutzen ?
Hintergrund ich möchte in einem Bereich von 2V-5V eine Spannung messen
und bräuchte eigentlich den Messbereich 0-5 Volt.
Danke
Bernd
Bernd wrote:
> Hallo,>> danke für die Antworten, aber die Standardbefehle:
Das sind keine Standardbefehle, sondern Roulette, also der Quatsch, der
BASCOM aufbläht und quasi unbenutzbar macht. Verbindlich (also Standard)
ist die Registerbeschreibung im Datenblatt.
> Wie setzt man die Register in ADMUX ?
Vermutlich mit dem Zuweisungsoperator '='. In Assembler muss ich noch
anhand der Adresse (normaler I/O-Bereich / Extended I/O-Bereich) des
I/O-Registers zwischen 'out' und 'sts' unterscheiden. Solltest Du in
BASCOM keinen Weg der direkten Zuweisung finden, dann lies bei Roland
Walter (online-Buch) nach, der schreibt, dass BASCOM auch jeden
ASM-Befehl versteht und ausführt.
> Die Angaben sind AMUX: Bit REFS2 = X, REFS1 = 0, REFS0 = 1.>> REFS1 = Bit 7> REFS0 = Bit 6> REFS2 = Bit 4
Bingo! Und wenn Du Dir Tabelle 20-3 im Datenblatt anschaust, wirst Du
feststellen, dass alle drei REFS-Bits Null sein müssen, damit Vcc als
Referenz benutzt wird und PB0 als Portpin freigegeben ist. Oder?
Du schreibst also die Nummer Deiner gewünschten Messquelle (anhand
Tabelle 20-4) und ggf. noch ADLAR gesetzt in ADMUX. Da ADMUX beim Tiny25
im normalen I/O-Bereich liegt, würde das in ASM so aussehen:
ldi r16,(1<<adlar)+1 ;Messquelle ADC1 (PB5) linksbündig
out admux,r16 ;in ADMUX schreiben
> Kann ich dann garnicht 5 Volt als Spannungsreferenz benutzen ?
Na aber sicher doch, das ist doch als Normalfall voreingestellt. Lässt
Du die REFS-Bits in Ruhe (000), dann ist Vcc (5V) als Referenz
eingestellt. Wo ist das Problem???
> Hintergrund ich möchte in einem Bereich von 2V-5V eine Spannung messen> und bräuchte eigentlich den Messbereich 0-5 Volt.
Genau das ist der Normalfall für den ADC.
Alternativ dazu kann man die kleinere interne Referenz (beim Tiny15
wahlweise 1,1V oder 2,56V) verwenden oder eine externe Referenz, die
dann aber nicht kleiner sein darf als die kleinste wählbare interne
Referenz. Die Auswahl erfolgt mittels REFS-Bits in ADMUX gemäß Tabelle
20-3 des Datenblatts.
...
Ich weiß, daß nicht alle Atmel-AVR's den Befehl den Befehl "Reference"
unterstützen. Der Mega163 macht es.
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = off
(interne Referenz aus)
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = AVCC
(externe Referenz an) AVCC muß an 5 Volt liegen und 100n zu Stützen dran
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = INTERNAL
(nimmt die internen 2,56 Volt)
Versuche mal das.
MfG Paul
> Alternativ dazu kann man die kleinere interne Referenz (beim Tiny15> wahlweise 1,1V oder 2,56V) verwenden
Sollte natürlich Tiny25 heißen. - Sorry...
...
Hallo,
ich habe den Fehler jetzt gefunden, danke für die zahlreichen Tips.
Der Fehler war:
Ich hatte
Config Adc = Single , Prescaler = Auto , Reference = 2
Dies schaltet beim ATTINY die interne 1.1 V Spannungsreferenz ein. Wenn
Reference weggelassen wird (Standardeinstellung), dann funktioniert es
tadellos
Config Adc = Single , Prescaler = Auto
Gruß
Bernd
Es gibt nur 2 Möglichkeiten:
1.
man liest das Datenblatt und setzt die Register entsprechend
Vorteile:
- geht in allen Programmiersprachen (Assembler, C, Bascom),
- man weiß dann auch, was alles geht und wie es geht.
2.
man liest die Bascom-Doku und setzt die Bascom-Blackboxen entsprechend
Nachteile:
- geht nur in Bascom,
- gibt einem kein Verständnis über die Funktionsweise sowie die
vorhandenen Möglichkeiten.
Peter
Hallo,
über die Register kann ich in BASCOM den ADC nicht konfigurieren, als
ich die Standartbefehle nutzte,
z.B.: REFERENCE=OFF, kannte BASCOM den Befehl nicht.
Also habe ich für die Reference die entsprechende Dezimalzahl
eingesetzt. Die Zahl muss im Dezimalbereich dem im Binärbereich der
Register entsprechen, d.h.
REFS2 REFS1 REFS0
x 0 0 Vcc ist AREF, config adc=single,..., REFERENCE=0
x 0 1 Ext. Vref, config adc=single,.., REFERENCE=1
0 1 0 Int. 1,1V, config adc=single,.., REFERENCE=2
0 1 1 Reserved, config adc=single,.., REFERENCE=3
...
Martin Kekse
Martin Kekse wrote:
> Hallo,>> über die Register kann ich in BASCOM den ADC nicht konfigurieren, als> ich die Standartbefehle nutzte,>> z.B.: REFERENCE=OFF, kannte BASCOM den Befehl nicht.
Wie kommst Du darauf, dass dies in irgendeiner Programmier-Sprache ein
StandarDbefehl ist??
>> Also habe ich für die Reference die entsprechende Dezimalzahl> eingesetzt. Die Zahl muss im Dezimalbereich dem im Binärbereich der> Register entsprechen, d.h.>> REFS2 REFS1 REFS0> x 0 0 Vcc ist AREF, config adc=single,..., REFERENCE=0> x 0 1 Ext. Vref, config adc=single,.., REFERENCE=1> 0 1 0 Int. 1,1V, config adc=single,.., REFERENCE=2> 0 1 1 Reserved, config adc=single,.., REFERENCE=3
Was ist eigentlich "REFERENCE"?? Das einzig in diesem Zusammenhang
interessante I/O-Register ist "ADMUX". Du solltest also die Bitwerte der
zu setzenden Bits (laut Datenblatt) verORen (oder notfalls addieren,
falls Dir OR zu hoch ist) und an ADMUX ausgeben. Mit einer einzigen
Ausgabe-Anweisung (OUT oder STS in ASM oder ADMUX=Wert in einer
Hochsprache) stellst Du gleichzeitig die Referenz-Quelle (Bits REFS2,
REFS1, REFS0), die Formatierung des Ergebnisses (Bit ADLAR) und die
ADC-Mess-Quelle (Bits MUX3, MUX2, MUX1, MUX0) ein. Da braucht es keine
Befehle wie CONFIG oder REFERENCE...
Wenn Du Programmieren willst, solltest Du langsam anfangen Bits und
Bytes zu verstehen. Beim AVR programmierst Du sehr dicht an der
Hardware, es schadet also nichts, auf die in BASCOM angebotenen Krücken
zu verzichten und der Hardware (den I/O-Registern) die zur Konfiguration
benötigten Bitwerte direkt zuzuweisen. Das Datenblatt ist Dein Freund,
andere I/O-Register (und deren Konfigutationsbits) als die im Datenblatt
genannten (und gut beschriebenen) gibt es nicht. Auch BASCOM ändert die
verfügbare Hardware nicht...
> ...>> Martin Kekse
...