Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * lcd+lm35.c
- *
- * Created: 2016-06-10 00:04:53
- * Author : Pat
- */
- #define F_CPU 1000000L
- #include <avr/delay.h>
- #include <avr/io.h>
- #include <string.h>
- #include <avr/interrupt.h>
- /****************************************************************************************************
- Podłączenie pinów
- LCD
- vss GND
- vdd Vcc
- v0 potencjometr
- rs PC5
- rw PC6
- e PC7
- D0...D7 PB0...PB7
- A Vcc
- K GND
- LM35
- Vo PA5
- *****************************************************************************************************/
- /*LCD function declarations */
- void LCD_send_command(unsigned char cmnd);
- void LCD_send_data(unsigned char data);
- void LCD_init();
- void LCD_goto(unsigned char y, unsigned char x);
- void LCD_print(char *string);
- #define LCD_DATA_PORT PORTB
- #define LCD_DATA_DDR DDRB
- #define LCD_DATA_PIN PINB
- #define LCD_CNTRL_PORT PORTC
- #define LCD_CNTRL_DDR DDRC
- #define LCD_CNTRL_PIN PINC
- #define LCD_RS_PIN 5
- #define LCD_RW_PIN 6
- #define LCD_ENABLE_PIN 7
- #define SET_HOUR 3
- #define SET_MINUTE 4
- //volatile zmienna=ADMUX;
- int main(void)
- {
- init_ADC();
- init_timer();
- LCD_init();
- //LCD_goto(2,1);
- //LCD_print("Nap: ");
- //LCD_goto(1,1);
- //LCD_print("Temp:");
- sei();
- LCD_CNTRL_PORT = (1<<SET_HOUR | 1<<SET_MINUTE);
- //ADMUX |=(1<<MUX0)|(1<<MUX2)|(1<<MUX1);
- while (1)
- {
- }
- }
- ISR(TIMER0_OVF_vect)
- {
- float pomiar, volty;
- float pomiar_lm;
- char str[8], str1[8];
- char str_lm[8];
- ADCSRA |= (1 << ADSC); // rozpocznij przetwarzanie
- while(ADCSRA & (1<<ADSC)); // czekaj na koniec przetwarzania
- volty = ADC;
- volty *= 0.0049; // bity na volty
- pomiar=volty-2.3 ; // volty na stopnie(-Vw0)
- pomiar/=0.0100; //0.01V/1 C
- _delay_ms(500);
- ADMUX^=(1<<MUX0);
- ADCSRA |= (1 << ADSC); // rozpocznij przetwarzanie
- while(ADCSRA & (1<<ADSC)); // czekaj na koniec przetwarzania
- pomiar_lm=ADCW;
- pomiar_lm*=0.0049;
- pomiar_lm*=100;
- _delay_ms(500);
- dtostrf(volty, 8, 2, str);
- dtostrf(pomiar, 8, 2, str1);
- dtostrf(pomiar_lm, 8, 2, str_lm);
- LCD_goto(1,6);
- LCD_print(str1);
- LCD_goto(2,6);
- LCD_print(str);
- LCD_goto(1,15);
- LCD_print("*C");
- LCD_goto(2,1);
- LCD_print(str_lm);
- _delay_ms(500);
- TCNT0 = 255;
- }
- void init_timer (void)
- {
- //Inicjalizacja Timera
- TIMSK |= (1<<TOIE0) | (1<<TOIE1); //Przerwanie overflow przepełnienie timera
- TCCR0 |= (1<<CS02) | (1<<CS00) ; // źródłem CLK, preskaler 1024 (~1000 Hz)/0.001s
- TCNT0 = 255; //Początkowa wartość licznika
- }
- void init_ADC (void)
- {
- ADMUX |= (1 << MUX0); // wybor wejscia dla przetwornika (ADC5-PA5)
- ADMUX |= (1 << MUX2);
- //
- //ADMUX |= (1 << MUX0); // wybor wejscia dla przetwornika (ADC5-PA7)
- //ADMUX |= (1 << MUX2);
- //ADMUX |= (1 << MUX1);
- //
- ADMUX |= (1 << REFS0); // ustaw wewnetrzne napiecie odniesienia na AVCC
- ADCSRA |= (1 << ADPS2); // wybór czestotliwosci pracy przetwornika preskaler=128
- ADCSRA |= (1 << ADPS1);
- ADCSRA |= (1 << ADPS0);
- ADCSRA |= (1<<ADIE); //uruchomienie zgłaszania przerwań
- DDRA &= ~(1<<PA5); //PA5 jak wejście
- //
- DDRA &= ~(1<<PA7); //PA7 jak wejście
- //
- ADCSRA |= (1 <<ADEN); // zezwolenie na prace ADC
- }
- void LCD_send_command(unsigned char cmnd)
- {
- LCD_DATA_PORT = cmnd;
- LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
- LCD_CNTRL_PORT &= ~(1<<LCD_RS_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
- _delay_us(2);
- LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
- _delay_us(100);
- }
- void LCD_send_data(unsigned char data)
- {
- LCD_DATA_PORT = data;
- LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_RS_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
- _delay_us(2);
- LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
- _delay_us(100);
- }
- void LCD_init()
- {
- LCD_CNTRL_DDR = 0xFF;
- LCD_CNTRL_PORT = 0x00;
- LCD_DATA_DDR = 0xFF;
- LCD_DATA_PORT = 0x00;
- _delay_ms(10);
- LCD_send_command(0x38);
- LCD_send_command(0x0C);
- LCD_send_command(0x01);
- _delay_ms(10);
- LCD_send_command(0x06);
- }
- void LCD_goto(unsigned char y, unsigned char x)
- {
- unsigned char firstAddress[] = {0x80,0xC0,0x94,0xD4};
- LCD_send_command(firstAddress[y-1] + x-1);
- _delay_ms(10);
- }
- void LCD_print(char *string)
- {
- unsigned char i=0;
- while(string[i]!=0)
- {
- LCD_send_data(string[i]);
- i++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement