AVR, nestabilní AREF

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

DanielK
Stály člen
Stály člen
Príspevky: 282
Dátum registrácie: 28 Feb 2015, 14:55

AVR, nestabilní AREF

Príspevok od používateľa DanielK » 14 Sep 2019, 12:53

Ahoj
Mám problém s nestabilním napětím z napěťové reference tl431 na pinu AREF viz obrázek
Měřím napětí na teplotním čidlu lm35 a hodnota vypadala spíš jako TIP sprot, a i po zprůměrování 64 hodnot je výstupní hodnota s rozkmitem cca 20mV.

Má někdo tušení kde dělám chybu?

Kód: Vybrať všetko

// ATMEGA 8A
#define F_CPU 1000000
#include <avr/io.h>
#include <util/delay.h>  
#include <avr/interrupt.h>
#include <stdlib.h>  
#include <stdio.h>  
#include "lcd.h" 

 
char text[32] = {0,}; // LCD

volatile uint8_t count= 0;

volatile uint8_t countADC= 0;

void zmer(uint16_t pole[]);// změří 5 hodnot a vrátí je v poli

uint16_t val[6];// pole pro výsledky měření


void zmer(uint16_t pole[]){

	char i;

	for(i=0;i<5;i++){

		ADMUX = i;// nastavení měřeného kanálu

		ADCSRA |= (1<<ADSC);// spustit převod

		while(ADCSRA & (1<<ADSC)){}// čekej dokud je ADSC=1 (probíhá převod)

		pole[i] = ADC;// ulož výsledek převodu
	}
}



unsigned long int prumer( int*pole, int delka ){

	unsigned long int sum = 0, x = 0;

	for( x = 0; x < delka; x++ ){

		sum += pole[x];
	}
	
	return sum/delka;
}




int main (void) {

	DDRB = 0b11111111; // set IO

	DDRD = 0b11011111; // set IO

	PORTD |= (1 << PD5); // pull up

	TCNT0 = 0;

	TCCR0 |= (1<<CS01); // PRESCALER 8

	TIMSK = (1<<TOIE0); //Timer/Counter0 Overflow Interrupt Enable

	ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // povolit ADC, clock pro ADC F_CPU/64

	lcd_init(LCD_DISP_ON); //inicializace LCD

	int temp = 0; // hodnota teploty v mV 

	char x =0; // počet uložených hodnot

	unsigned int hodnoty[64] = {0,};

	sei(); // povolení globálního přerušení

	while(1){
		
		if(count > 3){ // 6us, doba záknitů tlačítka
		
		PORTD ^= (1 << PD0);  // Invert	
		}
	
		zmer(val); 

		hodnoty[x] = val[4] * 2.3763; // U REF = 2.4312

		x++; 
		
		if ( x == 64 ){

			temp = prumer( hodnoty, 64 ); 		 
			
			lcd_clrscr(); 

			sprintf(text,"TEMP=%d",temp);

			lcd_puts(text);

			lcd_gotoxy(0,0);
		
				
			x = 0;
		}

	}

}

 

ISR (TIMER0_OVF_vect){ // 2048 us

	if((PIND & (1 << PD5)) == 0){ 

		if(count<200) 

		count++;
	
		if(count==254)	

		PORTB |= (1 << PB2);  // rele_off
		}
	else{	

		count=0;
		}
}
Prílohy
DS1Z_QuickPrint17.png
schema.png
0

Používateľov profilový obrázok
lucky62
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1151
Dátum registrácie: 14 Feb 2012, 20:16
Bydlisko: Liptovský Mikuláš, SK

Re: AVR, nestabilní AREF

Príspevok od používateľa lucky62 » 14 Sep 2019, 13:06

Tá píla na obrázku je nameraná kde? Na tom TL431?...
0
....môj bazar....

...Nikdy sa nehádaj s blbcom...

Používateľov profilový obrázok
zdeno6505
Ultimate člen
Ultimate člen
Príspevky: 1524
Dátum registrácie: 04 Aug 2010, 00:00

Re: AVR, nestabilní AREF

Príspevok od používateľa zdeno6505 » 14 Sep 2019, 13:15

Skús vyhodiť C 100n medzi A a C TL431.
0
Amatéri postavili Noemovu archu, profesionáli Titanic.

DanielK
Stály člen
Stály člen
Príspevky: 282
Dátum registrácie: 28 Feb 2015, 14:55

Re: AVR, nestabilní AREF

Príspevok od používateľa DanielK » 14 Sep 2019, 13:24

Super, po odstranení C7 je to pěkně stabilní. Díky za pomoc.
0

Napísať odpoveď