Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * jestem_spiaca.c
- *
- * Created: 2013-04-11 09:39:29
- * Author: student
- */
- #include <avr/io.h>
- #include <lcd.h>
- #include <util/delay.h>
- #include <stdio.h>
- #include <avr/interrupt.h>
- #ifndef _UTIL_DELAY_H_
- # define F_CPU 6000000UL // Częstotliwość zegara 6MHz
- # include <util\delay.h>
- #endif
- /* Dodatkowe procedury obsługi wyświetlacza LCD, wymagają dołączenia
- modułu <lcd.h>.
- Rejestry wyświetlacza dostępne są pod adresami:
- - rejestr sterujący 0x1F90 (COMM_LCD)
- char *COMM_LCD = 0x1F90;
- - rejestr danych 0x1F91 (DATA_LCD)
- char *DATA_LCD = 0x1F91; */
- #ifndef __PGMSPACE_H_
- # include <avr/pgmspace.h>
- #endif
- // Zerowanie wyświetlacza
- void lcd_clear(void);
- // Przesunięcie kursora
- void lcd_home(void);
- // Inicjalizacja wyświetlacza 5x7, 2 wiersze
- void init_lcd(void);
- // Przepisanie tekstu (koniec = 0xFF) z pamięci programu na wyświetlacz
- // Funkcja dopuszcza wykorzystanie znaku o kodzie 0x00
- // _adres - adres tekstu w pam. FLASH
- void disp_txt_P(const char* _adres);
- // Przepisanie tekstu (koniec = 0x00) z pamięci danych na wyświetlacz
- // _adres - adres tekstu w pam. RAM
- void disp_txt_D(char* _adres);
- //Implementacja
- void lcd_clear(void)
- {
- pisz_com(0x01);
- }
- void lcd_home(void)
- {
- pisz_com(0x02);
- }
- void init_lcd(void)
- {
- _delay_ms(15);
- COMM_LCD = 0x30;
- _delay_ms(5);
- COMM_LCD = 0x30;
- _delay_ms(0.2);
- COMM_LCD = 0x30;
- _delay_ms(30);
- COMM_LCD = 0x38; //Słowo danych 8-bitów, dwa wiersze, znak 7x5 pikseli
- test_bf();
- pisz_com(0x0C); //Włączenie wyświetlacza, bez kursora, bez
- //migotania
- lcd_clear();
- pisz_com(0x06); //Wpisywanie znaków od lewej, autoinkrementacja
- lcd_home();
- }
- void disp_txt_P(const char* _adres)
- {
- volatile uint8_t al;
- for (int i = 0; i<16; i++)
- {
- al = pgm_read_byte(&_adres[i]);
- if (al == 0xFF) break;
- pisz_ws(al);
- }
- }
- void disp_txt_D(char* _adres)
- {
- volatile uint8_t al;
- for (int i = 0; i<16; i++)
- {
- al = _adres[i];
- if (al == 0x00) break;
- pisz_ws(al);
- }
- }
- char gora[] = "A/D Converter";
- char dol[30];
- int pierw = 0;
- int drog = 0;
- ISR(ADC_vect)
- {
- //ADCSRA = _BV(7) | _BV(6) | _BV(3);//praca ciągła -dostajemy przerwania
- //ADCSRA = _BV(7) | _BV(6);//met2
- pierw = 5 * ADC / 1024;
- drog = (10 * 5 * ADC / 1024) % 10;
- }
- int main(void)
- {
- sei();
- MCUCR =_BV(SRE) | _BV(SRW10);
- XMCRA =_BV(SRW01) |_BV(SRW00) |_BV(SRW11);
- ADMUX = _BV(6) | _BV(0);//zmieniamy ostatni bit bo mamy 1
- init_lcd();
- ADCSRA = _BV(7) | _BV(6) | _BV(3);//praca ciągła -dostajemy przerwania
- //while(1)//METODA Z CIĄGŁĄ PRACĄ KONWERTERA
- //{
- ////TODO:: Please write your application code
- //
- //
- ////ADCSRA = _BV(7) | _BV(6) | _BV(5);//met1
- //ADCSRA = _BV(7) | _BV(6);//met2
- //
- //lcd_clear();
- //
- //pisz_com(0x80);
- //disp_txt_D(gora);
- //
- //ADCSRA |= _BV(4);
- //
- //pierw = 5 * ADC / 1024;
- //drog = (10 * 5 * ADC / 1024) % 10;
- //
- //sprintf(dol, " UIN = %d.%dV",pierw,drog);
- //
- //
- //pisz_com(0xC0);
- //disp_txt_D(dol);
- //
- //
- //_delay_ms(500);
- //}
- while(1)//METODA PRZERWANIOWA
- {
- //TODO:: Please write your application code
- ADCSRA |= _BV(6);//met2
- lcd_clear();
- //
- //
- pisz_com(0x80);
- disp_txt_D(gora);
- sprintf(dol, " UIN = %d.%dV",pierw,drog);
- pisz_com(0xC0);
- disp_txt_D(dol);
- _delay_ms(500);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement