Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * pwm.c
- *
- * Created: 30.05.2019 14:28:36
- * Author : sala204
- */
- /*
- * USART.c
- *
- * Created: 25.04.2019 16:19:11
- * Author : sala204
- */
- #define F_CPU 16000000UL
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <util/atomic.h>
- #include <util/delay.h>
- #include <string.h>
- #include <stdio.h>
- #define FOSC 1843200// Clock Speed
- #define BAUD 9600
- #define MYUBRR FOSC/16/BAUD-1
- volatile char przerwanie;
- volatile unsigned char przetwornik;
- //volatile unsigned char przetwornik2;
- void sterowanie(unsigned char ster);
- void USART_Init(){
- UBRR0H = (unsigned char)0;
- UBRR0L = (unsigned char)16;
- UCSR0B = (1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0);
- UCSR0C |= (3<<UCSZ00);
- UCSR0A |= (1 << U2X0);
- }
- void USART_Transmit( unsigned char data )
- {
- while( !( UCSR0A & (1<<UDRE0)) );
- UDR0 = data;
- }
- void USART_Transmit_String(char* stringToSend)
- {
- for(int i = 0; stringToSend[i] != '\0'; i++)
- {
- USART_Transmit(stringToSend[i]);
- }
- }
- unsigned char USART_Receive( void )
- {
- while ( !(UCSR0A & (1<<RXC0)) ) ;
- return UDR0;
- }
- ISR(USART0_RX_vect)
- {
- przerwanie = USART_Receive();
- sterowanie(przerwanie);
- }
- void ADC_Init()
- {
- ADMUX= (0<<REFS1) | (1<<REFS0) | (1<<ADLAR);
- DIDR0 = (1<<ADC0D);
- ADCSRA = (1<<ADEN) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADSC);
- }
- /*
- ISR(ADC_vect)
- {
- przetwornik = USART_Receive(przerwanie);
- sterowanie();
- }*/
- void na_char(int liczba, unsigned char* tab)
- {
- int setki, dziesiatki, jednosci;
- if(liczba >= 100)
- {
- jednosci = liczba % 10;
- liczba = liczba / 10;
- dziesiatki = liczba % 10;
- liczba = liczba / 10;
- setki = liczba;
- tab[2] = jednosci + 48;
- tab[1] = dziesiatki + 48;
- tab[0] = setki + 48;
- }
- else if(liczba >= 10)
- {
- jednosci = liczba % 10;
- liczba = liczba / 10;
- dziesiatki = liczba % 10;
- liczba = liczba / 10;
- tab[2] = jednosci + 48;
- tab[1] = dziesiatki + 48;
- tab[0] = ' ';
- }
- else
- {
- tab[2] = liczba + 48;
- tab[1] = ' ';
- tab[0] = ' ';
- }
- }
- int czujnik_przod()
- {
- if(((PINJ & (1<<PJ0)) == 0) || ((PINJ & (1<<PJ1))==0))
- return 1;
- else return 0;
- }
- int czujnik_tyl()
- {
- }
- void lewy_kierunek()
- {
- PORTG |= (1<<PG5); //zapal
- _delay_ms(1000); //poczekaj sekunde
- PORTG &= ~(1<<PG5); //zgas
- }
- void prawy_kierunek()
- {
- PORTB |= (1<<PB6); //zapal
- _delay_ms(1000); //poczekaj sekunde
- PORTB &= ~(1<<PB6); //zgas
- }
- void sterowanie(unsigned char ster)
- {
- DDRE |= (1 << PE4); //PH LEFT - sterowanie silnikiem lewym
- DDRE |= (1 << PE5); //PH RGHT - sterowanie silnikiem prawym
- DDRH |= (1 << PH6); //EN RGHT - wlaczenie silnika prawego
- DDRB |= (1 << PB4); //EN LEFT - wlaczanie silnika lewego
- DDRE |= (1 << PE3); //swiatla tyl
- DDRH |= (1 << PH3); //swiatla przod
- TCCR2A |= (0 << WGM22) | (1 << WGM21) | (1 << WGM20) | (1 << COM2A1) | (0 << COM2A0) | (1 << COM2B1) | (0 << COM2B0); // wlaczenie PWM
- TCCR2B |= (1 << CS22) | (0 << CS21) | (0 << CS20); // prescaler clk/64
- int lewy, prawy;
- unsigned char wiadomosc[4];
- wiadomosc[3] = 0; //ostatni bit wiadomosci ustawiony na 0
- DDRB |= (1<<PB6);
- DDRG |= (1<<PG5);
- DDRH |= (1 << PH3);
- DDRE |= (1 << PE3);
- DDRJ &= (3<<PJ0);
- switch(ster)
- {
- case 'F':
- if(czujnik_przod()==1)
- {
- OCR2A = 0;
- OCR2B = 0;
- }
- else
- {
- PORTE |= (1 << PE4);
- PORTE |= (1 << PE5);
- PORTH |= (1 << PH3); //swiatla przod
- PORTE &= ~(1 << PE3); //gaszenie swiatel tyl
- OCR2A = 100;
- OCR2B = 100;
- }
- break;
- case 'S': //stop pojazdu
- OCR2A = 0;
- OCR2B = 0;
- break;
- case 'B': //jazda do tyłu
- PORTE &= ~(1 << PE4);
- PORTE &= ~(1 << PE5);
- PORTH &= ~(1 << PH3); //gaszenie swiatla przod
- PORTE |= (1 << PE3); //zapalanie swiatel tyl
- OCR2A = 100;
- OCR2B = 100;
- break;
- case 'L': //jazda w lewo
- //lewy_kierunek();
- lewy = OCR2A;
- prawy = OCR2B;
- if(lewy > prawy)
- {
- lewy = prawy;
- prawy = prawy + 50;
- OCR2B = prawy;
- }
- else
- {
- prawy = prawy + 50;
- OCR2B = prawy;
- }
- break;
- case 'R': //jazda w prawo
- //prawy_kierunek();
- lewy = OCR2A;
- prawy = OCR2B;
- if(prawy > lewy)
- {
- prawy = lewy;
- lewy = lewy + 50;
- OCR2A = lewy;
- }
- else
- {
- lewy = lewy + 50;
- OCR2A = lewy;
- }
- break;
- case 'U': //zwieksz predkosc
- if((OCR2A>245) || (OCR2B>245))
- {
- OCR2A = 255;
- OCR2B = 255;
- }
- else
- {
- OCR2A = OCR2A + 10;
- OCR2B = OCR2B + 10;
- }
- break;
- case 'D': //zmniejsz predkosc
- if((OCR2A>=10) && (OCR2B>=10))
- {
- OCR2A = OCR2A - 10;
- OCR2B = OCR2B - 10;
- na_char(OCR2A, wiadomosc);
- USART_Transmit_String(wiadomosc);
- USART_Transmit(13);
- }
- break;
- }
- }
- int main(void)
- {
- USART_Init ( MYUBRR );
- ADC_Init();
- sei();
- sterowanie(przerwanie);
- while (1)
- {
- }
- }
- /*
- #include <avr/io.h>
- int main(void)
- {
- DDRE |= (1 << PE4); //PH LEFT - sterowanie silnikiem lewym
- DDRE |= (1 << PE5); //PH RGHT - sterowanie silnikiem prawym
- DDRH |= (1 << PH6); //EN RGHT - wlaczenie silnika prawego
- DDRB |= (1 << PB4); //EN LEFT - wlaczanie silnika lewego
- TCCR2A |= (0 << WGM22) | (1 << WGM21) | (1 << WGM20) | (1 << COM2A1) | (0 << COM2A0) | (1 << COM2B1) | (0 << COM2B0); // wlaczenie PWM
- TCCR2B |= (1 << CS22) | (0 << CS21) | (0 << CS20); // prescaler clk/64
- OCR2A = 250;
- OCR2B = 50;
- while (1)
- {
- }
- }
- */
- //ADC
- /*
- ADC_TMP = przetwornik;
- roznica = abs(ADC_TMP - ADC_TMP2);
- if(roznica >= 10)
- {
- na_char(przetwornik, wiadomosc);
- USART_Transmit_String(tekst);
- USART_Transmit_String(wiadomosc);
- USART_Transmit(13);
- ADC_TMP2 = ADC_TMP;
- OCR2A = ADC_TMP;
- OCR2B = ADC_TMP;
- } */
- //przerwanie = USART_Receive();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement