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; }
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)