Hitta spänningsreferens [Löst]

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Hitta spänningsreferens [Löst]

Inlägg av karlstedt »

Nån som vet var man kan hitta en spänningsreferens i utrustning som man har hemma, typ moderkort, gamla cd-spelare och annat krafs... Bör vara runt 2 volt. Ej mindre.

Eller går det att göra en som är skapligt okänslig för temperatur... Antar att en vanlig spänningsdelning skulle bli oerhört temperaturberoende.. En opkoppling likaså pga motståndens "tempkoefficient"... Parallella motstånd kanske skulle dämpa temperaturdriften lite men det känns som att det blir för mycket fulhack...

Tack på förhand.


EDIT: Ska väl tilläga att jag behöver den för att jag inte får Internal Vref att fungera på ATmega32 :)
Denna kod finns med i initieringen av ADCn:

Kod: Markera allt

//ADMUX |= (1<<REFS1);		//set ref to internal 2.56V
//ADMUX |= (1<<REFS0);
Har även läst ADMUX-registret och verifierat att dom är satta.. Läsning av ADMUX gav 224. (11100000)
Nån som har erfarenheter/tips?
Senast redigerad av karlstedt 30 november 2005, 09:02:55, redigerad totalt 1 gång.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Du ska ha referensspänningen till ADCn i en AVR. Påverkas inte själva ADCn också av temperaturförändringar?
Det finns små kretsar som jag antar är temepraturstabila att sampla, om det nu bara är ett experiment du bygger.
Men det lättaste är nog att få igång Vref i AVRen :)
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Hur har du kopplat Vref-pinnen?

Jag har använt Vref på 2,56v i en Mega32:a utan problem.
Fungerade kanon och var exact.
Jag avkopplade den med en kondensator extern. Behövs dock inte.

Kod: Markera allt

ldi	temp,0b11000000	;Init AD to 2.56v internal Aref
out	admux,temp
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

Det finns små kretsar som jag antar är temepraturstabila att sampla
Jo, visst. Tanken var att jag skulle få tag på en snabbt. Jag kan lika gärna köpa en isf. Kostar bara några kronor.. Men ni vet ju hur det är då man håller på och labbar. Frakttider finns inte med i beräkningen ;)

Hedis >
Jag har inte kopplat Vref nåt överhuvud taget.. Det sköts väl internt? Ansluter man man nåt till Vref så kortslutar man ju den. (förutom en kondning då kanske) och vad jag förstod av databladet så var det bra för "noise immunity". Bör väl fungera även utan?
EDIT: ...och min ADMUX ser ut som du beskriver sånär som på 1 bit som är "left adjust", men det vet vi båda att det inte ska påverka detta.
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Jepp då har du helt rätt.
Det borde fungera då.

Vad händer/händer inte?

Du initierar AD-n riktigt?
Sätter prescaler mm.
Väljer kanal i mux:en.
Ger den en kort stund på sig att stabilisera.
Startar sampling. (alternativt sätter den freerunning)
Läser ur registret o ser vad det blir.

Kod: Markera allt

	ldi	temp,0b11000001		;choose channel 1 from adc
	out	admux,temp

	ldi	temp,0b11001111		;set the register adcsr
	out	adcsr,temp
	rcall	delay2			;Wain until ADC has  stabilized
	in	temp,adcl		;read both adc register
	in	temp2,adch		
	lsr	temp			
	lsr	temp
	lsl	temp2
	lsl	temp2
	lsl	temp2
	lsl	temp2
	lsl	temp2
	lsl	temp2
	or	temp,temp2		; ori, e.g. the 2 lsb bits gone->8 bits left
	mov	avgas,temp	
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

Ja, alltså...förut fungerade det korrekt när jag hade valt Aref som referens och kopplat den till Vcc. Då hade jag rätt värden ut på LCD:n. Dum som man är vill man ju öka upplösningen och precisionen och därmed tänkte jag att jag skriver REFS1 och REFS1 i ADMUX till ettor för att använda Internal Vref på 2.56 V. Detta skulle funka fint eftersom min insignal aldrig överstiger 2 V.
När jag testat detta fick jag 0 volt ut på Vref. Jag hade inget inkopplat på Vref då. (tror jag :))Tydligen skulle man ju kunna mäta den spänningen med en "high impedance voltmeter", vad det nu är? Duger det inte med en vanlig hobby-multimeter?

Men nu är mina problem värre än så... Nu funkar fan ingenting.. (helt felaktiga värden) Måste nästan frågasätta om hårdvaran verkligen fungerar som den ska... Verkar nästan som om jag släppt ut lite rök ur min stackars mega32a.

Ska snygga upp koden lite och se om jag hittar nåt knas, annars postar jag kod här inom en snar framtid.


EDIT: Måste nog krypa till korset.
Så här ser koden ut

Kod: Markera allt


void ADC_INIT(void)
{
	ADCSRA |= (1<<ADEN);		//ADC enable
	ADMUX |= (1<<ADLAR);		//Left adjust result
	ADMUX |= (1<<MUX0);		//Use ADC1 as input
	
	//ADMUX |= (1<<REFS1);		//set Vref to internal 2.56V
	//ADMUX |= (1<<REFS0);
	
	ADCSRA |= (1<<ADSC);		//Start conversion
	
	ADCSRA |= (1<<ADPS2);		//Prescaler set to 128
	ADCSRA |= (1<<ADPS1);		//
}




SIGNAL(SIG_ADC)
{
	char*temp = "";
	lcd_goto(0x8E);			
	
	uint8_t adc_inL = ADCL;
	uint8_t adc_inH = ADCH;

	
	float result = (adc_inH<<2)+(adc_inL>>6);
	result = result*(5.18/1024);
	dtostrf(result, 4, 3, temp);
	lcd_puts(temp);
}
Man tycker inte att speciellt mycket ska kunna gå fel på den lilla biten? :roll:
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Borde fungera att mäta med vanlig multimeter. (Dom brukar väll ligga på 10Mohm)
Dock så måste du aktivera valet med 2,56v intärn Vref med avkoppling då den måste switcha till pinnen till vref:en.

Det fungerar alltså inte om du väljer extern Vref nu?

Jag har faktiskt lyckats grilla en adc-ingång en gång.
Tror jag råkade mata 15v från op´n till ingången.
Den fungerar men beter sig helskummt.


Hur fungerar det om du provar med en annan adc-ingång?
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

Just nu kör jag med extern Vref igen.
Har precis bytt från ADC0 till ADC1. Undra om man kan förstöra Vref och den biten i ADCn eftersom jag inte tycker att det fungerar att få fram 2.56 även fast ADMUX är riktig??
Grejen är den att det verkar fungera riktigt för att det som visas på displayen rör sig på ett rimligt sätt, om ni förstår vad jag menar. Det är bara det att värdena blir väldigt konstiga.
lägsta inspänningen 0.25 V ger 1.857 ut
och högsta inspänn. 1.922 ger 3.880 ut...
ser inget samband... hoppas nån annan gör det..

EDIT: Exakt samma på ADC2...
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

Slutrapporterar tråden lite för de som är intresserade...

Ett byte av uC gjorde att allt fungerade som det ska. Jag måste alltså ha haft nån extern spänning kopplad till Vref när jag valde intern Vref.
Men en ny mega32 och en kondning på utgången mäter den korrekt igen. Det går att mäta de 2.56(2.54) volt på Vref med en vanlig voltmeter, vilket inte gick på den förra jag testade med.
Tur att det inte var min programmering det var fel på 8)
Skriv svar