Sari la conținut
ELFORUM - Forumul electronistilor

[PROBLEMA]Citire de pe mai multi pini analogici


Vizitator fantomass

Postări Recomandate

Vizitator fantomass

Buna ziua.

 

Am o problema am un atmega88 si multi senzori si vreau sa citesc toti senzorii, pe rand si sa ii trimit la mine pe calculator pt a face diferite prelucrari de date cu ei. Am atasat un cod pe care l-am facut pt a citi senzorii(AVRStudio).

	#define AdcAllOff ADMUX |= 0x00;	#define Adc0On ADMUX |= (1<<MUX0);		#define Adc1On ADMUX |= (1<<REFS0)|(1<<MUX0);	#define Adc2On ADMUX |= (1<<REFS0)|(1<<MUX1);	#define Adc3On ADMUX |= (1<<REFS0)|(1<<MUX0)|(1<<MUX1);	#define Adc4On ADMUX |= (1<<REFS0)|(1<<MUX2);	#define Adc5On ADMUX |= (1<<REFS0)|(1<<MUX0)|(1<<MUX2);	#define Adc6On ADMUX |= (1<<REFS0)|(1<<MUX1)|(1<<MUX2);	#define Adc7On ADMUX |= (1<<REFS0)|(1<<MUX0)|(1<<MUX1)|(1<<MUX2);	uint16_t read_adc(uint8_t adc_input);uint16_t read_adc(uint8_t adc_input){	AdcAllOff;		switch(adc_input)	{		case 0:Adc0On;			break;		case 1:Adc1On;			break;		case 2:Adc2On;			break;		case 3:Adc3On;			break; 		case 4:Adc4On;			break;		case 5:Adc5On;			break;		case 6:Adc6On;			break;		case 7:Adc7On;			break;	}	ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADATE);	while ((ADCSRA & 0x10)==0);	ADCSRA|=0x10; return ADC;}void main(){//aici este o bucata de cod din main, nu l-am pus pe tot pt ca este f mareif(Temp=='2') 	{		Temperatura = (read_adc(2)*50000)/1024;		itoa(Temperatura, aaa, 10);//aaa este un char aaa[10];		USART_Transmit('*');		USART_TrStr(aaa,6);		Vib = '1';		Temp='1';	}	if(Vib=='2')	{		Vibratii = (read_adc(1)*50000)/1024;		itoa(Vibratii, aaa, 10);		USART_Transmit('&');		USART_TrStr(aaa,6);		Temp='1';		Vib='1';	}}
Problema nu esete ca nu pot citi de pe ei, iar cand cand citesc prima data o tensiune analogica totul merge bine, iar daca comut de ex pe vibratii tensiune incepe sa scada pana ajunge f mica.

Daca ma poate ajuta cineva as fi foarte recunoscator. Eu as vrea sa citesc de pe tot portul analogic.

Link spre comentariu
  • Răspunsuri 2
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nana

    1

Zile populare

Top autori în acest subiect

UITE AICI O SECventa de cod pentru citirea adc. eu folosesc in exemplu un atmega128 dar cred ca registri sunt aceasi in mare si pentru controlerul tau. codu e cam aiurea facut da merge.

#define ADC_VREF_TYPE 0x00void adc_init(void){      ADMUX=ADC_VREF_TYPE;//0x40 ADMUX = 0b01000000;       ADCSRA = 0x87; //aden si setarea prescalerului}int readadchan(char n){//read ch n of internal 10 bit a/d      //ADMUX = n;      //ADMUX = 0x40;  ADMUX=ADC_VREF_TYPE|n;      ADCSRA |= 0x40;     while((ADCSRA & 0x10) ==0){}; //wait for conv complete    	ADCSRA|=0x10;      return ADC;}
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări