Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef F_CPU
- #define F_CPU 8000000UL
- #endif
- #include <AVR/IO.h>
- #include <AVR/interrupt.h>
- #include <math.h>
- #include <util/delay.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define BAUD 9600
- #define ubrr 51
- const double pi = 3.14159265358979323846;
- int i=1,contor_led,u=0;
- volatile int j=1;
- volatile long suma=0, suma1=0, suma2=0, vit=0;
- //float y,z;
- unsigned char r,c;
- char buff[200];
- void initserial(void){
- SREG=SREG&127;
- UCSR0B=(1<<RXEN0)|(1<<TXEN0);//enable transmiter and reciever
- UBRR0H=(unsigned char) (ubrr>>8);//set transfer rate
- UBRR0L=(unsigned char) ubrr ;
- UCSR0C=0x86;//8 data bit+1 stop data
- UCSR0B=UCSR0B|192;//enable USART interupt TXCIE/RXCIE
- //UCSRA=UCSRA|128;//activare recieve complete interupt
- SREG=SREG|128;
- }
- int prints(char *string)
- {
- int count =0;
- while ((string[count]) != '\0')
- {
- while ( !( UCSR0A & (1<<UDRE0)) ); // Wait for empty transmit buffer
- UDR0 = (char)string[count++];
- }
- //TxByte('_');
- UCSR0A=UCSR0A & 32;
- return 0;
- }
- ISR (USART_TX_vect){
- }
- //****************** INTRERUPERE RECIEVE COMPLETE************
- ISR (USART_RX_vect){
- //ISR(USART_RXC_vect ){
- r=UDR0;
- OCR1A=r;
- }
- ISR(TIMER0_OVF_vect){
- //TCNT0=5;
- contor_led=contor_led+1;
- if(contor_led>60)
- {
- sprintf(buff,"%ld,%ld\r",suma2,vit);
- prints(buff);
- contor_led=0;
- }
- }
- int main(void)
- {
- DDRD=DDRD|224; // pin 7,6,5 config ca iesiri
- DDRB=DDRB|6; //pin pb1, pb2 ca iesiri
- DDRC=DDRC|28;///pc2,pc3,pc4
- DDRD=DDRD|8;//pd3
- TCCR1A=TCCR1A|160; //OC1A si OC1B ca pwm
- TCCR1B=19;//setare frecventa clock timer 64 prescaler
- ICR1=1250;//setare frecventa pwm
- //TCCR0A=(1<<WGM01);// Set CTC Bit
- TCCR0B=5;
- ;
- TIMSK0= TIMSK0|1;
- TCCR2A |= (1 << COM2B1);
- // set none-inverting mode
- TCCR2A |= (1 << WGM21) | (1 << WGM20);
- // set fast PWM Mode
- TCCR2B |= (1 << CS21);
- // set prescaler to 8 and starts PWM
- OCR2B = 0;
- // set PWM for 50% duty cycle
- initserial();
- SREG=SREG|128;
- OCR1A=50;
- //OCR1B=140;
- sprintf(buff," Buna ziua\n");
- prints(buff);
- ADMUX=1;
- ADCSRA= ADCSRA | 128; //ADC enable
- PORTD=PORTD|32;
- while(1)
- {
- TIMSK0= TIMSK0&254;
- ADMUX=0;
- suma=0;
- for(i=0;i<10;i++)
- {
- ADCSRA = ADCSRA | 64; // ADC start conversie
- _delay_us(100);
- suma=suma+ADC;
- _delay_ms(1);
- }
- suma=suma/10.0;
- ADMUX=1;
- suma1=0;
- for(i=0;i<10;i++)
- {
- ADCSRA = ADCSRA | 64; // ADC start conversie
- _delay_us(100);
- suma1=suma1+ADC;
- _delay_ms(1);
- }
- suma1=suma1/10.0;
- ADMUX=5;
- suma2=0;
- for(i=0;i<10;i++)
- {
- ADCSRA = ADCSRA | 64; // ADC start conversie
- _delay_us(100);
- suma2=suma2+ADC;
- _delay_ms(1);
- }
- suma2=suma2/10.0;
- TIMSK0= TIMSK0|1;
- //432 220
- //if(suma>425)
- vit=(suma1/4)*((suma-220)/212.0);
- //vit=(suma1+4*suma-1732)/4;
- if(vit>=255)
- vit=255;
- if(vit<=0)
- vit=0;
- if(suma>425)
- PORTC=PORTC&227;
- if(suma<420)
- PORTC=PORTC|4;
- if(suma<370)
- PORTC=PORTC|8;
- if(suma<310)
- PORTC=PORTC|16;
- if(suma<250)
- {PORTC=PORTC|28;
- _delay_ms(100);
- PORTC=PORTC&227;
- _delay_ms(100);
- }
- OCR2B=(int)vit;
- OCR1A=(int)vit*35/255.0+50;
- // sprintf(buff," %ld, %ld %ld\n",suma,suma1,vit);
- // prints(buff);
- //_delay_ms(2);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement