Forum: Analoge Elektronik und Schaltungstechnik mega8 AREF spannung


von tommy (Gast)


Lesenswert?

hallo!

am mega8 sollte doch die referenzspannung messbar sein?
bei mir nämlich nur 0,6V obwohl nicht! belastet
ADC müsste richtig eingestellt sein

d.h. referenzspannung durch irgendwas geschrottet?

vielen dank im vorhinein

tommy

von tiroler (Gast)


Lesenswert?

oh! entschuldigung
tommy ist schon vergeben!

lg

tiroler

von Jens123 (Gast)


Lesenswert?

evtl hast du den port aus ausgang definiert?

von ...HanneS... (Gast)


Lesenswert?

Was hast du denn als Referenzspannung eingestellt?
Wenn du keine interne Referenz eingestellt hast, dann musst du eine
externe Referenzspannung anlegen, meist AVCC...

von AxelR. (Gast)


Lesenswert?

Die Spannung ist erst messbar, wenn Du den ADC auch anstellst, also
gestartet hast.
Ich stehe(stand) vor dem gleichem Problem, die Refrenzspannung zu
messen, da diese ja von Typ zu Typ exemplarabhängig streut.
Diese habe ich dann im EEPROM hinterlegt, um die Messungen möglichst
genau hinzubekommen.
Jetzt lege ich eine genaue Spannung am Eingang an und rechne
rückwärts.
(Danke nochmals an alle, die mir berim Umstellen der Formel geholfen
haben)
So umgehe ich die langwierige Prozedur des Ausmessens und eintragen
zu Fuß im EEPROM.
Axel
Ich kann den fred nochmal raussuchen, ging um Spannungsmessung...

von tiroler (Gast)


Angehängte Dateien:

Lesenswert?

danke erstmal!

das problem mit den 0,6V hat sich mit eurer hilfe erledigt.
war nicht richtig eingestellt!

komme aber immer noch nicht auf den grünen zweig:
adc wert springt wild umher und endet nach einer funktionierenden
BIN-ASCII wandlung am display bei ~1023?

wenn ev. noch wer kurz drüberschauen könnte

danke!

von AxelR. (Gast)


Lesenswert?

angeshen:
ich progge ja mit Fastavr...

---
sbi ADCSR, ADIF ; logisch "1" löscht ADIF flag !
wait12: ; Wert verwerfen, da meist vom vorherigem ADC-Kanal
sbis ADCSR, ADIF
rjmp wait12
sbi ADCSR, ADIF ; logisch "1" löscht ADIF flag !
wait22: ; neuen ADC-Wert lesen
sbis ADCSR, ADIF
rjmp wait22
---

ich habe mal mit FastAVR diesen Code erzeugt:
BASIC

$Device= mega8      ' used device
$Stack = 28      ' stack depth
$Clock = 8      ' adjust for used crystal
$Source=On      ' basic source in Asm
Dim messwert As Word

Do        ' place your code in next line
Start Adc, Vref=Int ' switch supply to Adc, Internal (2.56V) Vref is
used
messwert=Adc(0)
Loop

ASSEMBLER

;FastAVR Basic Compiler, ver.3.1.6, by MicroDesign
;Created 14:40:57, 15-12-2004
;
.include  "C:\FastAVR\inc\m8def.inc"
;
    .DSEG
messwert:  .Byte   2

    .CSEG
.ORG  0

_Reset:
    ldi    yl,Low(RAMEND)
    out    SPL,yl
    ldi    yh,high(RAMEND)
    out    SPL+1,yh
    sbiw  yl,28



;******  USERS BASIC CODE **********************

;-Line--0011----Do            ' place your code in next line--
L0000:

;-Line--0012----Start Adc, Vref=Int ' switch supply to Adc, Internal
(2.56V) Vref is used--
    ldi    zl,0x86  ; 10000110
    out    ADCSR,zl
    ldi    zl,0xC0  ; 11000000
    out    ADMUX,zl

;-Line--0013----messwert=Adc(0)--
    ldi    zl,Low(0)
    in    zh,ADMUX
    andi  zh,0xe0
    Or    zl,zh
    out    ADMUX,zl
    call  _Adc
    sts    messwert,zl
    sts    messwert+1,zh

;-Line--0014----Loop--
    rjmp  L0000
L0001:

;****** End OF USER BASIC CODE ****************


;////// Adc ///////////////////////////////
_Adc:  sbi    ADCSR,6
_Adc1:  sbic  ADCSR,6
    rjmp  _Adc1
    in    zl,ADCL
    in    zh,ADCH
    ret

;System Global Variables: 0  bytes
;User   Global Variables: 2  bytes

in der FastAvr eigenen Routine sieht man jetzt sogar einen Untetrschied
(hätte ich nicht gedacht).
Bei dir steht sbis ADCSR, ADIF
bei FastAVR steht sbic ADCSR, ADIF(Bit6)
tausch das mal aus.
Hoffe geholfen zu haben
Axel
Is easy in FastAVR, oder? Im Assembler kann man dann auch noch mit Hand
rummehren, wenn's nicht gefällt (Prescaler vom ADC zum Beispiel steht
hir nicht auf "7")

von ...HanneS... (Gast)


Lesenswert?

@Axel:
Welche Einschränkungen hat eigentlich die Demo von FastAVR?

von AxelR. (Gast)


Lesenswert?

keine Ahnung...
habe die 3.1.6 über die 3.1.2 drüber installiert (mehr sach ich nich,
auweia)

100Zeile Quelltext, glaube ich.
Gruß
Axel

von ...HanneS... (Gast)


Lesenswert?

Hi...

Axel: Jou, danke, ich frag auch nicht weiter.

Finde nur den erzeugten (kommentierten) ASM-Text recht brauchbar.
BASCOM scheint das nicht zu können.
Na egal, ich bleibe vorerst sowiso bei ASM.

Nun zum ADC-Problem.
Wenn ich den ADC im Free-Run-Mode nutze, dann frage ich ihn
grundsätzlich in einer Timer-ISR ab. Dabei stelle ich durch
ADC-Vorteiler und Timer-Takt sicher, dass seit der letzten Abfrage
(oder seit der Initialisierung) mindstens zwei Messungen stattgefunden
haben. ADMUX wird dann nach dem Auslesen auf die neue Messquelle
gesetzt.

Ansonsten ist auch Einzelmessung mit Int interessant. Man stellt die
Quelle ein (ADMUX), aktiviert den ADC mit Interrupt und schickt den MC
schlafen. In der ADC-ISR wird dann der Wert ausgelesen und ein Flag
gesetzt, damit das Hauptprogramm den neuen Wert verarbeiten kann.

Aber im FreeRun die Quelle umschalten, warten bis die erste Messung
fertig ist, diese verwerfen, weil sie vermutlich von der alten Quelle
stammt, warten bis die nächste Messung fertig ist, diese Werte
nutzen... - Das ist mir irgendwie zu verschwenderisch, der MC hängt ja
nur in der Warteschleife... Da kann er auch schlafen gehen oder
anderweitig arbeiten...

Übrigens nutze ich meist AVCC als Referenz, ich hatte aber noch keine
Anwendung, wo eine extern erzeugte Spannung gemessen werden musste,
meist war es ein an AVCC hängender Spannungsteiler.

...HanneS...

von AxelR. (Gast)


Lesenswert?

hi Hannes, Zitat

---
Übrigens nutze ich meist AVCC als Referenz, ich hatte aber noch keine
Anwendung, wo eine extern erzeugte Spannung gemessen werden musste,
meist war es ein an AVCC hängender Spannungsteiler.
---

was willsten dann messen, wenn AVCC deine Referenz ist, und die zu
messende Größe am Spannungsteiler an genau dieser hängt? Die
Widerstände vom Spannungsteiler? das meinst Du bestimmt anners...

tiroler, von Dir will ich wissen, obs nu geht.

Axel

von ...HanneS... (Gast)


Lesenswert?

Hi Axel:

Das riecht nach Missverständnis...

Oft ist es ein Poti als Spannungsteiler, das zwischen AVCC und GND
eingespannt ist, der Abgriff geht dann an einen ADC-Eingeng. Als
Referenz dient dann natürlich AVCC. Anwendung wenn das Poti zur Eingabe
dient, z.B. Modelleisenbahn-Fahrpult, Modellbau-Fernsteuer-Encoder,
Modellbau-Impulsmanipulation (Einstellen der "Parameter" mittels
Trimmpotis).

Oder ein Spannungsteiler aus einem linearen und einem nichtlinearen
Widerstand (Termistor, Fotowiderstand...), der ebenfalls zwischen AVCC
und GND liegt, die Mitte an einen ADC-Eingang. Auch dort nutze ich AVCC
als Referenz.

Ich war aber bisher noch nicht in der Situation, einen AVR als
Voltmeter zu benutzen, also eine externe, von der AVR-Stromversorgung
unabhängige Spannung zu messen und dabei noch eine extrem genaue
(interne) Referenz vorauszusetzen...

So war das gemeint...

Gruß...
...HanneS...

von AxelR. (Gast)


Lesenswert?

Jahaa Missverständnis.
Ich entsinne mich, war letztens auf deiner Seite...

ich muss ja hier mit dem Teil die Akkuspannung (1xLiPo) und die
Eingangsspannung (6-ca.30V)messen.

Grüße
AxelR.

von tiroler (Gast)


Lesenswert?

so!

danke vielmals!

das ding läuft jetzt endlich...
es werden nun 2 spannungen gemessen
10 bit nach ascii gewandelt
an lcd ausgegeben
und 2 stk. 12 bit via d/A wandler ausgegeben

(ist nur alles ein wenig mühsam als programmieranfänger)

werden soll es ein uC gesteuertes netzgerät 0-40V 0-32A
mit ein paar spielereien wie digitalem funktionsgenerator, uart,
leistungsanzeige...

strommessung ca. 12 bit theoretische auflösung -"istwert"
                 12 bit bzw. 13 bit -"sollwert"
spannung: 12 bit soll und ist

mit der hardware komme ich zügig voran.

lg

tiroler

von AxelR. (Gast)


Lesenswert?

@tiroler
wie kommst Du mit der Strommessung zurecht?
Die Auflösung ist eher bescheiden, ich bekomme die Werte nicht richtig
interpretiert :-((
habs schon mal an passender Stelle gepostet.

http://www.mikrocontroller.net/forum/read-1-93360.html#135751

vielleicht lesen hier mehr LEute mit, vielleicht mache ich einen neuen
Thread auf, mal sehen.
Gruß
AxelR.

von HansHans (Gast)


Lesenswert?

@ HanneS
Finde nur den erzeugten (kommentierten) ASM-Text recht brauchbar.
BASCOM scheint das nicht zu können.
Na egal, ich bleibe vorerst sowiso bei ASM.

...doch wenn Bascom und AVR-Studio installiert ist get‘s

von ...HanneS... (Gast)


Lesenswert?

@HansHans: (so nannte man mich auch mal...)

BASCOM und AVR-Studio? - Das ist mir neu, erzähl' mal...

Hoffentlich meinst du nicht das Öffnen der Hex-Datei mit AVR-Studio,
denn diese Kommentare sind (mit FastAVR verglichen) sinnlos...

Gruß... - ...HanneS...

von HansHans (Gast)


Lesenswert?

Hmmm,
das muss ich mir dann nachher noch mal auf dem Laptop
ansehen, wie das jetzt mit dem Kommentaren war ,
es kann sein das man nur die Basic Zeile sieht und
jeweils  das dazugehörige ASM Ergebnis  von Bascom

von ...HanneS... (Gast)


Lesenswert?

@HansHans:

Jou, mach mal. Es wurde im Forum schon des Öfteren gefragt, ob BASCOM
einen ASM-Export hat, aber die BASCOMer hatten sich nicht dazu
gemeldet. Ich habe ja nix gegen eine Hochsprache, finde es aber
töricht, wenn man (beim MC) eine Hochsprache einsetzt, weil man sich
vor ASM und dem Lesen des Datenblatts drückt. Als Ergänzung fände ich
es gut, aber da sollte dann schon gut kommentiertes ASM herauskommen,
eben wie bei FastAVR...

Danke für dein Posting...
...HanneS...

von HansHans (Gast)


Lesenswert?

Ok, geht besser
..... die Kommentare von FastAVR kenne ich nicht weiters.

Beispiel Bascom:

7:        A = 5
+00000041:   E085        LDI    R24,0x05         Load immediate
+00000042:   93800060    STS    0x0060,R24 Store direct to data space
8:        B = 16
+00000044:   E180        LDI    R24,0x10         Load immediate
+00000045:   93800061    STS    0x0061,R24 Store direct to data space
9:        C = A + B
+00000047:   91000060    LDS    R16,0x0060 Load direct from data space
9:        C = A + B
+00000049:   91400061    LDS    R20,0x0061 Load direct from data space
9:        C = A + B
+0000004B:   0F04        ADD    R16,R20          Add without carry
+0000004C:   E6A2        LDI    R26,0x62         Load immediate
9:        C = A + B
+0000004D:   E0B0        LDI    R27,0x00         Load immediate
+0000004E:   930C        ST     X,R16            Store indirect
11:       Decr A
+0000004F:   91800060    LDS    R24,0x0060 Load direct from data space
11:       Decr A
+00000051:   958A        DEC    R24              Decrement
+00000052:   93800060    STS    0x0060,R24  Store direct to data space
13:       Incr B
+00000054:   E6A1        LDI    R26,0x61         Load immediate
+00000055:   E0B0        LDI    R27,0x00         Load immediate
13:       Incr B
+00000056:   918C        LD     R24,X            Load indirect
+00000057:   5F8F        SUBI   R24,0xFF         Subtract immediate
13:       Incr B
+00000058:   938C        ST     X,R24            Store indirect
15:       Goto Label
+00000059:   940C0041    JMP    0x00000041       Jump
16:       End



Welche Sprache einer verwendet,
 sollte jeder für sich entscheiden, Endet doch
immer in Grundsatzdiktionen aber das man das Datenblatt
nicht lesen braucht kann ich überhaupt nicht nachvollziehen....

Gruss HH

von ...HanneS... (Gast)


Lesenswert?

@HansHans...

Wie hast du diesen Code exportiert?
Oder ist mit AVR-Studion geöffneter Hex-Code?

Ein Beispiel mit FastAVR hat Axel weiter oben gepostet. Hier der Link,
um unnötige Sucherei zu vermeiden. (Ist aber in diesem Thread hier...)
http://www.mikrocontroller.net/forum/read-1-134647.html#135277

Gruß... - ...HanneS... (...nur echt mit Pünktchen...)

von HansHans (Gast)


Lesenswert?

@...HanneS...
--->Oder ist mit AVR-Studion geöffneter Hex-Code?

Fast.... es ist der mit AVR-Studion geöffneter Obj-Code....

Bei hex  ist die Zugehörigkeit von Basicbefehl zu ASM
nicht vorhanden.

von ...HanneS... (Gast)


Lesenswert?

Danke...

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.