コード例 #1
0
ファイル: main.c プロジェクト: MuhammadAnoulhadeed/EF_AVR_Lib
int main (void)
 {



	 U16_t Period;
	DDRD = 0x00;
	PORTD = 0x00;

	EF_void_TimerInit();
	EF_void_LCD_init();
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
//		_delay_ms(1000);
		EF_void_LCD_print(" EmbeddedFab");
		_delay_ms(1000);

//	GICR  = (1<<INT0);					// Enable INT0
//	MCUCR = (1 << ISC00) | (1 << ISC01);
	sei();
	EF_void_PWM_init(TIMER_0);
	EF_void_InputCapture_Init();
	EF_void_PWM_SetDutyCycle (90 ,TIMER_0);
	u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100);
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print_NUM( Period, 2);
	EF_void_LCD_print_NUM( u8Counter, 1);

	while(1)
	{
		PORTD &= ~(1 << 7);

//		_delay_ms(100);

		PORTD |= 1 << 7;
		_delay_ms(50);


	}

#if 0
	U8_t temp[2];
	U8_t number;


	DDRD  = 0xff;
	PORTD = 0x00;
	EF_void_LCD_init();
	EF_void_KeyPad_Init();

#if RTC_ENABLE
	void_TIMER_init();
	EF_void_DS1307_Init();
	sei();              /*Enable interrupts*/
	EF_void_DS1307_SetTime(17, 13, 30);
#endif

	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1,2);
	EF_void_LCD_print("Embedded");

#ifdef PWM_test
	/*don't forget init. the PWM*/
	EF_void_PWM_SetDutyCycle (0,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (23,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (50,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (80,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (100,TIMER_0);
	_delay_ms(500);
	_delay_ms(100);
#endif
#ifdef EEPROM_ENABLE
	EF_void_I2C_Init();
	EF_EEPROM_Write_Byte(6,0xA0,0x65);
	number = EF_EEPROM_Read_Byte(6,0xA0);
	if (0x15 == number)
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
	else
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
#endif
#ifdef INPUT_CAPTURE_TEST
	/* enable timer init and sei()*/
	EF_void_PWM_init(TIMER_0);
	EF_void_InputCapture_Init();
	EF_void_PWM_SetDutyCycle (90 ,TIMER_0);
	u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100);
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print_NUM( Period, 2);
	EF_void_LCD_print_NUM( u8Counter, 1);
#endif
#ifdef ADC_ENABLE
	/* don't forget ADC_init before while */
	u16DigitalValue = EF_u16_ADC_read(0);
	EF_void_LCD_Clear_Screen();
//		u16DigitalValue = (u16DigitalValue*5)/1024;
	itoa(u16DigitalValue, string, 10);
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print(string);

#endif
#ifdef EEPROM_INTERNAL
	EF_void_EEPROM_WriteByte(0, 0x99);
	number = EF_u8_EPROM_ReadByte (0);
	if (0x15 == number)
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
	else
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}

#endif
	while(1)
	{
#ifdef RTC_ENABLE
		if((SystemTick1MSec - TimeOut) > TIMEOUR_1SEC)
		{
			TimeOut   = SystemTick1MSec;
			EF_void_DS1307_GetTime(&Hours, &Mintes, &Seconds);
			LCD_update_time(Hours, (Mintes), (Seconds));
			PORTD = 0x7F;
		}
#endif
#ifdef WAVECOM
		/* using ISR */
		volatile U8_t gSecondTimeEntery     = 0;    	 /* flag to define  the second response to get SMS */
		volatile U8_t gNumberOfPunctuation  = 0;     	 /* flag to know when SMS begin */
		volatile U16_t gNumberOfRxBytes 	= 0;    	 /* save number of SMS bytes */
		volatile U16_t counter = 0;					 /* using in SMS array in ISR */

		U8_t gBuffer [50];
		Wavecom_Sms_cfg_str Wavecom_Sms_cfg ={ENABLE,ENABLE,ENABLE};
		char const SMS[] = "Again , it's ATMEGA \n :) ;)";
		Wavecom_Call_cfg_str Wavecom_Call_cfg = {DISABLE, DISABLE};
		Wavecom_ReadSms_cfg_str Wavecom_ReadSms_cfg ={0, All_list, 0 ,10 , (U8_t*)&gBuffer};
		sei();
	//	EF_B_Wavecom_SendSms((U8_t*)"01091067575",11,(U8_t*)SMS, strlen(SMS));
	//	EF_B_Wavecom_Call ((U8_t*)"01117079935",11);
	//	EF_B_Wavecom_ReadSms (&Wavecom_ReadSms_cfg);
		while (1)
		{
	//		PORTD ^= 0xc0;
			EF_B_Wavecom_InitModule();
			EF_B_Wavecom_InitSms(&Wavecom_Sms_cfg);
			EF_B_Wavecom_InitCall (&Wavecom_Call_cfg);
			_delay_ms(1000);
			EF_void_LCD_Clear_Screen();
			EF_void_LCD_goto(1, 1);
			_delay_ms(1000);
			EF_void_LCD_goto(2, 1);
	//		EF_B_Wavecom_CallRelease();

		}




		ISR (USART_RXC_vect)
		{
			 static volatile U8_t RX_data = 0;

			 RX_data = UDR;
			 if ((RX_data != '\r') && (RX_data != '\n'))
			 {
				 if (gSmsReadyFlag == 1)
				 {
					 if (gNumberOfPunctuation == 6)
					 {
						 gRX_SMS[counter] = RX_data;
						 //TODO modify this check.
						 if ( gRX_SMS[counter] == 'K' && gRX_SMS[counter-1] == 'O')
						 {
							 gNumberOfRxBytes   = counter-1;
							 counter=0;
							 gSmsReadyFlag     = 0;
							 gSecondTimeEntery = 0;
						 }
						 counter++;
					 }
					 else
					 {
						 if (RX_data == '\"')
						 {
							 gNumberOfPunctuation++;
						 }

					 }
				 }
				 else
				 {
					 EF_void_LCD_send_data (RX_data);
					 if (RX_data == 'K')
					 {
						 EF_void_LCD_send_data (' ');
					 }
				 }

			 }


		}




#endif

#ifdef SKYLAB_GPS
		double D_Longitude = 0;
		double D_Latitude  = 0;
		BOOLEAN b_Datavaild  = 0;
		EF_void_LCD_init();
		EF_B_SkyLabGPS_Init();
		//timer OS
		EF_void_TimerInit();
	    EF_void_LCD_Clear_Screen();
	    DDRD = 0xc0;
	    while (1)
	    {
	    	b_Datavaild = EF_B_SkyLabGPS_GetPosition( &D_Latitude , &D_Longitude);
	    	if (b_Datavaild == DATA_VAILD)
	    	{
	    		EF_B_SkyLabGPS_PrintPosition(  D_Latitude,  D_Longitude);
	    	}
	    	PORTD ^=0xc0;
	    }
#endif

#ifdef ULTRASONIC
	    /* it used timer of timer.h , be careful if you
			depend on this timer in anther application */
		EF_UltraSonic_Init();
		U8_t Distance_Cm ;
		while (1)
		{
			 Distance_Cm = EF_UltraSonic_GetDistance();
	#if INTERRUPT_BASED ==   0
			EF_void_LCD_Clear_Screen();
			itoa(Distance_Cm, string, 10);
			EF_void_LCD_goto(1, 2);
			EF_void_LCD_print(string);
	#endif
			_delay_ms (20);
		}
#endif
#if 1
		number = EF_u8_KeyPad_Scan();
		if(number != 0)
		{
			EF_void_LCD_goto(2,1);
			itoa(number,temp,10);
			EF_void_LCD_print(temp);
		}
#endif
	}
#endif
	return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: pawelmilewski/projekt_pup
int main(void)
{//petla glowna
		DDRE=0x3C; // port e jako wyjœcie 00111100
		PORTE=0x3C;
		DDRB=0xFD;
		PORTB=0xFD;
		//DDRG=0b00000000;//0x02;
		//PORTG=0b0000010;
		DDRC=0x7F;
		PORTC=0x7F;
		DDRD=0xFC;
		PORTD=0xFF;
		//ADC
		PORTF=0xFA;
		//
		PORTG = (1<<SET_HOUR | 1<<SET_MINUTE); //piny zegara - zmiana wartosci
		//######## konfiguracja ADC ##############
		ADCSRA=(1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
		//ustawienie bitu ADEN=1 - wlaczenie  przetwornika A/C				
		// ustawienie preskalera na 64 // ustawienie
		// czestotliwosc taktowania przetwornika A/C, f=8Mhz/64
		ADMUX=(0<<REFS1)|(0<<REFS0); 	// wybor zewnetrznego napiecia odniesienia
		//###########################################
		//######## konfiguracja timera0 ##############
		TIMSK |= (1<<TOIE2)|(1<<TOIE0)|1<<OCIE1A;          //Przerwanie overflow (przepe³nienie timera)//ICIE1A ---- ZEGAR
		TCCR0 |= (1<<CS02) | (1<<CS01) | (0<<CS00); // Ÿród³em CLK, preskaler 256
		TCNT0 = timer0;//          //Pocz¹tkowa wartoœæ licznika
		//###########################################
		//######## konfiguracja timera2 ##############
		TCCR2 |= (0<<CS22) | (1<<CS21) | (1<<CS20); // Ÿród³em CLK, preskaler 32
		TCNT2 = timer2;//          //Pocz¹tkowa wartoœæ licznika
		//###########################################		
		//######## konfiguracja timera1 ##############
		TCCR1B = (1<<CS12|1<<WGM12);
		OCR1A = 3053-1; //dla 8Mhz ////// 0,5 s
		//###########################################	
		SK1_EN_1; //poczatkowe wartosci
		SK1_DIR_1;
		SK2_EN_1;
		SK2_DIR_1;
		TR_SPRE_0;
		TR_WENT_0;
		TR_EOWZ_ZBIO_0;
		TR_EOZW_SPOW_0;
		TR_A_0;
		TR_EOZR_TUBA_0;
		LCD_Initalize(); //inicjalizacja LCD
		LCD_GoTo(0,0);
		LCD_WriteText("Ps000rpm|Ak00.0V");
		LCD_GoTo(0,1);
		LCD_WriteText("Sp0|___|");
		LCD_GoTo(8,1);
		LCD_WriteText(time);
	for(;;)
	{
		if(bit_is_clear(PIND, ON_OFF_ALL)&~ON_OFF&&cisON_OFF&&bit_is_clear(PINE, SPR_PRES))//uruchomienie
		{
			ON_OFF=true;//gl petla
			cispON_OFF=true;//flaga spr cisnienia
			poczekaj=false;//flaga
		}
		if (wylON_OFF)//wylaczenie
		{
			cli();
			SK1_EN_1;
			SK2_EN_1;
			TR_SPRE_0;
			TR_WENT_0;
			TR_EOWZ_ZBIO_0;
			TR_EOZW_SPOW_0;
			TR_A_0;
			LCD_GoTo(2,0);
			LCD_WriteText("000");
			ON_OFF=false;
			_delay_ms(3000);
			TR_EOZR_TUBA_0;
			wylON_OFF = false;
		}
		//SPR CISNIENIA
		if(bit_is_clear(PINE, SPR_PRES))//cisnienie ok
		{
			TR_SPRE_0;
			LCD_GoTo(2,1);
			LCD_WriteText("0");
			cisON_OFF=true;
			poczekaj=false;
		}
		if(bit_is_set(PINE, SPR_PRES)&&cispON_OFF)//cisnienie za niskie
		{
			TR_SPRE_1;
			LCD_GoTo(2,1);
			LCD_WriteText("1");		
			if (poczekaj)
			{
				_delay_ms(5000);	//czas potrzebny na uzupelnienie ukladu
				poczekaj=false;
			}
			cisON_OFF=false;
		}
		//
		if(bit_is_clear(PIND, O_O_A))//upuszczenie powietrza, krtorkie - tuba, dlugie - wszystko
		{
			cli();//Globalne wylaczenie przerwañ
			LCD_GoTo(2,0);
			LCD_WriteText("000");			
			TR_EOZR_TUBA_1;
			TR_EOZW_SPOW_1;
			LCD_GoTo(4,1);
			LCD_WriteText("T__");
			SK1_EN_1;
			SK2_EN_1;
			TR_SPRE_0;
			LCD_GoTo(2,1);
			LCD_WriteText("0");			
			TR_WENT_0;
			TR_EOWZ_ZBIO_0;
			TR_A_0;
			ON_OFF=false;
			_delay_ms(5000);
			cispON_OFF=false;
			if (bit_is_clear(PIND, O_O_A))
			{	
				TR_EOZR_TUBA_1;
				TR_EOWZ_ZBIO_1;
				TR_EOZW_SPOW_1;
				LCD_GoTo(4,1);
				LCD_WriteText("TZP");				
				_delay_ms(4000);
				TR_EOZR_TUBA_0;
				TR_EOWZ_ZBIO_0;
				TR_EOZW_SPOW_0;
				LCD_GoTo(4,1);
				LCD_WriteText("___");	
			}
			TR_EOZR_TUBA_0;
			TR_EOWZ_ZBIO_0;
			TR_EOZW_SPOW_0;
			LCD_GoTo(4,1);
			LCD_WriteText("___");
			poczekaj=true;
			ON_OFF = false;
			wylON_OFF = false;
			cisON_OFF = false;
			cispON_OFF = true;	
		}
		if(ON_OFF)
		{
			sei();//Globalne uruchomienie przerwañ
			SK1_EN_0; //poczatkowe wartosci
			SK1_DIR_1;
			SK2_DIR_1;
			TR_WENT_1;
			TR_EOWZ_ZBIO_0;
			TR_EOZW_SPOW_0;
			TR_A_0;
			TR_EOZR_TUBA_1;	
			//----ZEGAR
			if(!(PING & (1<<SET_HOUR)))
			{
				hours++;
				if(hours > 23)
				hours = 0;
			}
			if(!(PING & (1<<SET_MINUTE)))
			{
				minutes++;
				if(minutes > 59)
				minutes = 0;
			}

			if (AktuADC)
			{
				ADMUX=(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);			// wyb?r kana?u ADC0
				while(ADCSRA & (1<<ADSC));						//czeka na zako?czenie konwersji
				ADCSRA |= (1<<ADSC);							//uruchomienie pojedynczej konwersji
				pomiar_ADC0=ADC;
				ADMUX=0;
				ADMUX=(0<<MUX3)|(0<<MUX2)|(1<<MUX1)|(0<<MUX0);			// wyb?r kana?u ADC1
				while(ADCSRA & (1<<ADSC));						//czeka na zako?czenie konwersji
				ADCSRA |= (1<<ADSC);							//uruchomienie pojedynczej konwersji
				pomiar_ADC2=ADC;
				ADMUX=0;			
				AktuADC = false;
			}
			if (ChangedADC)
			{
				b++;
				tablicarpm[b]=pomiar_ADC0;
				tablicawol[b]=pomiar_ADC2;
				if(b==11)
				{	
					sr_ADC0=(tablicarpm[1]+tablicarpm[2]+tablicarpm[3]+tablicarpm[4]+tablicarpm[5]+tablicarpm[6]+tablicarpm[7]+tablicarpm[8]+tablicarpm[9]+tablicarpm[10]+tablicarpm[11])/b;
					sr_ADC2=(tablicawol[1]+tablicawol[2]+tablicawol[3]+tablicawol[4]+tablicawol[5]+tablicawol[6]+tablicawol[7]+tablicawol[8]+tablicawol[9]+tablicawol[10]+tablicawol[11])/b;
					timer2=sr_ADC0/5;
					obroty2=9375/((255-timer2));
					wolt=0.0138*sr_ADC2-0.0332;
					b=0;					
				}
				ChangedADC = false;
			}
			if(timeChanged05)
			{		
				LCD_GoTo(0,0);
				LCD_WriteText("Ps00_rpm|Ak00.0V");
				itoa(obroty2, bufor, 10);
				LCD_GoTo(2,0);
				LCD_WriteText(bufor);
				dtostrf(wolt, 3, 1, bufor2);
				LCD_GoTo(11,0);
				LCD_WriteText(bufor2);
				timeChanged05 = false;
			}
			if(timeChanged)
			{	
				if (obroty2<38)
				{
					SK2_EN_1;
					LCD_GoTo(2,0);
					LCD_WriteText("000");
				}
				else
				{
					SK2_EN_0;
				}			
				LCD_update_time();
				timeChanged = false;
			}
		}//if(ON_OFF)
	}//for(;;)	
}//main(void)