Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //polaczenie dla LCD: PB7..0 <- dane, PA4 <- RS, PA6 <- E
- //podlaczenie napiecia mierzonego PA0 <-V - narazie nie
- #include <avr/io.h>
- #define F_CPU 16000000
- #include <util/delay.h>
- void InicjalizacjaLCD(void);
- void InicjalizacjaADC(void);
- void PomiarADC(void);
- void WyswietlanieLCD(char*, int8_t);
- void ZapisLCD(int8_t);
- char napiecie[4] = "U = "; //napis poczatkowy do wyswietlenia
- int8_t napjedascii = 0x30; //pozycha jednosci woltow
- char kropka[1]= "."; //kropka dziesietna
- int8_t napdziesascii = 0x30; //pozycja dziesietnych czesci woltow
- int8_t napsetascii = 0x30; //pozycja setnych czesci woltow
- char napieciee[4] = " [V]"; //napis koncowy do wyswietlania
- int main(void)
- {
- InicjalizacjaLCD();
- InicjalizacjaADC();
- for(;;) //odswiezanie wyswietlania
- {
- PomiarADC();
- PORTA &= ~(1<<PA4); //RS<-0 slowo sterujace
- ZapisLCD(1);
- _delay_ms(1.64);
- WyswietlanieLCD(napiecie,4);
- ZapisLCD(napjedascii);
- WyswietlanieLCD(kropka,1);
- ZapisLCD(napdziesascii);
- ZapisLCD(napsetascii);
- WyswietlanieLCD(napieciee,4);
- _delay_ms(250);
- }
- return 0;
- }
- void InicjalizacjaLCD()
- {
- DDRB=0xff; //wyjscie do lcd
- DDRA |= (1<<PA4)|(1<<PA6); //wyjscie do sterowania
- PORTB = 0; //PB7..0 <-0
- PORTA &= ~(1<<PA4); //slowa sterujace
- PORTA &= ~(1<<PA6); //E <- 0
- _delay_ms(40);
- PORTA |= (1<<PA6); //E<-1
- PORTB = 0b00110000; //1-sza sekwencja 0011****
- PORTA &= ~(1<<PA6); //E <-0
- _delay_ms(4.1);
- PORTA |= (1<<PA6); //E<- 1
- //2 sekwencja 0011****
- PORTA &= ~(1<<PA6); //E<-0
- _delay_ms(100);
- PORTA |= (1<<PA6); // E<-1
- //3 sekwencja 0011****
- PORTA &= ~(1<<PA6); // E<-0
- _delay_ms(100);
- ZapisLCD(0b00111100); //wywolanie funkcji zapis do LCD
- //8 bitowe slowo, 2 wiersze, matryca 5x10
- ZapisLCD(0b00001111); //wlaczanie wyswietlacza, kursor aktywny i miga
- ZapisLCD(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- ZapisLCD(0b00000110); //adres inkrementowany, przesuwanie kursora
- }
- void WyswietlanieLCD(char * co, int8_t ile) //definicja funkcji wyświetlania
- {
- int8_t k = 0;
- PORTA |= (1<<PA4); //RS <-1 teraz znaki
- while(k<ile)
- {
- ZapisLCD(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
- k++;
- }
- }
- void ZapisLCD(int8_t bajt) //definicja funkcji zapisu
- {
- PORTA |=(1<<PA6); //E<-1
- PORTB = bajt;
- asm volatile("nop"); //male opoznienie
- PORTA &= ~(1<<PA6); //E<-0 zapis opadajacym zboczem
- _delay_us(40);
- }
- void InicjalizacjaADC()
- {
- DDRA &= ~(1<<PA0); //wejście dla adc0
- ADMUX = (1<<REFS1) | (1<<REFS0); //wewnetrne zrodlo, 2.56 V ...wybor kanalu adc0
- ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); //wlaczenie adc preskaler /32
- }
- void PomiarADC()
- {
- int16_t nap =0;
- int8_t napjed = 0;
- int8_t napdzies = 0;
- int8_t napset = 0;
- ADCSRA |= (1<<ADSC); //start pojedynczych konwersji
- while(bit_is_set(ADCSRA,ADSC)); //program czeka na zakonczenie operacji
- nap = ADC/4; //konwersja na bcd
- napjed = nap/100; //poz setek to jednosci voltow
- napjedascii = napjed + 0x30;
- napdzies = (nap - napjed*100)/10; //poz dziesiatek to dziesietne czesci volta
- napdziesascii = napdzies + 0x30;
- napset = nap - napjed*100 - napdzies*10; //poz jednosci to setne czesci volta
- napsetascii = napset + 0x30;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement