Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <inttypes.h>
- #include <avr/io.h>
- #include <util/delay.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define F_CPU 12000000UL
- #define USART_BAUDRATE 9600 // soros kommunikacio sebessege: 9600 bps
- #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1) // UBRR
- /* Hardware: ATmega88 @ 12MHz
- PC Software:Hyper terminal @ 9600 baud, Nincs Paritas Bit, 1 Stop Bit, Flow Control = NONE */
- int LDR = 0;
- void KonfigUART();
- char UARTAdatFogad();
- void UARTAdatKuld(char data);
- void adc_config(void); //10 bites
- unsigned int adc_beolvas(unsigned char CH);
- int main(void) // Foprogram
- {
- char data;
- KonfigUART(); // UART Konfiguralasa
- DDRC &= ~(1<<PC0); // PC0-os lab bemenet (jobb LDR)
- PORTC = 0x00; // PORTC osszes laban a felhuzoellenallasok kikapcsolva
- adc_config(); // ADC beallitas lefuttatasa
- while(1)
- {
- data = UARTAdatFogad(); // A berekezo bajt fogadasa
- if(data == 'm') // Ha a fogadott bajt a 'm'-mel egyezik meg, megmerjuk a fenyerosseget
- {
- LDR = adc_beolvas(0);
- UARTAdatKuld('L');
- UARTAdatKuld('D');
- UARTAdatKuld('R');
- UARTAdatKuld(' ');
- UARTAdatKuld('A');
- UARTAdatKuld('D');
- UARTAdatKuld('C');
- UARTAdatKuld(':');
- UARTAdatKuld('0'+(LDR/100) % 10); // Szazasok ertekenek kiirasa
- UARTAdatKuld('0'+(LDR/10) % 10); // Tizesek ertekenek kiirasa
- UARTAdatKuld('0'+LDR % 10); // Egyesek ertekenek kiirasa
- UARTAdatKuld('\n'); // Kovetkezo sor
- UARTAdatKuld('\r'); // Ugras a sor elejere
- }
- }
- }
- void KonfigUART() // UART beallitasa
- {
- // 9600 bps soros kommunikacio sebesseg beallitasa
- UBRR0L = UBRR_ERTEK; // UBRR_ERTEK also 8 bitjenek betoltese az UBRR0L regiszterbe
- UBRR0H = (UBRR_ERTEK>>8); // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
- // Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
- UCSR0C |= (1 << UMSEL01) | (1 << UCSZ00) | (1 << UCSZ01);
- //Ado es Vevo aramkorok bekapcsolasa + az RX interrupt engedelyezese
- UCSR0B |= (1 << RXEN0) | (1 << TXEN0); //
- }
- char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
- {
- while(!(UCSR0A & (1<<RXC0))) // Varakozas amig nincs uj bejovo adat
- {
- //Varakozas
- }
- //Most mar van beerkezett adat, amit kiolvasunk a pufferbol
- return UDR0;
- }
- void UARTAdatKuld(char data) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
- {
- while(!(UCSR0A & (1<<UDRE0))) // Varakozas amig az Ado kesz nem lesz az adatkuldesre
- {
- //Varakozas
- }
- // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
- UDR0=data;
- }
- //************ADC 10 bit*********************
- void adc_config(void)// ADC konfiguralas (beallitas)
- {
- // Vcc mint referencia
- ADMUX |= (1<<REFS0);
- // ADC engedelyezese, ADC eloosztas
- ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); //12MHz/64=187500 ami 50-...200kHz közt van.
- }
- unsigned int adc_beolvas(unsigned char CH)
- {
- //ADC csatorna kivalasztasa
- ADMUX = (ADMUX & 0b11110000) | CH;
- // ADC konverzio elinditasa
- ADCSRA |= (1<<ADSC);
- // varas az atalakitasra
- while (ADCSRA & (1<<ADSC));
- // konverzió elindítás
- ADCSRA |= (1<<ADSC);
- // varas az atalakitasra
- while (ADCSRA & (1<<ADSC));
- // ADC ertek kiolvasasa
- return (ADCL | (ADCH<<8));
- }
Advertisement
Add Comment
Please, Sign In to add comment