Poprawność schematu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 28 sty 2013, 9:03

Mam już coś takiego:

Kod: Zaznacz cały

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

uint16_t pomiar(uint8_t kanal) 
{    
   ADMUX = (ADMUX & ~0x07) | (kanal & 0x07);   // ustaw kanal 
    
   ADCSRA |= _BV(ADSC);    //rozpocznij konwersje 
   while(ADCSRA & _BV(ADSC));    //czekaj az skonczy 
   return ADCW;  //zmierzona wartosc 
       
} 

void pobierz() 
{
	PORTB = 110 000; //odpalamy diodę IR 
	_delay_ms(100);
	temp1 =  pomiar(4);   //Zwróć dane z fotorezystora IR // 4 kanał ADC3 - PB3 ??
	_delay_ms(100);
	PORTB = 111 000; //wyłączamy diodę IR
	return(temp1);
}

int main()
{
		
  	ADCSRA = _BV(ADEN) |_BV(ADPS2)|_BV(ADPS1); // preskaler 64, wlaczenie ADC  ??
  	
	DDRB = 111 000; //ustawiamy we/wy 
	PORTB = 111 000; //ustawiamy żeby wszystko było wyłączone
	
	PORTB = 001 000; //zapalamy diode LED1 i LED2
	_delay_ms(3000); //czeka 3 sekundy
	PORTB = 111 000; //gasimy diode LED1 i LED2
	
	_delay_ms(3600000); //czeka godzine
	
	while()
	{
		int podcz1 = pobierz();
		int podcz2 = podcz1;
	
		while(podcz2 - pocz1  > 0.5 || podcz1 - podcz2 > 0.5)
		{
			_delay_ms(60000);
			podcz2 = pobierz();
			}

			for(int a=0;a<5;a++)
			{
				PORTB = 001 000; //zapalamy diode LED1 i LED2
				_delay_ms(1000);
				PORTB = 111 000; //gasimy diode LED1 i LED2
			}
		}
		_delay_ms(1800000);
	}
}
Ale nie wiem czy dobrze te preskalery i kanał dobry ...

ODPOWIEDZ