Guest User

Untitled

a guest
Feb 25th, 2015
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.88 KB | None | 0 0
  1.     #include <avr/io.h>
  2.         #include <inttypes.h>
  3.     #include <avr/io.h>
  4.     #include <util/delay.h>
  5.     #include <stdio.h>
  6.     #include <stdlib.h>
  7.     #include <string.h>
  8.  
  9.     #define F_CPU 12000000UL
  10.     #define USART_BAUDRATE 9600  // soros kommunikacio sebessege: 9600 bps
  11.         #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1) // UBRR
  12.  
  13.     /*  Hardware: ATmega88 @ 12MHz
  14.     PC Software:Hyper terminal @ 9600 baud, Nincs Paritas Bit, 1 Stop Bit, Flow Control = NONE */
  15.     int LDR = 0;
  16.  
  17.     void KonfigUART();
  18.     char UARTAdatFogad();
  19.     void UARTAdatKuld(char data);
  20.     void adc_config(void);  //10 bites
  21.     unsigned int adc_beolvas(unsigned char CH);
  22.  
  23.  
  24.  
  25.  
  26.     int main(void)  // Foprogram
  27.     {
  28.        char data;
  29.  
  30.        KonfigUART();   // UART Konfiguralasa
  31.  
  32.        DDRC &= ~(1<<PC0);    // PC0-os lab bemenet (jobb LDR)
  33.        PORTC = 0x00;    // PORTC osszes laban a felhuzoellenallasok kikapcsolva
  34.  
  35.         adc_config();    // ADC beallitas lefuttatasa
  36.  
  37.        while(1)
  38.        {
  39.             data = UARTAdatFogad();  // A berekezo bajt fogadasa
  40.  
  41.             if(data == 'm') // Ha a fogadott bajt a 'm'-mel egyezik meg, megmerjuk a fenyerosseget
  42.             {
  43.                 LDR = adc_beolvas(0);
  44.                 UARTAdatKuld('L');
  45.                 UARTAdatKuld('D');
  46.                 UARTAdatKuld('R');
  47.                 UARTAdatKuld(' ');
  48.                 UARTAdatKuld('A');
  49.                 UARTAdatKuld('D');
  50.                 UARTAdatKuld('C');
  51.                 UARTAdatKuld(':');
  52.                 UARTAdatKuld('0'+(LDR/100) % 10);  // Szazasok ertekenek kiirasa
  53.                 UARTAdatKuld('0'+(LDR/10) % 10);   // Tizesek ertekenek kiirasa
  54.                 UARTAdatKuld('0'+LDR % 10);    // Egyesek ertekenek kiirasa
  55.                 UARTAdatKuld('\n');     // Kovetkezo sor
  56.                 UARTAdatKuld('\r');     // Ugras a sor elejere
  57.             }
  58.        }
  59.     }
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. void KonfigUART() // UART beallitasa
  68.     {
  69.        // 9600 bps soros kommunikacio sebesseg beallitasa
  70.        UBRR0L = UBRR_ERTEK;    // UBRR_ERTEK also 8 bitjenek betoltese az UBRR0L regiszterbe
  71.        UBRR0H = (UBRR_ERTEK>>8);   // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
  72.        // Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
  73.        UCSR0C |= (1 << UMSEL01) | (1 << UCSZ00) | (1 << UCSZ01);
  74.        //Ado es Vevo aramkorok bekapcsolasa + az RX interrupt engedelyezese
  75.        UCSR0B |= (1 << RXEN0) | (1 << TXEN0);   //
  76.     }
  77.  
  78.     char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
  79.     {
  80.        while(!(UCSR0A & (1<<RXC0)))  // Varakozas amig nincs uj bejovo adat
  81.        {
  82.           //Varakozas
  83.        }
  84.        //Most mar van beerkezett adat, amit kiolvasunk a pufferbol
  85.        return UDR0;
  86.     }
  87.  
  88.     void UARTAdatKuld(char data) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
  89.  
  90.     {
  91.        while(!(UCSR0A & (1<<UDRE0)))  // Varakozas amig az Ado kesz nem lesz az adatkuldesre
  92.        {
  93.           //Varakozas
  94.        }
  95.        // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
  96.        UDR0=data;
  97.     }
  98.  
  99. //************ADC 10 bit*********************
  100. void adc_config(void)// ADC konfiguralas (beallitas)
  101.     {
  102.         // Vcc mint referencia
  103.         ADMUX |= (1<<REFS0);    
  104.         // ADC engedelyezese, ADC eloosztas
  105.         ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); //12MHz/64=187500 ami 50-...200kHz közt van.
  106.     }
  107.      
  108. unsigned int adc_beolvas(unsigned char CH)
  109.     {
  110.         //ADC csatorna kivalasztasa
  111.         ADMUX = (ADMUX & 0b11110000) | CH;    
  112.         // ADC konverzio elinditasa
  113.         ADCSRA |= (1<<ADSC);  
  114.         // varas az atalakitasra  
  115.         while (ADCSRA & (1<<ADSC));  
  116.         // konverzió elindítás  
  117.         ADCSRA |= (1<<ADSC);
  118.         // varas az atalakitasra        
  119.         while (ADCSRA & (1<<ADSC));    
  120.         // ADC ertek kiolvasasa
  121.         return (ADCL | (ADCH<<8));    
  122.     }
Advertisement
Add Comment
Please, Sign In to add comment