www.mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik ATTINY45 Umschalten Spannungsreferenz Bascom


Autor: Bernd (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: bas_ratte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Bernd (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Bernd (Gast)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, da geht's doch, wenn's geht. ;-)

MgG Paul

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Martin Kekse (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

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.