В данной статье пойдет речь о том, как подключить датчик температуры 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-ти Вольт.
Подскажите что можно сделать
А можно туже самую задачу, только на «С»?И еще превратить простой термометр в многоканальный терморегулятор?
Но как опрашивать датчики по порядку, по адресам, если они на одном проводе?
Доброго времени суток!!!
Спасибо за проделанную работ!!!
Особенно понравилась написанная работа, над поиском 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_ */
mexican pharmacy acp: mexican pharmacy acp — mexican pharmacy acp
mexican pharmacy acp medication from mexico pharmacy mexican pharmaceuticals online
https://mexicanpharmacyacp.shop/# medicine in mexico pharmacies
medicine in mexico pharmacies
мостбет скачать мостбет скачать .
motbet https://www.mostbet1004.com.kg .
India pharmacy ship to USA: IndianPharmacyAbp — Online medicine home delivery
mexican pharmacy acp: mexican pharmacy acp — п»їbest mexican online pharmacies
1win website https://www.1win11.com.ng .
India pharmacy ship to USA: IndianPharmacyAbp — IndianPharmacyAbp
Приобрести диплом университета по доступной цене можно, обращаясь к проверенной специализированной компании. Мы готовы предложить документы учебных заведений, которые расположены в любом регионе России. vuz-diplom.ru/kupit-diplom-kolledzha-v-moskve
Купить диплом института !
Приобретение диплома ВУЗа РФ в нашей компании — надежный процесс, так как документ будет заноситься в реестр. Печать производится на фирменных бланках ГОЗНАКа. Заказать диплом о высшем образовании arenadiplom24.online/vuzy/lipetskogo-filiala-finuniversiteta
mexican pharmacy acp: mexican pharmacy acp — mexican pharmacy acp
mexico drug stores pharmacies: mexican pharmacy acp — mexican mail order pharmacies
cheapest online pharmacy india: Indian Pharmacy Abp — Online medicine home delivery
India pharmacy ship to USA: Indian Pharmacy Abp — Indian pharmacy online
https://mexicanpharmacyacp.shop/# mexican pharmacy acp
п»їbest mexican online pharmacies
1win вход в личный кабинет http://www.1win715.ru .
1win live https://1win114.com.kg .
1вин http://www.1win708.ru .
Казино — место для увлекательных РёРіСЂ.: balloon казино официальный сайт — balloon казино
1win moldova http://www.1win705.ru .
мостбет скачать андроид http://mostbet780.ru .
mostbet chrono mostbet chrono .
balloon казино демо balloon казино демо Казино — РјРёСЂ азартных приключений.
Рграйте РІ казино, наслаждайтесь каждым моментом.: balloon казино играть — balloon казино
Р’ казино всегда есть что-то РЅРѕРІРѕРµ.: balloon казино — balloon казино играть
mostbet casino mostbet casino .
1 win регистрация http://www.agility.forum24.ru/?1-0-0-00000755-000-0-0-1742359870 .
1win молдова http://1win5002.ru .
Рграйте СЃ СѓРјРѕРј, РЅРѕ РЅРµ забывайте Рѕ веселье.: balloon казино демо — balloon игра
dang nh?p alo789: alo 789 — alo 789
nha cai k8 k8 nha cai k8
https://88betviet.pro/# 88bet
88bet: keo nha cai 88bet — nha cai 88bet
http://88betviet.pro/# 88 bet
k8 bet: k8 — k8
Официальный сайт Нев Ретро Казино http://www.newretromirror.ru .
1вин войти https://belbeer.borda.ru/?1-6-0-00001555-000-0-0-1742473542/ .
wan win https://www.taksafonchik.borda.ru/?1-14-0-00002041-000-0-0 .
88bet 88 bet 88bet
трансформаторы силовые масляные купить трансформаторы силовые масляные купить .
mostbet скачать на телефон бесплатно андроид http://ongame.forum24.ru/?1-18-0-00001219-000-0-0-1742360461 .
согласование перепланировок согласование перепланировок .
Здравствуйте!
Для многих людей, купить диплом ВУЗа — это острая необходимость, шанс получить выгодную работу. Однако для кого-то — это понятное желание не терять время на учебу в ВУЗе. Что бы ни толкнуло вас на такое решение, наша фирма готова помочь. Оперативно, профессионально и по доступной цене изготовим диплом любого года выпуска на настоящих бланках со всеми печатями.
Главная причина, почему многие прибегают к покупке документа, — получить хорошую должность. Например, навыки и опыт позволяют кандидату устроиться на желаемую работу, однако подтверждения квалификации нет. В том случае если работодателю важно присутствие «корочки», риск потерять место работы очень высокий.
Купить документ ВУЗа вы имеете возможность в нашей компании в столице. Мы предлагаем документы об окончании любых ВУЗов Российской Федерации. Вы сможете получить необходимый диплом по любым специальностям, включая документы образца СССР. Гарантируем, что при проверке документа работодателями, каких-либо подозрений не появится.
Разных обстоятельств, которые вынуждают заказать диплом достаточно. Кому-то прямо сейчас потребовалась работа, в итоге нужно произвести впечатление на руководителя во время собеседования. Некоторые желают устроиться в престижную компанию, чтобы повысить свой статус и в дальнейшем начать свое дело. Чтобы не тратить драгоценное время, а сразу начинать успешную карьеру, применяя врожденные способности и полученные навыки, можно купить диплом через интернет. Вы сможете быть полезным для общества, обретете финансовую стабильность в кратчайший срок- купить диплом о высшем образовании
https://alo789.auction/# alo789in
https://88betviet.pro/# 188bet 88bet
k8vip: nha cai k8 — k8 bet
88bet nha cai 88bet 88bet slot
alo 789: alo 789 — alo789 chinh th?c
https://k8viet.guru/# k8 th? dam
alo789in: 789alo — alo789 dang nh?p
alo 789: 789alo — alo 789
link vao k8: link vao k8 — k8
https://alo789.auction/# alo789in
88bet 88bet 88bet slot
1win скачать последнюю версию https://1win822.ru .
nha cai k8: k8 th? dam — k8vip
nha cai k8: k8 — k8
мастбет мастбет .
электрические карнизы для штор в москве электрические карнизы для штор в москве .
где можно купить медицинскую справку права центр медицинских справок
Приобретение диплома через качественную и надежную компанию дарит ряд преимуществ. Это решение помогает сэкономить время и существенные финансовые средства. Впрочем, только на этом выгода не ограничивается, преимуществ значительно больше.Мы можем предложить дипломы психологов, юристов, экономистов и прочих профессий. Дипломы производят на подлинных бланках государственного образца. Доступная цена в сравнении с серьезными издержками на обучение и проживание. Покупка диплома о высшем образовании из российского института является мудрым шагом.
Заказать диплом: diplomist.com/diplom-s-vneseniem-v-reestr-kupit/
dang nh?p alo789: alo 789 — alo 789
http://k8viet.guru/# nha cai k8
https://k8viet.guru/# nha cai k8
1 вин https://1win823.ru .
https://88betviet.pro/# 88bet
заказать соут в москве заказать соут в москве .
88bet: nha cai 88bet — 88bet
https://k8viet.guru/# k8 th? dam
1 ван вин https://1win810.ru .
мостбет скачать бесплатно мостбет скачать бесплатно .
http://88betviet.pro/# 88bet slot
k8 k8 k8vip
nha cai 88bet: keo nha cai 88bet — 188bet 88bet
https://88betviet.pro/# 188bet 88bet
https://alo789.auction/# alo 789
https://alo789.auction/# alo789 dang nh?p
https://88betviet.pro/# 88bet slot
88bet: nha cai 88bet — nha cai 88bet
https://k8viet.guru/# k8 bet
мостбет казино eisberg.forum24.ru/?1-0-0-00000327-000-0-0-1742579529 .
мостбет казино taksafonchik.borda.ru/?1-14-0-00002042-000-0-0-1742473173 .
что такое 1win https://fanfiction.borda.ru/?1-3-0-00000125-000-0-0-1742475251 .
Мы изготавливаем дипломы любых профессий по приятным ценам. Дипломы производят на фирменных бланках Приобрести диплом о высшем образовании diplomers.com
Где заказать диплом по нужной специальности?
Купить диплом института по выгодной стоимости вы можете, обратившись к надежной специализированной компании.: zakaz-na-diplom.ru
nha cai k8 k8 th? dam k8 bet
keo nha cai 88bet: 88 bet — keo nha cai 88bet
Мы изготавливаем дипломы любой профессии по приятным ценам. Стараемся поддерживать для покупателей адекватную политику цен. Для нас очень важно, чтобы дипломы были доступны для большинства граждан.
Приобретение документа, подтверждающего окончание университета, — это выгодное решение. Приобрести диплом о высшем образовании: diplom4you.com/kupit-diplom-v-volgograde-20/
https://alo789.auction/# alo789in
Приобрести документ о получении высшего образования вы можете в нашей компании в столице. Мы оказываем услуги по продаже документов об окончании любых ВУЗов России. Вы получите диплом по любой специальности, любого года выпуска, включая документы образца СССР. Даем 100% гарантию, что при проверке документов работодателями, подозрений не появится. wmrp.listbb.ru/viewtopic.php?f=51&t=1927
http://88betviet.pro/# 88 bet
88bet slot: 188bet 88bet — 188bet 88bet
Быстро купить диплом об образовании!
Мы можем предложить дипломы любой профессии по выгодным ценам— diplom-ryssia.com/kupit-diplom-kolledzha-s-zaneseniem-v-reestr/
https://alo789.auction/# alo789 chinh th?c
88bet: 88bet slot — 88bet slot
https://88betviet.pro/# keo nha cai 88bet
что делать с бонусным балансом на 1win 1win824.ru .
1-win 1-win .
1wi 1wi .
http://k8viet.guru/# k8vip
Где заказать диплом специалиста?
Полученный диплом с приложением целиком и полностью отвечает стандартам Министерства образования и науки, неотличим от оригинала. Не следует откладывать собственные мечты и цели на пять лет, реализуйте их с нашей компанией — отправьте быструю заявку на изготовление документа прямо сейчас! Получить диплом о среднем образовании — не проблема! diplomist.com/kupit-ofitsialnij-diplom-o-srednem-obrazovanii-bistro/
Диплом университета России!
Без наличия диплома очень сложно было продвинуться по карьерной лестнице. Именно из-за этого решение о заказе диплома следует считать рациональным. Выгодно заказать диплом института club-kia.com/forum/thread31279.html
mostbet chrono http://mostbet785.ru .
1win кыргызстан 1win кыргызстан .
ван вин 1win812.ru .
link vao k8: nha cai k8 — k8 th? dam
alo789: alo789hk — alo789 dang nh?p
Где приобрести диплом по необходимой специальности?
Мы изготавливаем дипломы психологов, юристов, экономистов и других профессий по доступным тарифам. Мы предлагаем документы техникумов, которые расположены на территории всей Российской Федерации. Вы можете купить качественно сделанный диплом за любой год, указав актуальную специальность и хорошие оценки за все дисциплины. Дипломы и аттестаты печатаются на «правильной» бумаге высшего качества. Это позволяет делать государственные дипломы, не отличимые от оригиналов. Документы заверяются всеми обязательными печатями и штампами. Всегда стараемся поддерживать для заказчиков адекватную ценовую политику. Важно, чтобы дипломы были доступны для большого количества наших граждан. prodiplome.com/kupit-diplom-o-srednem-2-5
http://88betviet.pro/# 188bet 88bet
88bet: keo nha cai 88bet — 188bet 88bet
Купить документ о получении высшего образования вы имеете возможность у нас в Москве. diplomers.com/kupit-diplom-krasnodar-4-2
сервисы для покупки аккаунтов купить аккаунты в соц сетях
alo 789: dang nh?p alo789 — dang nh?p alo789
http://alo789.auction/# alo789
1win aplicația 1win5003.ru .
Мы можем предложить дипломы любых профессий по приятным ценам.— http://www.repercom.org/nous-contacter
win 1 http://www.1win827.ru .
служба поддержки мостбет номер телефона http://www.mostbet786.ru .
IndiaMedFast.com IndiaMedFast lowest prescription prices online india
buying from online mexican pharmacy: mexican pharmacy online order — mexican pharmacy online
https://mexicanpharminter.com/# mexican drug stores online
canadian online drugstore
cross border pharmacy canada: canadian drugstore online no prescription — canadian pharmacies that deliver to the us
https://interpharmonline.shop/# drugs from canada
Mexican Pharm Inter: mexican pharmacy online store — MexicanPharmInter
Купить диплом о высшем образовании поможем. Купить диплом бакалавра в Чебоксарах — diplomybox.com/kupit-diplom-bakalavra-v-cheboksarakh
https://mexicanpharminter.com/# MexicanPharmInter
pharmacies in canada that ship to the us
Для максимально быстрого продвижения по карьерной лестнице понадобится наличие официального диплома о высшем образовании. Заказать диплом об образовании у надежной организации: diplomh-40.ru/diplom-kupit-v-omske/
1wi https://1win813.ru .
iphone 16 256gb best iphone
мостбет мобильная версия скачать мостбет мобильная версия скачать .
buying prescription drugs from india: IndiaMedFast.com — india pharmacy without prescription
1vin https://www.pboarders.borda.ru/?1-11-0-00000929-000-0-0-1742818701 .
https://interpharmonline.com/# canada drugs online review
legit canadian online pharmacy
mostbet chrono https://www.shorts.borda.ru/?1-18-0-00000397-000-0-0 .
canadian online pharmacy reviews InterPharmOnline reliable canadian online pharmacy
reddit canadian pharmacy: most trusted canadian pharmacies online — my canadian pharmacy
online pharmacy india: cheapest online pharmacy india — cheapest online pharmacy india
Заказать диплом ВУЗа!
Мы предлагаем документы институтов, расположенных на территории всей России.
dip-lom-rus.ru/kupit-diplom-magistraturi
https://mexicanpharminter.com/# MexicanPharmInter
canadian pharmacy tampa
сайт аккаунтов социальной сети биржа аккаунтов соц сетей
https://indiamedfast.com/# buying prescription drugs from india
online medicine shopping in india: cheapest online pharmacy india — online medicine shopping in india
1 win https://boardwars.forum24.ru/?1-10-0-00000406-000-0-0/ .
ван вин https://1win814.ru .
mostbet https://tagilshops.forum24.ru/?1-4-0-00000205-000-0-0 .
мост бет https://mostbet795.ru// .
canadian mail order pharmacy: legitimate canadian pharmacies online — onlinecanadianpharmacy
Банкротство является прекрасной возможностью списать долги и начать жизнь с чистого листа. Не откладывайте решение проблемы, прочитайте отзывы тех, кто уже прошел процедуру банкротства банкротство физических лиц .
покупка аккаунтов купить аккаунт дешево
https://indiamedfast.com/# cheapest online pharmacy india
canadian pharmacy mall
online medicine shopping in india: online medicine shopping in india — order medicines online india
http://mexicanpharminter.com/# mexican drug stores online
best canadian online pharmacy: online canadian pharmacy no prescription — canadian pharmacy 24h com safe
https://indiamedfast.shop/# buying prescription drugs from india
canada pharmacy world
1win официальный сайт http://1win815.ru/ .
1wi https://1win6014.ru/ .
mostbest https://kharkovbynight.forum24.ru/?1-15-0-00003047-000-0-0-1742814422 .
1вин бет официальный сайт 1вин бет официальный сайт .
мостбет казино войти мостбет казино войти .
http://indiamedfast.com/# india pharmacy without prescription
https://mexicanpharminter.com/# mexican drug stores online
Mexican Pharm International: Mexican Pharm International — mexican pharmacy online order
http://interpharmonline.com/# canadian online drugstore
canadian pharmacy ltd
kamagra kopen nederland: kamagra gel kopen — kamagra gel kopen
https://kamagrakopen.pro/# KamagraKopen.pro
https://kamagrakopen.pro/# kamagra jelly kopen
1вин официальный сайт https://1win816.ru/ .
мостбет скачать https://www.maksipolinovtsu.forum24.ru/?1-1-0-00000194-000-0-0-1742815870 .
1.вин http://www.1win6015.ru .
http://tadalafileasybuy.com/# cialis without a doctor prescription
мосбет http://mostbet6002.ru/ .
https://kamagrakopen.pro/# kamagra 100mg kopen