Advertisement
desdemona

smutek i lab 7 swim

Apr 11th, 2013
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.44 KB | None | 0 0
  1. /*
  2.  * jestem_spiaca.c
  3.  *
  4.  * Created: 2013-04-11 09:39:29
  5.  *  Author: student
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <lcd.h>
  10. #include <util/delay.h>
  11. #include <stdio.h>
  12. #include <avr/interrupt.h>
  13.  
  14. #ifndef _UTIL_DELAY_H_
  15. # define F_CPU 6000000UL // Częstotliwość zegara 6MHz
  16. # include <util\delay.h>
  17. #endif
  18. /* Dodatkowe procedury obsługi wyświetlacza LCD, wymagają dołączenia
  19. modułu <lcd.h>.
  20. Rejestry wyświetlacza dostępne są pod adresami:
  21. - rejestr sterujący 0x1F90 (COMM_LCD)
  22. char *COMM_LCD = 0x1F90;
  23. - rejestr danych 0x1F91 (DATA_LCD)
  24. char *DATA_LCD = 0x1F91; */
  25. #ifndef __PGMSPACE_H_
  26. # include <avr/pgmspace.h>
  27. #endif
  28. // Zerowanie wyświetlacza
  29. void lcd_clear(void);
  30. // Przesunięcie kursora
  31. void lcd_home(void);
  32. // Inicjalizacja wyświetlacza 5x7, 2 wiersze
  33. void init_lcd(void);
  34. // Przepisanie tekstu (koniec = 0xFF) z pamięci programu na wyświetlacz
  35. // Funkcja dopuszcza wykorzystanie znaku o kodzie 0x00
  36. // _adres - adres tekstu w pam. FLASH
  37. void disp_txt_P(const char* _adres);
  38. // Przepisanie tekstu (koniec = 0x00) z pamięci danych na wyświetlacz
  39. // _adres - adres tekstu w pam. RAM
  40. void disp_txt_D(char* _adres);
  41. //Implementacja
  42. void lcd_clear(void)
  43. {
  44.  pisz_com(0x01);
  45. }
  46. void lcd_home(void)
  47. {
  48.  pisz_com(0x02);
  49. }
  50. void init_lcd(void)
  51. {
  52.     _delay_ms(15);
  53.     COMM_LCD = 0x30;
  54.     _delay_ms(5);
  55.     COMM_LCD = 0x30;
  56.     _delay_ms(0.2);
  57.     COMM_LCD = 0x30;
  58.     _delay_ms(30);
  59.     COMM_LCD = 0x38; //Słowo danych 8-bitów, dwa wiersze, znak 7x5 pikseli
  60.     test_bf();
  61.     pisz_com(0x0C); //Włączenie wyświetlacza, bez kursora, bez
  62.     //migotania
  63.     lcd_clear();
  64.     pisz_com(0x06); //Wpisywanie znaków od lewej, autoinkrementacja
  65.     lcd_home();
  66. }
  67. void disp_txt_P(const char* _adres)
  68. {
  69.     volatile uint8_t al;
  70.     for (int i = 0; i<16; i++)
  71.     {
  72.         al = pgm_read_byte(&_adres[i]);
  73.         if (al == 0xFF) break;
  74.         pisz_ws(al);
  75.     }
  76. }
  77. void disp_txt_D(char* _adres)
  78. {
  79.     volatile uint8_t al;
  80.     for (int i = 0; i<16; i++)
  81.     {
  82.         al = _adres[i];
  83.         if (al == 0x00) break;
  84.         pisz_ws(al);
  85.     }
  86. }
  87.  
  88. char gora[] = "A/D Converter";
  89. char dol[30];
  90.  
  91.    
  92.     int pierw = 0;
  93.     int drog = 0;
  94.    
  95. ISR(ADC_vect)
  96. {
  97.         //ADCSRA = _BV(7) | _BV(6) | _BV(3);//praca ciągła -dostajemy przerwania
  98.         //ADCSRA = _BV(7) | _BV(6);//met2
  99.  
  100.        
  101.         pierw = 5 * ADC / 1024;
  102.         drog = (10 * 5 * ADC / 1024) % 10;
  103.  
  104.  
  105. }  
  106.  
  107.  
  108.  
  109. int main(void)
  110. {
  111.    
  112.     sei();
  113.  
  114.    
  115.     MCUCR =_BV(SRE) | _BV(SRW10);
  116.     XMCRA =_BV(SRW01) |_BV(SRW00) |_BV(SRW11);
  117.    
  118.     ADMUX = _BV(6) | _BV(0);//zmieniamy ostatni bit bo mamy 1
  119.  
  120.    
  121.     init_lcd();
  122.    
  123.                
  124.     ADCSRA = _BV(7) | _BV(6) | _BV(3);//praca ciągła -dostajemy przerwania
  125.    
  126.    
  127.    
  128.     //while(1)//METODA Z CIĄGŁĄ PRACĄ KONWERTERA
  129.     //{
  130.         ////TODO:: Please write your application code
  131. //
  132.         //
  133.         ////ADCSRA = _BV(7) | _BV(6) | _BV(5);//met1
  134.         //ADCSRA = _BV(7) | _BV(6);//met2
  135.         //
  136.         //lcd_clear();
  137.         //
  138.         //pisz_com(0x80);
  139.         //disp_txt_D(gora);
  140.         //
  141.         //ADCSRA |= _BV(4);
  142.         //
  143.         //pierw = 5 * ADC / 1024;
  144.         //drog = (10 * 5 * ADC / 1024) % 10;
  145. //
  146.         //sprintf(dol, "  UIN = %d.%dV",pierw,drog);
  147.         //
  148.         //
  149.         //pisz_com(0xC0);
  150.         //disp_txt_D(dol);
  151.         //
  152.         //
  153.         //_delay_ms(500);
  154.     //}
  155.     while(1)//METODA PRZERWANIOWA
  156.     {
  157.         //TODO:: Please write your application code
  158.  
  159.  
  160.    
  161.         ADCSRA |= _BV(6);//met2
  162.        
  163.         lcd_clear();
  164. //
  165. //     
  166.         pisz_com(0x80);
  167.         disp_txt_D(gora);
  168.        
  169.         sprintf(dol, "  UIN = %d.%dV",pierw,drog);
  170.        
  171.        
  172.         pisz_com(0xC0);
  173.         disp_txt_D(dol);
  174.        
  175.        
  176.         _delay_ms(500);
  177.     }
  178.    
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement