Advertisement
Guest User

Untitled

a guest
May 21st, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. //polaczenie dla LCD: PB7..0 <- dane, PA4 <- RS, PA6 <- E
  2. //podlaczenie napiecia mierzonego PA0 <-V - narazie nie
  3.  
  4. #include <avr/io.h>
  5. #define F_CPU 16000000
  6. #include <util/delay.h>
  7.  
  8. void InicjalizacjaLCD(void);
  9. void InicjalizacjaADC(void);
  10. void PomiarADC(void);
  11. void WyswietlanieLCD(char*, int8_t);
  12. void ZapisLCD(int8_t);
  13.  
  14. char napiecie[4] = "U = "; //napis poczatkowy do wyswietlenia
  15. int8_t napjedascii = 0x30; //pozycha jednosci woltow
  16. char kropka[1]= "."; //kropka dziesietna
  17. int8_t napdziesascii = 0x30; //pozycja dziesietnych czesci woltow
  18. int8_t napsetascii = 0x30; //pozycja setnych czesci woltow
  19. char napieciee[4] = " [V]"; //napis koncowy do wyswietlania
  20.  
  21. int main(void)
  22. {
  23. InicjalizacjaLCD();
  24.  
  25. InicjalizacjaADC();
  26.  
  27. for(;;) //odswiezanie wyswietlania
  28. {
  29. PomiarADC();
  30.  
  31. PORTA &= ~(1<<PA4); //RS<-0 slowo sterujace
  32.  
  33. ZapisLCD(1);
  34.  
  35. _delay_ms(1.64);
  36.  
  37. WyswietlanieLCD(napiecie,4);
  38.  
  39. ZapisLCD(napjedascii);
  40.  
  41. WyswietlanieLCD(kropka,1);
  42.  
  43. ZapisLCD(napdziesascii);
  44.  
  45. ZapisLCD(napsetascii);
  46.  
  47. WyswietlanieLCD(napieciee,4);
  48.  
  49. _delay_ms(250);
  50. }
  51.  
  52. return 0;
  53.  
  54. }
  55.  
  56. void InicjalizacjaLCD()
  57. {
  58. DDRB=0xff; //wyjscie do lcd
  59. DDRA |= (1<<PA4)|(1<<PA6); //wyjscie do sterowania
  60.  
  61. PORTB = 0; //PB7..0 <-0
  62.  
  63. PORTA &= ~(1<<PA4); //slowa sterujace
  64. PORTA &= ~(1<<PA6); //E <- 0
  65.  
  66. _delay_ms(40);
  67.  
  68. PORTA |= (1<<PA6); //E<-1
  69. PORTB = 0b00110000; //1-sza sekwencja 0011****
  70. PORTA &= ~(1<<PA6); //E <-0
  71.  
  72. _delay_ms(4.1);
  73.  
  74. PORTA |= (1<<PA6); //E<- 1
  75. //2 sekwencja 0011****
  76. PORTA &= ~(1<<PA6); //E<-0
  77.  
  78. _delay_ms(100);
  79.  
  80. PORTA |= (1<<PA6); // E<-1
  81. //3 sekwencja 0011****
  82. PORTA &= ~(1<<PA6); // E<-0
  83.  
  84. _delay_ms(100);
  85.  
  86. ZapisLCD(0b00111100); //wywolanie funkcji zapis do LCD
  87. //8 bitowe slowo, 2 wiersze, matryca 5x10
  88.  
  89. ZapisLCD(0b00001111); //wlaczanie wyswietlacza, kursor aktywny i miga
  90.  
  91. ZapisLCD(1); //czyszczenie wyswietlacza
  92.  
  93. _delay_ms(1.64);
  94.  
  95. ZapisLCD(0b00000110); //adres inkrementowany, przesuwanie kursora
  96.  
  97. }
  98.  
  99.  
  100. void WyswietlanieLCD(char * co, int8_t ile) //definicja funkcji wyświetlania
  101. {
  102. int8_t k = 0;
  103. PORTA |= (1<<PA4); //RS <-1 teraz znaki
  104.  
  105. while(k<ile)
  106. {
  107. ZapisLCD(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
  108. k++;
  109. }
  110. }
  111.  
  112. void ZapisLCD(int8_t bajt) //definicja funkcji zapisu
  113. {
  114. PORTA |=(1<<PA6); //E<-1
  115. PORTB = bajt;
  116. asm volatile("nop"); //male opoznienie
  117. PORTA &= ~(1<<PA6); //E<-0 zapis opadajacym zboczem
  118. _delay_us(40);
  119. }
  120.  
  121. void InicjalizacjaADC()
  122. {
  123. DDRA &= ~(1<<PA0); //wejście dla adc0
  124. ADMUX = (1<<REFS1) | (1<<REFS0); //wewnetrne zrodlo, 2.56 V ...wybor kanalu adc0
  125. ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); //wlaczenie adc preskaler /32
  126. }
  127.  
  128. void PomiarADC()
  129. {
  130. int16_t nap =0;
  131. int8_t napjed = 0;
  132. int8_t napdzies = 0;
  133. int8_t napset = 0;
  134. ADCSRA |= (1<<ADSC); //start pojedynczych konwersji
  135. while(bit_is_set(ADCSRA,ADSC)); //program czeka na zakonczenie operacji
  136.  
  137. nap = ADC/4; //konwersja na bcd
  138. napjed = nap/100; //poz setek to jednosci voltow
  139. napjedascii = napjed + 0x30;
  140. napdzies = (nap - napjed*100)/10; //poz dziesiatek to dziesietne czesci volta
  141. napdziesascii = napdzies + 0x30;
  142. napset = nap - napjed*100 - napdzies*10; //poz jednosci to setne czesci volta
  143. napsetascii = napset + 0x30;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement