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
Was hast du denn als Referenzspannung eingestellt?
Wenn du keine interne Referenz eingestellt hast, dann musst du eine
externe Referenzspannung anlegen, meist AVCC...
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...
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!
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")
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...
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
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...
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.
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
@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.
@ 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 gets
@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...
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
@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...
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
@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...)
@...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.