В данной статье пойдет речь о том, как подключить датчик температуры DS18B20 к ATmega8 и отображать данные на ЖКИ-дисплее 16×1 на базе HD44780. Будут приведены три примеры программ работы с датчиком температуры, а именно: самый простой — подключение одного DS18B20 к ATmega8; подключение нескольких DS18B20 к ATmega8 на разные выводы микроконтроллера; самый сложный — подключение нескольких датчиков температуры DS18B20 к ATmega8 на одну шину. Для проверки работоспособности программ и схем был использован эмулятор Proteus 7 (ISIS 7 Professional). Код программ (проекты в Atmel Studio 7 целиком) вы сможете скачать по ссылке в конце статьи. После оптимизации кода вместо ATmega8 можно использовать более простой микроконтроллер ATtiny2313.
OneWire библиотека
config.h
#ifndef CONFIG_H_ #define CONFIG_H_ #define F_CPU 8000000UL #define ONE_WIRE_PORT PORTB #define ONE_WIRE_DDR DDRB #define ONE_WIRE_PIN PINB #endif /* CONFIG_H_ */
OneWire.h
#ifndef ONEWIRE_H_ #define ONEWIRE_H_ #define CMD_CONVERTTEMP 0x44 #define CMD_RSCRATCHPAD 0xbe #define CMD_WSCRATCHPAD 0x4e #define CMD_CPYSCRATCHPAD 0x48 #define CMD_RECEEPROM 0xb8 #define CMD_RPWRSUPPLY 0xb4 #define CMD_SEARCHROM 0xf0 #define CMD_READROM 0x33 #define CMD_MATCHROM 0x55 #define CMD_SKIPROM 0xcc #define CMD_ALARMSEARCH 0xec void oneWireInit(uint8_t); void writeBit(uint8_t); void writeByte(uint8_t); void setDevice(uint64_t); void searchRom(uint64_t*, uint8_t&); void skipRom(void); uint8_t readByte(void); uint8_t readBit(void); uint8_t reset(void); uint8_t crcCheck(uint64_t, uint8_t); uint64_t readRoom(void); uint64_t searchNextAddress(uint64_t, uint8_t&); extern uint8_t ONE_WIRE_DQ; #endif /* ONEWIRE_H_ */
OneWire.cpp
#define DEVICES_ERROR 1 #include "config.h" #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "OneWire.h" uint8_t ONE_WIRE_DQ = PINB0; void oneWireInit(uint8_t pin) { ONE_WIRE_DQ = pin; ONE_WIRE_PORT |= (1 << ONE_WIRE_DQ); ONE_WIRE_DDR |= (1 << ONE_WIRE_DQ); // выход } /* * сброс */ uint8_t reset() { uint8_t response; // импульс сброса, минимум 480us ONE_WIRE_PORT &= ~(1 << ONE_WIRE_DQ); ONE_WIRE_DDR |= (1 << ONE_WIRE_DQ); // выход _delay_us(480); // Когда ONE WIRE устройство обнаруживает положительный перепад, он ждет от 15us до 60us ONE_WIRE_DDR &= ~(1 << ONE_WIRE_DQ); // вход _delay_us(60); // и затем передает импульс присутствия, перемещая шину в логический «0» на длительность от 60us до 240us. response = (ONE_WIRE_PIN & (1 << ONE_WIRE_DQ)); _delay_us(410); // если 0, значит есть ответ от датчика, если 1 - нет return response; } /* * отправить один бит */ void writeBit(uint8_t bit) { if (bit & 1) { cli(); // логический «0» на 1us ONE_WIRE_PORT &= ~(1 << ONE_WIRE_DQ); ONE_WIRE_DDR |= (1 << ONE_WIRE_DQ); // выход _delay_us(10); sei(); ONE_WIRE_DDR &= ~(1 << ONE_WIRE_DQ); // вход _delay_us(55); } else { cli(); // логический «0» на 1us ONE_WIRE_PORT &= ~(1 << ONE_WIRE_DQ); ONE_WIRE_DDR |= (1 << ONE_WIRE_DQ); // выход _delay_us(65); ONE_WIRE_DDR &= ~(1 << ONE_WIRE_DQ); // вход sei(); _delay_us(5); } } /* * отправить один байт */ void writeByte(uint8_t byte) { uint8_t i = 8; while (i--) { writeBit(byte & 1); byte >>= 1; } } /* * получить один байт */ uint8_t readByte() { uint8_t i = 8, byte = 0; while (i--) { byte >>= 1; byte |= (readBit() << 7); } return byte; } /* * получить один бит */ uint8_t readBit(void) { uint8_t bit = 0; cli(); // логический «0» на 1us ONE_WIRE_PORT &= ~(1 << ONE_WIRE_DQ); ONE_WIRE_DDR |= (1 << ONE_WIRE_DQ); // вход _delay_us(3); // освободить линию и ждать 14us ONE_WIRE_DDR &= ~(1 << ONE_WIRE_DQ); // вход _delay_us(10); // прочитать значение if (ONE_WIRE_PIN & (1 << ONE_WIRE_DQ)) { bit = 1; } // ждать 45us и вернуть значение sei(); _delay_us(45); return bit; } /* * читать ROM подчиненного устройства (код 64 бита) */ uint64_t readRoom(void) { uint64_t oneWireDevice; if(reset() == 0) { writeByte(CMD_READROM); // код семейства oneWireDevice = readByte(); // серийный номер oneWireDevice |= (uint16_t)readByte()<<8 | (uint32_t)readByte()<<16 | (uint32_t)readByte()<<24 | (uint64_t)readByte()<<32 | (uint64_t)readByte()<<40 | (uint64_t)readByte()<<48; // CRC oneWireDevice |= (uint64_t)readByte()<<56; } else { return 1; } return oneWireDevice; } /* * Команда соответствия ROM, сопровождаемая последовательностью * кода ROM на 64 бита позволяет устройству управления шиной * обращаться к определенному подчиненному устройству на шине. */ void setDevice(uint64_t rom) { uint8_t i = 64; reset(); writeByte(CMD_MATCHROM); while (i--) { writeBit(rom & 1); rom >>= 1; } } /* * провеска CRC, возвращает "0", если нет ошибок * и не "0", если есть ошибки */ uint8_t crcCheck(uint64_t data8x8bit, uint8_t len) { uint8_t dat, crc = 0, fb, stByte = 0; do { dat = (uint8_t) (data8x8bit >> (stByte * 8)); for (int i = 0; i < 8; i++) { // счетчик битов в байте fb = crc ^ dat; fb &= 1; crc >>= 1; dat >>= 1; if (fb == 1) { crc ^= 0x8c; // полином } } stByte++; } while (stByte < len); // счетчик байтов в массиве return crc; } /* * поиск устройств */ void searchRom(uint64_t * roms, uint8_t & n) { uint64_t lastAddress = 0; uint8_t lastDiscrepancy = 0; uint8_t err = 0; uint8_t i = 0; do { do { lastAddress = searchNextAddress(lastAddress, lastDiscrepancy); if(lastAddress != DEVICES_ERROR) { uint8_t crc = crcCheck(lastAddress, 8); if (crc == 0) { roms[i++] = lastAddress; err = 0; } else { err++; } } else { err++; } if (err > 3) { return; } } while (err != 0); } while (lastDiscrepancy != 0 && i < n); n = i; } /* * поиск следующего подключенного устройства */ uint64_t searchNextAddress(uint64_t lastAddress, uint8_t & lastDiscrepancy) { uint8_t searchDirection = 0; uint64_t newAddress = 0; uint8_t idBitNumber = 1; uint8_t lastZero = 0; reset(); writeByte(CMD_SEARCHROM); while (idBitNumber < 65) { uint8_t idBit = readBit(); uint8_t cmpIdBit = readBit(); // id_bit = cmp_id_bit = 1 if (idBit == 1 && cmpIdBit == 1) { return DEVICES_ERROR; } else if (idBit == 0 && cmpIdBit == 0) { // id_bit = cmp_id_bit = 0 if (idBitNumber == lastDiscrepancy) { searchDirection = 1; } else if (idBitNumber > lastDiscrepancy) { searchDirection = 0; } else { if ((uint8_t) (lastAddress >> (idBitNumber - 1)) & 1) { searchDirection = 1; } else { searchDirection = 0; } } if (searchDirection == 0) { lastZero = idBitNumber; } } else { // id_bit != cmp_id_bit searchDirection = idBit; } newAddress |= ((uint64_t) searchDirection) << (idBitNumber - 1); writeBit(searchDirection); idBitNumber++; } lastDiscrepancy = lastZero; return newAddress; } /* * пропустить ROM */ void skipRom() { reset(); writeByte(CMD_SKIPROM); }
Подключение одного DS18B20 к ATmega8
Самый простой способ подключения термодатчика DS18B20 к микроконтроллеру, конечно же, подключение одного датчика. В таком случае нет необходимости искать адрес подключённого датчика, а можем напрямую с ним общаться и считывать данные. Всё это возможно благодаря команды SKIP ROM [CCh] — Пропуск ROM [CCh]. Обратите внимание, что команда ЧТЕНИЕ ПАМЯТИ [BEh] может следовать за командой Пропуска ROM, только если на шине присутствует одно подчиненное устройство. Команда Пропуска ROM, сопровождаемая командой ЧТЕНИЕ ПАМЯТИ вызовет конфликт на уровне данных на шине, если на шине более одного подчиненного устройства, так как все устройства будут пытаться одновременно передавать данные.
main.cpp
#include "config.h" #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "OneWire.h" #include "LCD.h" // 123.4 // numbers[0] = 123 // numbers[1] = 4 inline void explodeDoubleNumber(int* numbers, double flt) { numbers[0] = abs((int) flt); numbers[1] = abs((int) ((flt - ((int) flt)) * 10)); } inline void printTemp(double d) { char text[17] = "T = "; int fs[2]; char num[5]; explodeDoubleNumber(fs, d); if (d < 0) { strcat(text, "-"); } itoa(fs[0], num, 10); strcat(text, num); strcat(text, "."); itoa(fs[1], num, 10); strcat(text, num); strcat(text, "'C"); lcdClear(); lcdGotoXY(0, 0); lcdPuts(text); } double getTemp(void) { uint8_t temperatureL; uint8_t temperatureH; double retd = 0; skipRom(); writeByte(CMD_CONVERTTEMP); _delay_ms(750); skipRom(); writeByte(CMD_RSCRATCHPAD); temperatureL = readByte(); temperatureH = readByte(); retd = ((temperatureH << 8) + temperatureL) * 0.0625; return retd; } int main(void) { _delay_ms(100); lcdInit(); lcdClear(); lcdSetDisplay(LCD_DISPLAY_ON); lcdSetCursor(LCD_CURSOR_OFF); oneWireInit(PINB0); double temperature; while (1) { temperature = getTemp(); printTemp(temperature); _delay_ms(500); } } // site: http://micro-pi.ru
double getTemp(void)
— возвращает данные температуры в градусах Цельсия.
inline void printTemp(double d)
— отображает на экран температуру.
inline void explodeDoubleNumber(int* numbers, double flt)
— преобразует вещественное число flt в два целых, которые записываются в numbers.
Вместо функций inline void printTemp(double d)
и inline void explodeDoubleNumber(int* numbers, double flt)
можно использовать sprintf(), но она жрёт слишком много памяти.
Обычное питание
Результат
Паразитное питание
Результат
Подключение нескольких DS18B20 к ATmega8
Подключить несколько датчиков DS18B20 к ATmega8 или к другому микроконтроллеру, можно двумя способами. Первый способ — датчики можно подключить на разные выводы микроконтроллера, это самый простой способ, но в таком случае число подключенных датчиков зависит от числа выводов. Второй и самый лучший способ — это подключить все датчики на одну шину, в данном случае необходимо будет найти адреса всех подключённых датчиков.
Подключение нескольких DS18B20 к ATmega8 на разные выводы
main.cpp
#include "config.h" #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "OneWire.h" #include "LCD.h" // 123.4 // numbers[0] = 123 // numbers[1] = 4 inline void explodeDoubleNumber(int* numbers, double flt) { numbers[0] = abs((int) flt); numbers[1] = abs((int) ((flt - ((int) flt)) * 10)); } inline void printTemp(double d, uint8_t i) { char text[17] = "T["; int fs[2]; char num[5]; itoa(i, num, 10); strcat(text, num); strcat(text, "]="); explodeDoubleNumber(fs, d); if (d < 0) { strcat(text, "-"); } itoa(fs[0], num, 10); strcat(text, num); strcat(text, "."); itoa(fs[1], num, 10); strcat(text, num); strcat(text, "'C"); lcdClear(); lcdGotoXY(0, 0); lcdPuts(text); } double getTemp(uint8_t pin) { uint8_t temperatureL; uint8_t temperatureH; double retd = 0; oneWireInit(pin); skipRom(); writeByte(CMD_CONVERTTEMP); _delay_ms(750); skipRom(); writeByte(CMD_RSCRATCHPAD); temperatureL = readByte(); temperatureH = readByte(); retd = ((temperatureH << 8) + temperatureL) * 0.0625; return retd; } int main(void) { _delay_ms(100); lcdInit(); lcdClear(); lcdSetDisplay(LCD_DISPLAY_ON); lcdSetCursor(LCD_CURSOR_OFF); double temperature; uint8_t pin = 0; while (1) { temperature = getTemp(pin); printTemp(temperature, pin); if (pin == 4) { pin = 0; } else { pin++; } _delay_ms(500); } } // site: http://micro-pi.ru
Результат
Подключение нескольких DS18B20 к ATmega8 на одну шину
При подключение нескольких датчиков DS18B20 к ATmega8 на одну шину, главное устройство (микроконтроллер) должно определить коды ROM всех подчиненных устройств на шине. Команда SEARCH ROM [F0h] — (ПОИСК ROM) позволяет устройству управления определять номера и типы подчиненных устройств. Устройство управления изучает коды ROM через процесс устранения, которое требует, чтобы Главное устройство исполнил цикл Поиска ROM (то есть, команда ROM Поиска, сопровождаемая обменом данных). Эту процедуру необходимо выполнить столько раз, сколько необходимо, чтобы идентифицировать все из подчиненных устройств. Если есть только одно подчиненное устройство на шине, более простая команда READ ROM [33h] (Чтения ROM) может использоваться место процесса Поиска ROM.
После каждого цикла Поиска ROM, устройство управления шиной должно возвратиться к Шагу 1 (Инициализация) в операционной последовательности.
Алгоритм поиска 1-Wire устройств с использованием команды Search ROM прекрасно описан в этом видео:
main.cpp
#include "config.h" #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "OneWire.h" #include "LCD.h" // 123.4 // numbers[0] = 123 // numbers[1] = 4 inline void explodeDoubleNumber(int* numbers, double flt) { numbers[0] = abs((int) flt); numbers[1] = abs((int) ((flt - ((int) flt)) * 10)); } inline void printTemp(double d, uint8_t i) { char text[17] = "T["; int fs[2]; char num[5]; itoa(i, num, 10); strcat(text, num); strcat(text, "]="); explodeDoubleNumber(fs, d); if (d < 0) { strcat(text, "-"); } itoa(fs[0], num, 10); strcat(text, num); strcat(text, "."); itoa(fs[1], num, 10); strcat(text, num); strcat(text, "'C"); lcdClear(); lcdGotoXY(0, 0); lcdPuts(text); } double getTemp(uint64_t ds18b20s) { uint8_t temperatureL; uint8_t temperatureH; double retd = 0; setDevice(ds18b20s); writeByte(CMD_CONVERTTEMP); _delay_ms(750); setDevice(ds18b20s); writeByte(CMD_RSCRATCHPAD); temperatureL = readByte(); temperatureH = readByte(); retd = ((temperatureH << 8) + temperatureL) * 0.0625; return retd; } int main(void) { _delay_ms(100); lcdInit(); lcdClear(); lcdSetDisplay(LCD_DISPLAY_ON); lcdSetCursor(LCD_CURSOR_OFF); oneWireInit(PIND7); double temperature; uint8_t n = 8; uint64_t roms[n]; searchRom(roms, n); char txt[17] = "devices ["; char num[5]; itoa(n, num, 10); strcat(txt, num); strcat(txt, "]"); lcdClear(); lcdGotoXY(0, 0); lcdPuts(txt); _delay_ms(2000); while (1) { for (uint8_t i = 0; i < n; i++) { temperature = getTemp(roms[i]); printTemp(temperature, i + 1); _delay_ms(500); } } } // site: http://micro-pi.ru
Обычное питание
Результат
Паразитное питание
Результат
Внимание! При использовании паразитного питания не рекомендуется использовать датчики для температуры выше +100ºC, а также при операциях преобразования температуры и копирования данных из Scratchpad в один из регистров EEPROM, потребляемый ток может достигать 1.5 мА, что непосильно внутреннему конденсатору, а на резисторе подтяжки (R1 4.7k) будет большое падение напряжения, что недопустимо скажется на работе устройства в целом. Для этого необходимо организовать линии DQ схему мощной подтяжки, реализуемой по такой схеме:
После выдачи команды конвертирования температуры [44h] или копирования ОЗУ В ПЗУ (Copy Scratchpad) [48h] необходимо включить мощную подтяжку MOSFET-транзистором линии DQ на 10 мкс (макс.), как указанно в даташите датчика, после чего выждать время преобразования или время передачи данных, причем в это время никаких действий при включенной мощной подтяжке на линии DQ быть не должно!
Скачать Atmel Studio 7 проекты и схемы в ISIS Professional (Proteus):
DS18B20 + LCD 16×2 + ATmega8 — ISIS Professional (Proteus)
DS18B20 + LCD 16×2 + ATmega8 — Atmel Studio 7
Собрал пример с одним датчиком, LCD только двухстрочны. На экране «Т = -0,0 С». Почему так???
Все заработало, разобрался.Дело в конфигурации фьюзов, по умолчанию частота стоит 1мгц , а по коду надо 8мгц. Я новичок по этому не сразу вник в детали. А какая конфигурация фьюзов используется вами в данном проекте? На примере khazama AVR.
Спасибо за интересную статью!!! А аналогичные примеры есть с применением I2C подключения к LCD в Atmel Studio???
Жаль, а я только пытаюсь изучить студию…..
Здравствуйте! Пытаюсь внедрить Ваш код по подключению двух датчиков на одну шину в Atmel Studio 6.2. Дело в том, что основной проект у меня написан на СИ (не СИ++), и почему-то компилятор ругается на два определения в OneWire.h и соответственно OneWire.cpp:
void searchRom(uint64_t*, uint8_t&);
и
uint64_t searchNextAddress(uint64_t, uint8_t&);
а именно на знак «&». Честно сказать не понимаю зачем он нужен, но после того как его убрал, проект успешно скомпилировался, но возникла проблема — в массиве rom после выполнения функции searchRom(roms, n), определяется только один серийный номер датчика (второй равен нулю) и соответственно выводится температура только его одно. Помогите разобраться в чем дело. Заранее спасибо.
admin, большое спасибо!
Спасибо вам за статью, вы мне значительно облегчили работу с курсовым проектом
скомпилировал версию c одним датчиком «1xDS18B20+LCD 16×2+ATmega8» в AtmelStudio7 — успешно под atmega8, получил hex, пошел в протеус 8.2 sp3 — перерисовал схему, загрузил ранее полученную прошивку — в результате экран показывает «T= -0.0C» скриншот
было тожесамое как и Евгения «Все заработало, разобрался.Дело в конфигурации фьюзов, по умолчанию частота стоит 1мгц , а по коду надо 8мгц. »
переключил в протеусе фьюз на 8мгц внутренний и заработало
Hi! В OneWire.cpp cтрока 7:
uint8_t ONE_WIRE_DQ = PINB0;
что это значит, ведь датчики подключены к порту D пин 7???
Автору огромное спасибо! Всё работает (прилагая свои мозги и прямые руки ;). Пытаясь подружить Atmel и MPLAB-X v5.2, адаптировал код автора под тулчайн WinAVR — работает так как надо!!!
Здравствуйте, запустил в протеусе схему с одним датчиком, и загрузил программу туда — все работало.
Решил сделать термометр, когда собрал, программу залил в Atmega8 через SinaProg, термометр запитываю с ArduinoUno — все выключается. Вытаскиваю датчик, подключаю питание экран показывает » t=-9999*C «.
Получается что с датчиком схема выключается из-за короткого замыкания, без датчика вроде все работает, но температуру не показывает, схему проверял мультиметром замыканий ни где нет, проверил контакт PB2 включенным без датчика он выдает 5 Вольт, хотя если PB2 настроен на считывание то там не должно быть этих 5-ти Вольт.
Подскажите что можно сделать
А можно туже самую задачу, только на «С»?И еще превратить простой термометр в многоканальный терморегулятор?
Но как опрашивать датчики по порядку, по адресам, если они на одном проводе?
Здравствуйте. Кто занимается программированием на МК? Меня интересует схема 2-х канального термометра на МК. Я ищу любителя-программиста, с которым я бы смог воплотить в жизнь свою задумку. Немного расширить функционал термометра, использовать более крупный ЖК дисплей, добавить некоторые модуля. Если кто в принципе согласен, то можно продолжить общаться далее. А заодно скажите пожалуйста регион вашего проживания и почту для общения.
Добрый день!
Сейчас работаю над аналогичным проектом, вернее над двумя.
Первый — схема с динамической индикацией на MAX7219, МК Atmega1284, часы реального времени DS1307, датчик давления воздуха (атмосферы), датчик относительной влажности воздуха, два датчика температуры DS18B20. Индикаторы -светодиодные. Часы-двухдюймовые, а остальная индикация 10мм. Ранее собрал, но так как не имел опыта программирования, плата одна, а часы, термометр, барометр и измеритель влажности — каждый имел свой контроллер. Конструкцию собирал лет 10 назад. Плюс имеются два будильника с музыкальными мелодиями, можно по заданному времени что-то включать -выключать. Могу поделиться информацией и опытом. Мой e-mail: vigavic07@mail.ru
С уважением, Виктор
Доброго времени суток!!!
Спасибо за проделанную работ!!!
Особенно понравилась написанная работа, над поиском rom code с помощью регистров lastDiscrepancy и lastZero.
Подскажите как обойтись без цикла for и без задержки, а сделать все по прерыванию таймера? Что бы не занимать в пустую тактовое время?
for (uint8_t i = 0; i < n; i++) {
temperature = getTemp(roms[i]);
printTemp(temperature, i + 1);
_delay_ms(1000);
}
У Вас Функция itoa() конвертирует целое число num в строчный эквивалент и помещает результат в строку?
Решил с ассемблера перейти на си, все вроде как бы понятно, но не очень, пока путаюсь в самом синтаксисе языка си.
Доброго времени суток!!!
Подскажите название переменных, где лежит окончательная преобразованная температура двух DS в десятичном виде, после считывания с DS? Что бы была возможность оперировать условиями при изменении температуры.
Я в отладчике смотрел изменение переменных так и не понял какие.
Добавил в Ваш код по таймеру 1 атмега128. Без задержки.
for (uint8_t i = 0; i < n; i++){
temperature = getTemp(roms[i]);
if (BIT_state ==1){
printTemp(temperature, i + 1);
// _delay_ms(1000);
}
}
Доброго времени суток!!!
Если есть время подскажите как на языке С, с переменной uint64_t — byte_data_rom конвертировать в удобочитаемый вид, для вывода посимвольно считанного romcode на LCD?
Я таким макаром, вывожу на дисплей.
Пока есть свободное время, недельки две, хочу позаниматься языком Си.
Всё-таки не работает ни один код. Пробовал с разными датчиками: в корпусе ТО-92 и в герметичном. Показывает -0.0 или без минуса 0.0.
Автор самозванец, никакой он не препод в универе. Код передран отсюда: https://narodstream.ru/stm-urok-94-ds18b20-podklyuchaem-neskolko-datchikov-na-provod-chast-1/ и переделан под ATmega8.
Здравствуйте! Пытаюсь внедрить Ваш код по подключению двух датчиков на одну шину в Atmel Studio 6.2. Дело в том, что основной проект у меня написан на СИ (не СИ++), и почему-то компилятор ругается на два определения в OneWire.h и соответственно OneWire.cpp:
void searchRom(uint64_t*, uint8_t&);
и
uint64_t searchNextAddress(uint64_t, uint8_t&);
а именно на знак «&». Честно сказать не понимаю зачем он нужен, но после того как его убрал, проект успешно скомпилировался, но возникла проблема — в массиве rom после выполнения функции searchRom(roms, n), определяется только один серийный номер датчика (второй равен нулю) и соответственно выводится температура только его одно. Помогите разобраться в чем дело. Заранее спасибо
доброго времени суток почему то не компилируется ругается на #include «config.h»
1 раз отработал и все. Больше в протеусе не работает. на табло -0.0. Частота 8мГц. Все коды по 1 разу отработали …
Здравствуйте. Вопрос : почему микрочип(atmelstudio) не компилирует вот эта #ifndef CONFIG_H_
#define CONFIG_H_
#define F_CPU 8000000UL
#define ONE_WIRE_PORT PORTB
#define ONE_WIRE_DDR DDRB
#define ONE_WIRE_PIN PINB
#endif /* CONFIG_H_ */
Идеальное остекление для балконов в Санкт-Петербурге, подберем идеальное решение.
Профессиональное остекление балконов в Петербурге, под ключ и без переплат.
Индивидуальное остекление балконов в СПб, по индивидуальным проектам и с использованием прочных материалов.
Быстрое остекление для балконов в Санкт-Петербурге, без скрытых платежей и срочно.
Удобное остекление балконов в Петербурге, со скидками и акциями.
остекление лоджий в спб https://balkon-spb-1.ru/ .
рубли в тенге конвертер валют .
Онлайн-сервис с мгновенной конвертацией валют: переведите тенге в рубли, доллары США или юани за считаные секунды. Точные курсы валют обновляются в режиме реального времени.
Лучшие натяжные потолки в СПб|Выгодное предложение на натяжные потолки в Петербурге|Опытные мастера по натяжным потолкам в Санкт-Петербурге|Широкий выбор натяжных потолков в СПб|Как выбрать идеальный натяжной потолок в СПб|Натяжные потолки в Петербурге для вашего уюта|Эстетика и стиль с натяжными потолками в СПб|Идеальные потолки в Петербурге только у нас|Только проверенные потолки в Петербурге у нас|Последние тренды для натяжных потолков в Петербурге|Легко и быстро: установка натяжных потолков в СПб|Идеальный выбор: натяжные потолки в СПб|Инновации и креативность в сфере натяжных потолков в Санкт-Петербурге|Экономьте на натяжных потолках в Санкт-Петербурге|Натяжные потолки в СПб: выбор современных людей|Экспертный подход к натяжным потолкам в Петербурге|Комфорт и эстетика с натяжными потолками в Санкт-Петербурге|Профессиональный подход к выбору и установке натяжных потолков в Санкт-Петербурге|Персональные решения для вас: натяжные потолки в Петербурге|Преимущества натяжных потолков в СПб|Технологические новинки для натяжных потолков в Санкт-Петербурге|Эксклюзивные услуги по монтажу натяжных потолков в Петербурге|Тенденции в дизайне потолков: натяжные потолки в СПб|Оптимальный выбор: натяжные потолки в Петербурге
недорогие натяжные потолки цены спб https://potolki-spb-1.ru/ .
Лучшее остекление балконов в СПб, поможем выбрать подходящий вариант.
Элитное остекление для балконов в Санкт-Петербурге, под ключ и без переплат.
Изысканное остекление балконов в Петербурге, под заказ и с уникальным дизайном.
Качественное остекление балконов в Петербурге, без скрытых платежей и срочно.
Остекление балкона под ключ в СПб, по лучшей цене и быстрой установкой.
застеклить балкон в спб цены https://balkon-spb-1.ru/ .
порно с мамками milfland-pro1.ru .
Pemain harus menetapkan batas saat bermain: garuda888 slot — garuda888 slot
Pemain bisa menikmati slot dari kenyamanan rumah http://slot88.company/# Banyak kasino memiliki program loyalitas untuk pemain
Kasino di Indonesia menyediakan hiburan yang beragam: bonaslot.site — BonaSlot
http://bonaslot.site/# Slot memberikan kesempatan untuk menang besar
Slot menawarkan kesenangan yang mudah diakses http://slotdemo.auction/# Kasino mendukung permainan bertanggung jawab
Keseruan bermain slot selalu menggoda para pemain http://garuda888.top/# Slot klasik tetap menjadi favorit banyak orang
http://preman69.tech/# Pemain harus menetapkan batas saat bermain
https://slotdemo.auction/# Slot menjadi daya tarik utama di kasino
Pemain harus memahami aturan masing-masing mesin: preman69 slot — preman69.tech
Jackpot besar bisa mengubah hidup seseorang https://slotdemo.auction/# Mesin slot menawarkan berbagai tema menarik
Pemain sering berbagi tips untuk menang: bonaslot — bonaslot.site
https://slot88.company/# Beberapa kasino memiliki area khusus untuk slot
Keseruan bermain slot selalu menggoda para pemain http://slotdemo.auction/# Kasino memastikan keamanan para pemain dengan baik
KU9 app KU9 app .
Bermain slot bisa menjadi pengalaman sosial https://slot88.company/# Mesin slot menawarkan pengalaman bermain yang cepat
Mesin slot menawarkan berbagai tema menarik https://garuda888.top/# Slot modern memiliki grafik yang mengesankan
Slot menjadi daya tarik utama di kasino: slot88 — slot 88
Jackpot besar bisa mengubah hidup seseorang http://slotdemo.auction/# Kasino menyediakan layanan pelanggan yang baik
Jackpot progresif menarik banyak pemain: bonaslot — bonaslot.site
http://garuda888.top/# Mesin slot sering diperbarui dengan game baru
Banyak pemain menikmati jackpot harian di slot http://slot88.company/# Pemain harus menetapkan batas saat bermain
Banyak pemain menikmati jackpot harian di slot: preman69 — preman69
http://slotdemo.auction/# Slot klasik tetap menjadi favorit banyak orang
п»їKasino di Indonesia sangat populer di kalangan wisatawan: garuda888.top — garuda888
Beberapa kasino memiliki area khusus untuk slot http://garuda888.top/# Kasino di Bali menarik banyak pengunjung
https://garuda888.top/# Slot dengan pembayaran tinggi selalu diminati
Banyak pemain menikmati jackpot harian di slot: slot88.company — slot88.company
Kasino di Bali menarik banyak pengunjung https://garuda888.top/# Keseruan bermain slot selalu menggoda para pemain
Mesin slot sering diperbarui dengan game baru: bonaslot.site — bonaslot
https://slotdemo.auction/# Slot menawarkan kesenangan yang mudah diakses
Slot dengan grafis 3D sangat mengesankan http://slotdemo.auction/# Kasino di Indonesia menyediakan hiburan yang beragam
http://bonaslot.site/# Slot dengan grafis 3D sangat mengesankan
Permainan slot mudah dipahami dan menyenangkan: akun demo slot — slot demo gratis
doxycycline 631311: doxycycline 200 mg capsules — doxycycline 200
where buy generic clomid for sale: cost clomid no prescription — can i get cheap clomid now
amoxicillin online no prescription: Amo Health Pharm — order amoxicillin online uk
электрические карнизы купить https://prokarniz17.ru/ .
карниз с приводом карниз с приводом .
rx doxycycline 100mg 22 doxycycline average price of doxycycline
buy amoxicillin over the counter uk: AmoHealthPharm — amoxicillin 500mg without prescription
where to get amoxicillin over the counter Amo Health Pharm order amoxicillin online no prescription
http://amohealthpharm.com/# can i purchase amoxicillin online
buy zithromax 500mg online: Zithro Pharm — zithromax online no prescription
can i purchase amoxicillin online: AmoHealthPharm — where can you get amoxicillin
cheap clomid prices: how to get generic clomid online — get cheap clomid price
https://doxhealthpharm.shop/# doxycycline over the counter
https://doxhealthpharm.com/# buy doxycycline 100mg canada
https://amohealthpharm.com/# can we buy amoxcillin 500mg on ebay without prescription
amoxicillin pills 500 mg: amoxicillin 30 capsules price — where can i buy amoxocillin
http://amohealthpharm.com/# order amoxicillin online uk
https://clmhealthpharm.com/# how to get cheap clomid without rx
doxycycline capsules 100mg price: doxycycline canada — doxycycline 20mg canada
cost clomid without a prescription: ClmHealthPharm — clomid tablet
zithromax 250 price: Zithro Pharm — zithromax online paypal
https://doxhealthpharm.com/# cost of doxycycline prescription 100mg
электро карниз на окна электро карниз на окна .
purchase zithromax online: zithromax 600 mg tablets — zithromax 500 mg lowest price pharmacy online
http://amohealthpharm.com/# buy amoxicillin 500mg
buy cheap generic zithromax: buy cheap zithromax online — zithromax 600 mg tablets
zithromax capsules australia: zithromax 500mg — zithromax buy online no prescription
zithromax generic price: Zithro Pharm — generic zithromax online paypal
https://doxhealthpharm.shop/# doxycycline coupon
https://amohealthpharm.shop/# buy amoxicillin 250mg
order zithromax without prescription: zithromax price canada — zithromax generic price
where to buy amoxicillin pharmacy Amo Health Pharm amoxicillin without rx
can i purchase cheap clomid without insurance: order clomid — can i buy generic clomid pills
zithromax 600 mg tablets: ZithroPharm — how to get zithromax
https://doxhealthpharm.com/# canadian pharmacy doxycycline
zithromax 500 mg for sale: generic zithromax 500mg india — zithromax 250
электрокарнизы для римских штор электрокарнизы для римских штор .
somfy купить somfy купить .
doxycycline 100mg uk: doxycycline 100 mg forsale outside the us — can i buy doxycycline over the counter uk
where to get clomid now: ClmHealthPharm — how to get cheap clomid without a prescription
https://doxhealthpharm.shop/# doxycycline tablets australia
http://zithropharm.com/# where can you buy zithromax
cost of cheap clomid tablets: where can i buy cheap clomid without prescription — where buy generic clomid prices
zithromax 250 mg australia: zithromax 250 mg — zithromax for sale usa
can i order generic clomid without rx: ClmHealthPharm — how to get generic clomid pills
purchase amoxicillin online without prescription: amoxicillin online purchase — can i buy amoxicillin over the counter
how can i get clomid without a prescription ClmHealthPharm can you buy generic clomid without prescription
https://clmhealthpharm.com/# how can i get clomid prices
https://doxhealthpharm.com/# doxycycline 100 mg tablet cost
where can i get zithromax over the counter: zithromax 500 without prescription — zithromax online no prescription
doxycycline 50 mg india: order doxycycline online australia — doxycycline 120mg
https://zithropharm.shop/# zithromax prescription online
https://zithropharm.com/# buy zithromax online with mastercard
мостбет официальный сайт вход mostbet1.com.kg .
doxycycline caps 100mg: Dox Health Pharm — doxycycline 100g tablets
cheap clomid online: can i get cheap clomid prices — where can i get cheap clomid without a prescription
pharmacie en ligne pas cher kamagra en ligne pharmacie en ligne sans ordonnance
Achat mГ©dicament en ligne fiable https://viagrameilleurprix.shop/# Viagra homme prix en pharmacie sans ordonnance
https://viagrameilleurprix.com/# Viagra gГ©nГ©rique sans ordonnance en pharmacie
pharmacies en ligne certifiГ©es
pharmacie en ligne avec ordonnance: pharmacie en ligne — pharmacies en ligne certifiГ©es
acheter mГ©dicament en ligne sans ordonnance: pharmacie en ligne france — pharmacies en ligne certifiГ©es
Pharmacie Internationale en ligne http://tadalafilmeilleurprix.com/# Pharmacie Internationale en ligne
pharmacie en ligne france livraison belgique Achat mГ©dicament en ligne fiable vente de mГ©dicament en ligne
pharmacie en ligne pas cher https://viagrameilleurprix.com/# Acheter viagra en ligne livraison 24h
http://tadalafilmeilleurprix.com/# pharmacie en ligne france livraison internationale
pharmacie en ligne france pas cher
pharmacie en ligne france livraison internationale Tadalafil sans ordonnance en ligne pharmacie en ligne livraison europe
Achat mГ©dicament en ligne fiable: pharmacie en ligne — п»їpharmacie en ligne france
Viagra femme ou trouver: acheter du viagra — Viagra 100 mg sans ordonnance
pharmacie en ligne avec ordonnance https://pharmaciemeilleurprix.shop/# pharmacie en ligne sans ordonnance
pharmacie en ligne france livraison internationale https://viagrameilleurprix.shop/# Viagra sans ordonnance 24h Amazon
pharmacie en ligne france fiable: Acheter Cialis — pharmacie en ligne
pharmacie en ligne france livraison internationale: kamagra gel — pharmacie en ligne pas cher
Achat mГ©dicament en ligne fiable: kamagra livraison 24h — Pharmacie Internationale en ligne
pharmacie en ligne sans ordonnance: kamagra pas cher — vente de mГ©dicament en ligne
pharmacie en ligne france livraison belgique: cialis generique — acheter mГ©dicament en ligne sans ordonnance
pharmacie en ligne fiable: pharmacie en ligne — trouver un mГ©dicament en pharmacie
vente de mГ©dicament en ligne pharmacie en ligne pas cher pharmacie en ligne
https://viagrameilleurprix.shop/# Viagra vente libre allemagne
pharmacie en ligne france livraison belgique
pharmacie en ligne pas cher: Acheter Cialis — pharmacies en ligne certifiГ©es
pharmacie en ligne livraison europe https://kamagrameilleurprix.shop/# vente de mГ©dicament en ligne
https://kamagrameilleurprix.shop/# trouver un mГ©dicament en pharmacie
pharmacie en ligne avec ordonnance
для коммерческого помещения.
с применением привода.
для офиса.
Плюсы использования привода для жалюзи.
Тенденции в автоматизации жалюзи с помощью привода.
Простой способ контролировать жалюзи с телефона с использованием привода.
Как установить привод для жалюзи своими руками.
Экономьте время и энергию с автоматизированным приводом для жалюзи.
Интересные факты о приводах для жалюзи.
Как повысить уровень комфорта с приводом для жалюзи.
электрический привод для жалюзи электрический привод для жалюзи .
vente de mГ©dicament en ligne http://kamagrameilleurprix.com/# Pharmacie en ligne livraison Europe
Achat mГ©dicament en ligne fiable pharmacie en ligne pharmacie en ligne france livraison belgique
https://tadalafilmeilleurprix.com/# Achat mГ©dicament en ligne fiable
pharmacie en ligne
pharmacies en ligne certifiГ©es: cialis prix — Pharmacie sans ordonnance
pharmacie en ligne france livraison internationale https://pharmaciemeilleurprix.shop/# pharmacies en ligne certifiГ©es
Meilleur Viagra sans ordonnance 24h Acheter Viagra Cialis sans ordonnance Viagra pas cher inde
pharmacie en ligne france livraison belgique https://pharmaciemeilleurprix.shop/# Achat mГ©dicament en ligne fiable
https://viagrameilleurprix.shop/# Viagra homme sans prescription
pharmacie en ligne livraison europe
Идеальный привод для жалюзи.
с помощью привода.
для коммерческого помещения.
Плюсы использования привода для жалюзи.
Инновационные технологии в области приводов для жалюзи.
Как управлять жалюзями с помощью смартфона с использованием привода.
Секреты успешной установки привода для автоматизации жалюзей.
Экономьте время и энергию с автоматизированным приводом для жалюзи.
Забавные истории об использовании приводов для жалюзей.
Почему привод для жалюзи делает жизнь легче и удобнее.
жалюзи с приводом для окон жалюзи с приводом для окон .
https://pharmaciemeilleurprix.com/# pharmacie en ligne sans ordonnance
pharmacie en ligne france livraison internationale
Viagra en france livraison rapide: Viagra sans ordonnance 24h — Viagra pas cher paris
Pharmacie en ligne livraison Europe https://tadalafilmeilleurprix.shop/# Pharmacie Internationale en ligne
pharmacie en ligne livraison europe https://tadalafilmeilleurprix.com/# pharmacie en ligne france livraison internationale
http://kamagrameilleurprix.com/# pharmacie en ligne fiable
pharmacie en ligne fiable
http://viagrameilleurprix.com/# Viagra vente libre pays
п»їpharmacie en ligne france
Viagra en france livraison rapide: viagra en ligne — Viagra gГ©nГ©rique pas cher livraison rapide
pharmacie en ligne france fiable: Pharmacie Internationale en ligne — pharmacie en ligne avec ordonnance
acheter mГ©dicament en ligne sans ordonnance: kamagra en ligne — pharmacie en ligne sans ordonnance
Pharmacie en ligne livraison Europe achat kamagra pharmacies en ligne certifiГ©es
Как заменить турбину на машине и не переплатить втрое больше. Типичная схема развода на замену турбины. Будьте осторожны. Подробности тут Как заменить турбину на машине и не переплатить втрое больше. Типичная схема развода на замену турбины. Будьте осторожны. Подробности тут .
система учета соут система учета соут .
pharmacie en ligne france livraison belgique http://pharmaciemeilleurprix.com/# pharmacie en ligne livraison europe
http://viagrameilleurprix.com/# Meilleur Viagra sans ordonnance 24h
п»їpharmacie en ligne france
Achat mГ©dicament en ligne fiable: cialis sans ordonnance — acheter mГ©dicament en ligne sans ordonnance
https://viagrameilleurprix.com/# Viagra pas cher livraison rapide france
pharmacie en ligne france livraison internationale
pharmacie en ligne fiable: Pharmacies en ligne certifiees — vente de mГ©dicament en ligne
pharmacie en ligne france livraison internationale http://kamagrameilleurprix.com/# pharmacie en ligne france pas cher
Achat mГ©dicament en ligne fiable Cialis sans ordonnance 24h pharmacie en ligne france livraison belgique
pharmacie en ligne france pas cher https://kamagrameilleurprix.shop/# pharmacie en ligne
http://pharmaciemeilleurprix.com/# п»їpharmacie en ligne france
pharmacie en ligne pas cher
Achat mГ©dicament en ligne fiable: Pharmacies en ligne certifiees — vente de mГ©dicament en ligne
acheter mГ©dicament en ligne sans ordonnance https://pharmaciemeilleurprix.com/# pharmacie en ligne avec ordonnance
https://kamagrameilleurprix.com/# pharmacie en ligne france livraison internationale
pharmacie en ligne france livraison internationale
pharmacies en ligne certifiГ©es: pharmacie en ligne france pas cher — п»їpharmacie en ligne france
trouver un mГ©dicament en pharmacie: achat kamagra — п»їpharmacie en ligne france
pharmacie en ligne sans ordonnance pharmacie en ligne pharmacie en ligne france fiable
Achat mГ©dicament en ligne fiable http://viagrameilleurprix.com/# Viagra vente libre allemagne
pharmacie en ligne https://viagrameilleurprix.shop/# SildГ©nafil 100 mg prix en pharmacie en France
https://pharmaciemeilleurprix.shop/# pharmacie en ligne france livraison internationale
pharmacie en ligne livraison europe
Pharmacie sans ordonnance Pharmacies en ligne certifiees Pharmacie Internationale en ligne
Viagra sans ordonnance livraison 24h: viagra en ligne — Viagra sans ordonnance 24h Amazon
SildГ©nafil 100 mg prix en pharmacie en France: Viagra sans ordonnance 24h — Viagra Pfizer sans ordonnance
Achat mГ©dicament en ligne fiable: kamagra pas cher — pharmacie en ligne france livraison belgique
электрические рулонные жалюзи электрические рулонные жалюзи .
https://kamagrameilleurprix.com/# pharmacie en ligne france pas cher
pharmacie en ligne sans ordonnance
SildГ©nafil 100 mg sans ordonnance: acheter du viagra — SildГ©nafil 100 mg prix en pharmacie en France
обязательное обучение работников знаниям охраны труда Москва обязательное обучение работников знаниям охраны труда Москва .
mosbet mosbet .
pharmacie en ligne sans ordonnance http://kamagrameilleurprix.com/# pharmacie en ligne
trouver un mГ©dicament en pharmacie https://pharmaciemeilleurprix.shop/# Pharmacie en ligne livraison Europe
Создайте идеальную атмосферу в вашем доме с программируемым электрокарнизом, подходит для любого окна.
Превратите свой дом в оазис комфорта с программируемым электрокарнизом, позволяет вам наслаждаться каждой минутой.
Освежите свою обстановку с помощью программируемого электрокарниза, обеспечит вам максимальный комфорт.
Пусть ваша спальня станет местом для отдыха и релаксации с программируемым электрокарнизом, создаст идеальную атмосферу для полноценного отдыха.
Регулируйте интенсивность света и тепла с помощью программируемого электрокарниза, поможет вам сэкономить время и энергию.
умный электрокарниз для штор curtain 3m https://elektrokarniz190.ru/ .
https://tadalafilmeilleurprix.shop/# п»їpharmacie en ligne france
acheter mГ©dicament en ligne sans ordonnance
pharmacie en ligne france livraison belgique Pharmacies en ligne certifiees Pharmacie Internationale en ligne
acheter mГ©dicament en ligne sans ordonnance: acheter kamagra site fiable — pharmacie en ligne france livraison internationale
https://tadalafilmeilleurprix.com/# pharmacies en ligne certifiГ©es
Pharmacie en ligne livraison Europe
pharmacie en ligne avec ordonnance http://kamagrameilleurprix.com/# pharmacie en ligne france fiable
pharmacie en ligne avec ordonnance: kamagra oral jelly — vente de mГ©dicament en ligne
Получите максимум удовольствия от вашего дома с программируемым электрокарнизом, подходит для любого окна.
Создайте идеальное освещение в вашем доме с программируемым электрокарнизом, позволяет вам наслаждаться каждой минутой.
Пусть ваш дом всегда выглядит стильно и современно с программируемым электрокарнизом, который позволит вам сохранить энергию.
Создайте идеальные условия для сна с помощью программируемого электрокарниза, который поможет вам легко заснуть и проснуться.
Регулируйте интенсивность света и тепла с помощью программируемого электрокарниза, поможет вам сэкономить время и энергию.
умный электрокарниз для штор умный электрокарниз для штор .
Viagra sans ordonnance 24h suisse Acheter Viagra Cialis sans ordonnance Viagra sans ordonnance 24h Amazon
https://kamagrameilleurprix.com/# Achat mГ©dicament en ligne fiable
pharmacie en ligne
http://tadalafilmeilleurprix.com/# pharmacie en ligne livraison europe
pharmacie en ligne france livraison internationale
п»їpharmacie en ligne france [url=https://pharmaciemeilleurprix.com/#]pharmacie en ligne pas cher[/url] Pharmacie en ligne livraison Europe
https://viagrameilleurprix.com/# Quand une femme prend du Viagra homme
pharmacie en ligne france fiable
Pharmacie Internationale en ligne: kamagra pas cher — pharmacie en ligne france pas cher
Viagra pas cher paris: Viagra sans ordonnance pharmacie France — Viagra pas cher livraison rapide france
Pharmacie sans ordonnance https://viagrameilleurprix.com/# Viagra 100mg prix
pharmacie en ligne sans ordonnance Pharmacie en ligne livraison Europe п»їpharmacie en ligne france
Pharmacie Internationale en ligne https://kamagrameilleurprix.shop/# trouver un mГ©dicament en pharmacie
pharmacie en ligne france livraison internationale: Cialis sans ordonnance 24h — п»їpharmacie en ligne france
накрутка зрителей Твич купить накрутка зрителей Твич купить .
https://pharmaciemeilleurprix.com/# pharmacie en ligne fiable
pharmacie en ligne france livraison belgique
pharmacies en ligne certifiГ©es: cialis prix — acheter mГ©dicament en ligne sans ordonnance
pharmacie en ligne fiable https://kamagrameilleurprix.com/# pharmacie en ligne france livraison internationale
https://tadalafilmeilleurprix.com/# Pharmacie en ligne livraison Europe
п»їpharmacie en ligne france
pharmacie en ligne france livraison internationale https://kamagrameilleurprix.shop/# Pharmacie sans ordonnance
pharmacie en ligne france livraison belgique kamagra livraison 24h pharmacie en ligne france livraison belgique
https://pharmaciemeilleurprix.com/# pharmacie en ligne france livraison internationale
Pharmacie Internationale en ligne
1 win app 1win1.com.kg .
pharmacie en ligne france pas cher http://pharmaciemeilleurprix.com/# pharmacie en ligne
https://kamagrameilleurprix.com/# pharmacie en ligne livraison europe
pharmacie en ligne france fiable
pharmacie en ligne france pas cher https://pharmaciemeilleurprix.shop/# Achat mГ©dicament en ligne fiable
Acheter viagra en ligne livraison 24h Viagra pharmacie Viagra sans ordonnance 24h suisse
Оптимизируйте свою жизнь с электрокарнизом с таймером, наслаждайтесь комфортом и современностью.
Простота и элегантность в каждой комнате с электрокарнизом и таймером, который подчеркнет ваш вкус и индивидуальность.
Освободите руки и ум с электрокарнизом и таймером, создайте идеальную атмосферу в вашем доме.
Умное устройство для вашего дома — электрокарниз с таймером, который упростит вашу жизнь и сделает ее более комфортной.
Инновационные технологии в управлении шторами — электрокарниз с таймером, добавит функциональности и удобства в вашу жизнь.
умные шторы на окна купить https://prokarniz50.ru/ .
https://pharmaciemeilleurprix.com/# п»їpharmacie en ligne france
pharmacie en ligne fiable
pharmacie en ligne france livraison internationale: kamagra oral jelly — pharmacie en ligne france livraison belgique
https://viagrameilleurprix.shop/# SildГ©nafil 100 mg prix en pharmacie en France
acheter mГ©dicament en ligne sans ordonnance
Pharmacie Internationale en ligne https://pharmaciemeilleurprix.com/# Achat mГ©dicament en ligne fiable
1win скачать на андроид бесплатно https://1win2.com.kg/ .
1win слоты с минимальной ставкой https://www.1win8.com.kg .
https://kamagrameilleurprix.shop/# trouver un mГ©dicament en pharmacie
pharmacie en ligne france fiable
pharmacie en ligne france livraison belgique achat kamagra acheter mГ©dicament en ligne sans ordonnance
https://viagrameilleurprix.com/# Acheter Sildenafil 100mg sans ordonnance
pharmacie en ligne livraison europe