Forum: Analoge Elektronik und Schaltungstechnik ATTINY45 Umschalten Spannungsreferenz Bascom


von Bernd (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von bas_ratte (Gast)


Lesenswert?


von Bernd (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von Paul Baumann (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

> Alternativ dazu kann man die kleinere interne Referenz (beim Tiny15
> wahlweise 1,1V oder 2,56V) verwenden

Sollte natürlich Tiny25 heißen. - Sorry...

...

von Bernd (Gast)


Lesenswert?

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

von Paul Baumann (Gast)


Lesenswert?

Na, da geht's doch, wenn's geht. ;-)

MgG Paul

von Peter D. (peda)


Lesenswert?

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

von Martin Kekse (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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

...

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
Noch kein Account? Hier anmelden.