Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 16000000
- #include <avr/io.h>
- #include <stdlib.h>
- #include <util/delay.h>
- #include <math.h>
- #include <avr/interrupt.h>
- #include <avr/eeprom.h>
- #include "hd44780.h"
- int inicjalizacja_lcd(void);
- int inicjalizacja_adc(void);
- void wyswietlanie_temp_aktualnej(float pomiar);
- void wyswietlanie_temp_dokladnej(float last);
- float pomiar_adc(void);
- void delta(void);
- int main(void) {
- DDRB &= ~(1 << DDB0); // Clear the PB0 pin
- // PB0 (PCINT0 pin) is now an input
- PORTB |= (1 << PORTB0); // turn On the Pull-up
- // PB0 is now an input with pull-up enabled
- PCICR |= (1 << PCIE0); // set PCIE0 to enable PCMSK0 scan
- PCMSK0 |= (1 << PCINT0); // set PCINT0 to trigger an interrupt on state change
- float temperatura;
- //float dokladne;
- inicjalizacja_lcd();
- inicjalizacja_adc();
- sei(); // turn on interrupts
- //pomiar = pomiar_adc();
- //wyswietlanie_temp_aktualnej(pomiar);
- while(1) {
- temperatura = pomiar_adc();
- wyswietlanie_temp_aktualnej(temperatura);
- _delay_ms(250);
- }
- }
- int inicjalizacja_lcd(void) {
- lcd_init();
- return 0;
- }
- int inicjalizacja_adc(void) {
- ADCSRA |= (1 <<ADEN); // zezwolenie na prace ADC
- ADMUX |= (1 << MUX0); // wybor wejscia
- ADMUX |= (1 << MUX1); // dla przetwornika
- //ADMUX |= (1 << REFS0); // ustaw wewnetrzne napiecie
- ADMUX &= ~(1 << REFS0); // odniesienia na AVCC
- ADMUX &= ~(1 << REFS1); // odniesienia na AVCC
- //ADMUX |= (1 << REFS1); // ustaw wewnetrzne napiecie
- //ADCSRA |= (1 << ADPS0); // wybór czestotliwosci
- ADCSRA |= (1 << ADPS0); // pracy przetwornika
- //ADCSRA &= ~(1 << ADPS0);
- ADCSRA |= (1 << ADPS1); // pracy przetwornika
- ADCSRA |= (1 << ADPS2); // pracy przetwornika
- //ADCSRA &= ~(1 << ADPS1);
- //ADCSRA |=(1<<ADEN)|(1<<ADATE)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
- return 0;
- }
- float pomiar_adc(void) {
- float aktualna;
- ADCSRA |= (1 << ADSC); // rozpocznij przetwarzanie
- //_delay_ms(5);
- while(bit_is_set(ADCSRA, ADSC))
- {}; // czekaj na koniec przetwarzania
- _delay_ms(5);
- aktualna = ADC;
- aktualna *= (0.7/1024.0); // bity na volty
- aktualna *= 100; // volty na celsjusze
- //pomiar -= 273; // kelwiny na kelwiny
- aktualna -= 2.3;
- return aktualna;
- }
- void delta(void) {
- float pomiar;
- float delta=0;
- float last=0;
- //float zmierzono=0;
- for(int i=1 ; i<=10 ; i++) {
- pomiar = pomiar_adc();
- wyswietlanie_temp_aktualnej(pomiar);
- delta = pomiar - last;
- last = pomiar;
- wyswietlanie_temp_dokladnej(delta);
- _delay_ms(250);
- //zmierzono = pomiar;
- //if ( (delta > -0.2) && (delta < 0) && ( i > 40 ) )
- //break;
- }
- wyswietlanie_temp_dokladnej(pomiar);
- _delay_ms(5000);
- //return zmierzono;
- }
- void wyswietlanie_temp_aktualnej(float pomiar) {
- char str[8];
- lcd_clrscr();
- dtostrf(pomiar, 4, 1, str);
- lcd_puts(str);
- lcd_goto(0x05);
- lcd_putc('C');
- //return 0;
- }
- void wyswietlanie_temp_dokladnej(float last) {
- char temp[8];
- //lcd_clrscr();
- dtostrf(last, 4, 1, temp);
- lcd_goto(0x40);
- lcd_puts(temp);
- lcd_goto(0x45);
- lcd_putc('C');
- //return 0;
- }
- ISR (PCINT0_vect)
- {
- delta();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement