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