Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.89 KB | None | 0 0
  1. /*
  2.  * main.c
  3.  *
  4.  *  Created on: 24 kwi 2018
  5.  *      Author: Kamil Goś
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10. #include "lcd44780.h"
  11. #define LEDs PORTD
  12.  
  13. uint16_t pomiar(uint8_t kanal);  
  14.  
  15. volatile unsigned short int adc_data; //Zmienna przechowujaca pomiar z ADC
  16. //Tablica stanów
  17. volatile const unsigned short int level[9] = {0b00000000,0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};
  18.  
  19.  
  20. //funkcja glowna
  21. int main (void) {
  22. DDRD = 0b11111111; //inicjalizacja portu D jako wyjście
  23.  
  24. lcd_init();
  25. ///////////////INICJALIZACJA MODULU ADC/////////////////////   
  26.     ADMUX |= (1<<REFS0)|(1<<ADLAR);  //wybor napiecia odniesienia VCC
  27.  
  28.     ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //aktywacja ADC (ADEN=1) i ustawienie preskalera na 128
  29. ////////////////////////////////////////////////////////////
  30.    
  31.  
  32.  
  33.  
  34. ////////////////INICJALIZACJA     TIMERA0 /////////////
  35.     TCCR0A |=(1<<WGM01); //wlaczenie trybu CTC timera 0
  36.     TCCR0B |=(1<<CS02) | (1<<CS00); //preskaler 1024
  37.     OCR0A=38; //(8000000/1024(preskaler)/200Hz)-1=38,06
  38.     TIMSK0 |=(1<<OCIE0A); //zezwolenie na przerwanie
  39. ////////////////////////////////////////////////////////
  40.  
  41.     sei(); //globalne pozwolenie na przerwania
  42.    
  43.     while(1){
  44.        
  45.     }  
  46. }
  47.  
  48. //funkcja realizująca pomiar napięcia na danym kanale ADC
  49. //wejscie: kanal-wybrany kanał ADC
  50. //wyjscie: zmierzone napiecie
  51. uint16_t pomiar(uint8_t kanal) {
  52.     ADMUX |= ((ADMUX & 0xF8) | kanal);  //ustawienie wybranego kanału ADC
  53.     ADCSRA |= (1<<ADSC); //START pomiaru
  54.     while(ADCSRA & (1<<ADSC)); //oczekiwanie na koniec pomiary (dopoki bit ADC=1)
  55.  
  56.     return (ADCH); //ADCW to para rejestrow ADCH i ADCL
  57. }
  58.  
  59.  
  60. //OBSŁUGA PRZERWANIA TIMERA0
  61. ISR(TIMER0_COMPA_vect) {
  62.    
  63.     adc_data=pomiar(1); //adc_data=(0-1024)
  64.     adc_data = adc_data;
  65.     lcd_cls();
  66.     lcd_int(adc_data);
  67.     LEDs=level[adc_data];
  68.    
  69.    
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement