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")
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
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.
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.