Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Podobne prezentacje


Prezentacja na temat: "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"— Zapis prezentacji:

1 Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2 Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino)
Zygmunt Kubiak

3 Czujnik temperatury w ATmega328P
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Czujnik temperatury w ATmega328P Dla 0ºC około 289 mV Błąd pomiaru temperatury ± 10ºC Czułość około 1 mV/ºC T = { [(ADCH << 8) | ADCL] - TOS} / k !! Charakterystyki temperaturowe różnych ATmega328P znacznie się różnią Zygmunt Kubiak

4 Czujnik temperatury w ATmega328P
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Czujnik temperatury w ATmega328P Bit 5 – ADLAR: ADC Left Adjust Result Zygmunt Kubiak

5 Czujnik temperatury w ATmega328P
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Czujnik temperatury w ATmega328P Zygmunt Kubiak

6 Program Arduino – przykład 1
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 1 //=================================================== // ZKubiak // Wewnętrzny czujnik temperatury w ATmega328P // Pomiar temperatury v.1 long wynik; void setup() { // Włączenie źródła odniesienia VREF = 1,1V ADMUX = _BV(REFS0) | _BV(REFS1); // włączenie kanału 8 w ATmega328 (sensor temperatury) ADMUX |= _BV(MUX3); // !! koniecznie |= Serial.begin(115200); Serial.println("Arduino jako termometr"); } Zygmunt Kubiak

7 Program Arduino – przykład 1
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 1 void loop() { ADCSRA |= _BV(ADSC); // //Start kolejnego przetwarzania while (bit_is_set(ADCSRA,ADSC)); // Czekaj na zakończenie wynik = ADCL; wynik |= ADCH<<8; //wynik = ADC; // ADCW opcja Serial.print(wynik); Serial.print(" "); // Przetwarzanie na mV wynik = (wynik * 1100L) / 1024L; // wynik * 1.074 Serial.print(" mV"); Zygmunt Kubiak

8 Program Arduino – przykład 1
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 1 // Przetwarzanie na temperaturę w 'C // Przy zał. czułosci 1mV/'C, mV odpowiadają 'C Serial.print(wynik - 350); // offset Serial.println(" 'C"); // wynik = analogRead(8); // !!Uwaga: analogRead() wlącza Vref=5V // do odczytu sens.temp. nie nadaje się // Serial.println(wynik); delay(500); // Czekaj } Zygmunt Kubiak

9 Program Arduino – przykład 2
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 2 //======================================================== // ZKubiak // Wewnętrzny czujnik temperatury w ATmega328P (kanał 8) // oraz napięcia analogowego w kanale 0 (A0) // 2-kanałowe pomiary analogowe v.1 void setup() { Serial.begin(115200); Serial.println("Arduino - 2-kanałowy pomiar analogowy"); } Zygmunt Kubiak

10 Program Arduino – przykład 2
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 2 void loop() { int wynik; wynik = getInterTemp(); Serial.print(" Temperatura: "); Serial.print(wynik); Serial.println(" 'C"); wynik = getAnalogCh0(); Serial.print(" Napiecie: "); Serial.println(" mV"); delay(1500); // Czekaj } Zygmunt Kubiak

11 Program Arduino – przykład 2
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 2 int getAnalogCh0() { long wynik; // Włączenie źródła odniesienia VREF = 5V ADMUX = _BV(REFS0); delay(20); // czekaj na ustawienie Vref !!!ważne // włączenie kanału 0 w ATmega328 (A0) // ADMUX &= 0xF0; // wybór kanału 0 ADCSRA |= _BV(ADSC); // //Start przetwarzania while (bit_is_set(ADCSRA,ADSC)); // Czekaj na zakończenie wynik = ADC; // ADCW opcja wynik = ((wynik * L) / 1024L)/1000L; // (wynik * 1.074)-offset return int(wynik); // zwrot napięcia na A0 w mV (konwersja do int) } Zygmunt Kubiak

12 Program Arduino – przykład 2
Sensory Wewnętrzny czujnik temperatury w mikrokontrolerach ATmega328P (Arduino) Program Arduino – przykład 2 int getInterTemp() { long wynik; // Włączenie źródła odniesienia VREF = 1,1V ADMUX = _BV(REFS0) | _BV(REFS1); delay(20); // czekaj na ustawienie Vref !!!ważne // włączenie kanału 8 w ATmega328 (sensor temperatury) ADMUX |= _BV(MUX3); // !! koniecznie |= delay(20); ADCSRA |= _BV(ADSC); // //Start przetwarzania while (bit_is_set(ADCSRA,ADSC)); // Czekaj na zakończenie wynik = ADC; // ADCW opcja // (wynik * 1.074)-offset wynik = (((wynik * L) / 1024L) )/1000L return int(wynik); // zwrot temperatury na A0 w 'C (konwersja do int) } Zygmunt Kubiak

13 Dziękuję Zygmunt Kubiak


Pobierz ppt "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"

Podobne prezentacje


Reklamy Google