Перейти к содержанию

URRS

Members
  • Постов

    29
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные URRS

  1. Всем привет. Хотел уточнить вопрос по работе void nik(). При выполнении скетча программа в упор не хочет ее выполнять. А все задачи в Blynk выполняются без проблем. Почему игнорит void nik()? Хотя компилирует без проблем. Пример скетча:

    #define PIN_DIG_RAIN_KITCHEN D0   
    #define PIN_MOTOR1_A1A D1
    #define PIN_MOTOR1_A1B D2
    #define BLYNK_PRINT Serial        
    #include <ESP8266WiFi.h>         
    #include <BlynkSimpleEsp8266.h>

    char auth[] = "ччч"; 
    char ssid[] = "ччч";     
    char pass[] = "ччч";  

    void setup() {
      Serial.begin(115200);
      Blynk.begin(auth, ssid, pass);
      
      //УСТАНОВКА КОНТАКТОВ НА ВХОД ИЛИ ВЫХОД
      pinMode(PIN_MOTOR1_A1A, OUTPUT);
      pinMode(PIN_MOTOR1_A1B, OUTPUT);
      pinMode(PIN_DIG_RAIN_KITCHEN, INPUT);
      

    void nik(){
      int sensorValue = digitalRead(PIN_DIG_RAIN_KITCHEN);//& digitalRead(PIN_DIG_RAIN_BATHROOM); //|(PIN_DIG_RAIN_TOILET);
      Serial.print("Цифра: ");
      Serial.println(sensorValue);
      switch (sensorValue) {
        case 0:
          Serial.print("ПРОТЕЧКА");//выполняется, когда sensorValue равно 0
          digitalWrite(PIN_MOTOR1_A1A, LOW);
          digitalWrite(PIN_MOTOR1_A1B, HIGH);
          break;
        case 1:
          Serial.print("СИСТЕМА ВОДОСНОБЖЕНИЯ В РАБОТЕ");//выполняется когда  sensorValue равно 1
          digitalWrite(PIN_MOTOR1_A1A, HIGH);
          digitalWrite(PIN_MOTOR1_A1B, LOW);
          break;
          }
      }

    BLYNK_WRITE(V1){  //опция "MENU"
      switch(param.asInt()){
        case 1: //Item 1
          digitalWrite(PIN_MOTOR1_A1B, HIGH);
          digitalWrite(PIN_MOTOR1_A1A, LOW);
          Serial.println("Закрыть кран");
          delay (10000);
          digitalWrite(PIN_MOTOR1_A1B, LOW);
          break;
        case 2: //Item 2
          digitalWrite(PIN_MOTOR1_A1B, LOW);
          digitalWrite(PIN_MOTOR1_A1A, HIGH);
          Serial.println("Открыть кран");
          delay (10000);
          digitalWrite(PIN_MOTOR1_A1A, LOW);
          break;
          }
    }


    void loop() {
     Blynk.run();
     timer.run();
    }

  2. Проект: Датчик направления ветра на ATMEGA8 и выводом на LCD_5110(Nokia_3310)

    Представляю вариант датчика направления ветра с точностью до 16 направлений (22,5 градуса). Принцип его действия прост и основан на оптическом формировании информации. А именно: сверху ставиться ИК светодиод, снизу (по направлению друг к другу) ИК фотодиод, а между ними пластинка с отверстием. При прохождении света через отверстие свет поступает на ИК фотодиод и он посылает сигнал на МК (см.рисунок). Существуют два сигнала: есть свет или нет, т.е. логический «0» или «1». Можем получить два значения, но если установить 4 свето и фото диода, то получим 42=16 значений (4 бита информации).

    5ae97d6f1c48e_.gif.3077bb1601a4856611478447a00bb73f.gif

    Плюсы оптической схемы формирования сигнала информации: лёгкость исполнения, точность, сжатие информации (4 бита = 16 значений), широкое применение в сфере электроники (пож.датчик, волоконно-оптические системы передач и т.д., малые энергозатраты (и т.д.), низкая цена реализации.

    //Atmega8
    #define F_CPU 8000000 //частота 8МГц
    #include <avr/io.h>
    #include "n5110.h" //Библиотека LCD Nokia3310
    #include <util/delay.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	Lcd_init();		//Инициализация дисплея
    	Lcd_clear();	//Чистка дисплея
    	PORTC |= (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3); //Порт 0,1,2,3 включены на приём
    	while(1)
    	{		
    		switch(PINC & 0x0F) //Вывод направления ветра на дисплей (PINC & 0b1111)
    		{	case 15: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("ВОСТОЧНЫЙ       ")); break;
    			case 14: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("В-В-СЕВЕРНЫЙ    ")); break;
    			case 13: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("С-С-ВОСТОЧНЫЙ   ")); break;
    			case 12: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("СЕВЕРО-ВОСТОЧНЫЙ")); break;
    			case 11: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("З-З-СЕВЕРНЫЙ    ")); break;
    			case 10: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("СЕВЕРО-ЗАПАДНЫЙ ")); break;
    			case 9: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("СЕВЕРНЫЙ        ")); break;
    			case 8: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("С-С-ЗАПАДНЫЙ    ")); break;
    			case 7: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("В-В-ЮЖНЫЙ       ")); break;
    			case 6: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("ЮГО-ВОСТОЧНЫЙ   ")); break;
    			case 5: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("ЮЖНЫЙ           ")); break;
    			case 4: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("Ю-Ю-ВОСТОЧНЫЙ   ")); break;
    			case 3: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("ЗАПАДНЫЙ        ")); break;
    			case 2: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("З-З-ЮЖНЫЙ       ")); break;
    			case 1: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("Ю-Ю-ЗАПАДНЫЙ    ")); break;
    			case 0: Lcd_prints(0,1,FONT_1X,(unsigned char *)PSTR("ЮГО-ЗАПАДНЫЙ    ")); break;
    			default: break;
    		}
    		//Вывод на дисплей LCD_5110(Nokia3310)
    		Lcd_prints(4,0, FONT_1X, (unsigned char*)PSTR("ВЕТЕР:"));
    		Lcd_update(); //Копирование буфера в ОЗУ дисплея
    		_delay_ms(200); //Задержка
    	}
    }

    Весь наработанный материал размещен в архиве (код с++, схема, коды направлений, фото разработки, схема в Proteus 7.10 SP0, библиотека). Проект находится на стадии разработки и любые внедрения и модернизации будут приветствоваться.

    Если кто подскажет с помощью какой функции можно собрать датчик скорости ветра (частотомер) с моделью: замерить количество импульсов за 10 секунд (таймер и буфер), после сравнить результат с табличным (10-20 импульсов = 2м/с, 20-30 имп = 3м/с и т.д.) и вывести на экран LCD?

    Данный проект был задуман для контроля направления ветра (получить информацию), чтоб в сильный ветер поворачивать крупногабаритные радиолюбительские антенны и уменьшить их парусность.

    5ae97b5367dd9_.jpg.734938d358e89284b50a1ce73f945e25.jpg5ae97b53f18db_.JPG.e6814f946c144e72c8ac7b76164ab8c0.JPGIMG_20180502_130624.jpg.d3a1623486cd66d190f73cb78e38822a.jpg

    5ae97ca0c369e_.jpg.0ce4b4eab0b54991f7e60a5da887d46b.jpg

    Wind_direction_proj.rar

  3. Проект: Домашняя метеостанция на Atmega8 датчик DHT11 с выводом на LCD_Nokia3310(5110).

    Выкладываю готовый проект с кодом для Atmel Studio 6.1, схемой для Proteus 7.10 SP0 (т.к. библиотека дисплея подходит только под эту версию), фото для выставления Fuses и всеми необходимыми библиотеками (LCD_3310(5110), DHT11). Вдруг кого заинтересует. Проект делал для дополнения функционала датчика направления ветра, далее и его выложу. Все коды были исправлены и написаны при участии ребят с местного форума. Сам слабоват в коде С++, за что им респект и уважение!

    Прикрепляю код с более крупным шрифтом и возможным выводом дробного значения (закомпилирован)...

    //Atmega8
    #define F_CPU 8000000 //частота 8МГц
    #include <avr/io.h> //Библиотека
    #include "n5110.h" //Библиотека LCD Nokia3310
    #include <util/delay.h>
    #include <stdlib.h>
    #include "dht11.h"
    
    char buffer[8]; //Переменная buffer
    int main( void ){
    	Lcd_init();		// Инициализация LCD дисплея
    	Lcd_clear();	// Очистка дисплея
    	int8_t temperature = 0;		//Установка параметров из библиотеки dht11.h
    	int8_t humidity = 0;		//Установка параметров из библиотеки dht11.h
    	while(1){
    		temperature = dht11_gettemperature();	//Присвоение переменной - температура
    		_delay_ms(800);							//Задержка
    		humidity = dht11_gethumidity();			//Присвоение переменной - влажность
    		_delay_ms(800);							//Задержка
    		Lcd_prints(0,3, FONT_1X, (unsigned char*)PSTR("ТЕМПЕР  ВЛАЖН"));
    		Lcd_print(0,5,FONT_2X,(unsigned char*) itoa(temperature, buffer, 10));	//Вывод на дисплей переменную
    		//Lcd_printf(0,5, FONT_2X, temperature, 1); //Пример вывод переменной с дробной частью
    		Lcd_prints(4,5, FONT_2X, (unsigned char*)PSTR("C"));
    		Lcd_print(8,5,FONT_2X,(unsigned char*) itoa(humidity, buffer, 10));		//Вывод на дисплей переменную
    		Lcd_prints(12,5, FONT_2X, (unsigned char*)PSTR("%"));
    		_delay_ms(200);		//Задержка
    		Lcd_update();		//Копирование буфера в ОЗУ дисплея
    	}
    }

     

    DHT11_proj.rar

    IMG_20180501_193752.jpg

    IMG-60b48760a533dc3ca28cd2deebd77b1b-V.jpg

  4. Урааа, заработало!!!@snn_krs Спасибо большущее!  Сейчас допишу и выложу материал, вдруг кому пригодиться. К датчику направления ветра (16 направлений) пришлепаю, будет более функциональнее. Еще раз спасибо!

     

     

  5. 43 минуты назад, snn_krs сказал:

    если вторая строка вместо -1 станет 28, значит ошибка в библиотеке...

    humidity = 30;//dht11_gethumidity();
    temperature = 5;//dht11_gettemperature();
    Lcd_print(0,0,FONT_1X,(unsigned char*) itoa(humidity, buffer, 10)); //Вывод на дисплей переменную
    Lcd_print(0,1,FONT_1X,(unsigned char*) itoa(temperature, buffer, 10)); //Вывод на дисплей переменную

    Как только поменял, 30 и 5 на дисплее появились. Значит вопросы к библиотеке... И в макетке так же отображается:unsure:. Попробую библиотеку поискать и заменить. @snn_krs спасибо за помощь. 

  6. 9 часов назад, snn_krs сказал:

    ...если у меня таже библиотека, то к РС5.

    @snn_krs приветствую! Перед сборкой схемы поменял в библиотеке на РС4. Так по схеме удобно:). Надо выполнить 3 этапа: 1 Объявляем переменную (char buffer[8]); 2 присвоение переменной ...ххх... значения; 3 выводим полученного значения переменной на экран. Чую что значение не присвоил переменной... (пункт 2 пропущен). Вот код предложенный одним из пользователей к датчику, но дисплей у него другой.

    char buffer[8];
    int main( void )
    {	LCDinit(); // Инициализация LCD
    	LCDcursorOFF(); // Выключаем курсоор
    	LCDclr(); // Очищаем дисплей
    
    	int8_t temperature = 0; //ХЗ что это int8_t??
    	int8_t humidity = 0; //ХЗ что это int8_t??
    	while(1) {
    		humidity = dht11_gethumidity(); //Обращение к установкам в библиотеке (значение) влажности
    		temperature = dht11_gettemperature(); //...-...-
    		//по коду видно, что переменная и ее значения присутствуют со статическим тексттом
    		LCDGotoXY(0,0); //Координаты на дисплее
    		sprintf(buffer, "T=%02d", temperature); //Переменная и ее значение + статика
    		LCDstring(buffer,4); //Переменная и количество знаков после запятой
    		
    		LCDGotoXY(0,1);
    		sprintf(buffer, "H=%02d", humidity);
    		LCDstring(buffer,4);
    	}
    }

     

  7. Всем здравствуйте. Попался в руки датчик температуры и влажности DHT11, решил приляпать к atmege8, а в результате переменную не могу вывести:mellow:. Подскажите по коду, где слажал. Жаль примеров почти нет. Картинки и код прилагаются. Заранее спасибо!

    //Atmega8
    #define F_CPU 8000000 //частота 8МГц
    #include <avr/io.h>
    #include "n5110.h" //Библиотека LCD Nokia3310
    #include <util/delay.h>
    #include <stdlib.h>
    #include "dht11.h"
    
    char buffer[8]; //Переменная
    int main( void ){
        Lcd_init(); // Инициализация LCD
        Lcd_clear(); // Очистка дисплея
        int8_t temperature = 0; //Установка параметров из библиотеки dht11.h
        int8_t humidity = 0; //Установка параметров из библиотеки dht11.h
        while(1) {
            humidity = dht11_gethumidity();
            temperature = dht11_gettemperature();
            itoa(temperature, buffer, 10);
            Lcd_printf(0,1, FONT_1X, humidity, 0); //Вывод дробного значения (и так уже попробовал)
            Lcd_printf(0,2, FONT_1X, temperature, 0); //Вывод дробного значения (и так уже попробовал)
            Lcd_print(0,3,FONT_1X,(unsigned char*) buffer); //Вывод на дисплей переменную
        Lcd_update(); //Копирование буфера в ОЗУ дисплея
        _delay_ms(200); //Задержка
            }
    }

     

     

    код.jpg

    рисун.jpg

  8. @Berg ,большущее спасибо:friends:!!!! Всё работает:dance2:. Теперь усовершенствуем до 16 значений (изучим функцию switch), добавим задержки, тестинг и монтаж! Теперь антенна Яги будет под защитой от ветра (лобового порыва). Как соберу, фото прилажу. С уважением, Николай (Rx9chy/8) с полярного круга!

    @COKPOWEHEU книга «Язык Си» шикарная, как раз для таких как я!!! Очень интересная! Спасибо!

    20140821_204150.jpg

  9. @S1BaR1T , приветствую. Свой дисплей подсоединил нормально. Контакты и в правду на твоём как то по другому. Но от перемены слагаемых...

    // Распиновка порта (из библиотеки n5110.h) 
    LCD_DC_PIN                 PB1    // DC
    LCD_CE_PIN                 PB2    // SCE
    SPI_MOSI_PIN              PB3  // SDIN 
    LCD_RST_PIN               PB4    // RESET
    SPI_CLK_PIN                PB5  // SCLK 

    Твоя распиновка:

    1 Vcc - +5V( или 3.3V)

    2 GND -5V

    3 LCD_CE_PIN                 PB2    // SCE

    4 LCD_RST_PIN               PB4    // RESET

    5 LCD_DC_PIN                 PB1    // DC

    6 SPI_MOSI_PIN              PB3  // SDIN 

    7 SPI_CLK_PIN                PB5  // SCLK 

    8 подсветка дисплея +5В или 3,3 (на усмотрение).

    Во вложении рабочий код с библиотекой на дисплей, схема протеуса 7.

    LCD_5110.zip

    LCD proj.rar

    lcd_5110.DSN

  10. По поводу void name{....} предположил, что туда вписывают основные настройки портов (предустановки).

    А в main{name()....} основной код.

    Посоветуйте литературу по Си для чайников с «0»? Для тех кто к программированию отношение не имел (технарь).

  11. 8 минут назад, dm37 сказал:

    @URRS а где у вас функция main() в проекте?

    Прошляпил. Не совсем понимаю, что вписывать в

    void setup{???основные установки?}

    далее

    int main{setup()while(1){???цикл или циклы выполнения кода?}}.

    В общем вопросов море, а книга одна:umnik2: "1000 и одна микроконтроллерная схема". Пока техн часть...

  12. Всем добрый вечер! Прикрепил код в Си и схему для протеуса (AS 6.1, Proteus 7).Вывод переменной на LCD (Lcd_print(x,y, FONT_1X, (unsigned char*)some_char);)

    @COKPOWEHEU , тестил всякие варианты, dir_arr никак не хочет воспринимать :unknw:.

    Анемометр.rar

     

  13. Технически анемометр готов. По началу хотел собрать на герконах, да к это банально. Подумав решил сжать в двоичную систему для увеличения количества направлений. 4 фотодиода, 2 ист света и круглая пластинка с прорезями между ними (свет пройдя через вращаемую ветром пластинку попадет на фотодиод нужного бита и сформирует сигнал). Проще, легче и магнит не нужен. А с кодом засада вышла:unknw:. Как программе сказать вот 4 бита (0,1,2,3), сравни с табличными значениями и выдай текст. Как то так... 

  14. @dm37 , приветствую! Читал. все вроде просто, а в переменную никак не могу заставить работать. Точнее правильно ли я формирую.

    Думал так:

    const char string_0[] PROGMEM = "String 0";   // "String 0" и т.д. - это содержимое строк; если необходимо меняйте его
    const char string_1[] PROGMEM = "String 1";
    const char string_2[] PROGMEM = "String 2";
    const char string_3[] PROGMEM = "String 3";
    const char string_4[] PROGMEM = "String 4";
    const char string_5[] PROGMEM = "String 5";
     
     
    // Теперь создаем таблицу с отсылками к этим строкам:
    const char* const string_table[] PROGMEM = {string_0, string_1, string_2, string_3, string_4, string_5};
     
    char buffer[30];

    Дальше надо работать с переменной и выводить на дисплей

    ???(тут стопор) //Все пишут по разному

    //Обращение к такой строке идет через специальные команды strcpy_P, memcpy_P, pgm_read_byte и т.д.

    Lcd_print(x,y, FONT_1X, переменная???)// вывод на дисплей nokia3310

    Вот тут работает на Ура... Но смысла сжатия входной логич. 1 нету. 

    //Atmega8
    //Анемометр, направление ветра
    #define F_CPU 8000000 //частота 8МГц
    #include <avr/io.h>
    #include "n5110.h" //Библиотека LCD Nokia3310
    #include <util/delay.h>
    #include <avr/delay.h>

    void presets(){
        DDRC = 0x0f; //Порт С настроен на вход
        PORTC = 0x00; //Обнуление порта С
        Lcd_init(); //инициализация дисплея LCD Nokia3310
        Lcd_clear(); //Очистка буфера дисплея
          
    }

    int main(void){
        presets();
        while(1)
        {
            
            if (PINC &(1<<0))  //Регистр РС0
            {
        Lcd_prints(0,0, FONT_1X, (unsigned char*)PSTR("ВЕТЕР:"));
        Lcd_prints (0,1, FONT_1X, (unsigned char*)PSTR("Север"));
        Lcd_update(); //Копирование буфера в ОЗУ системы
        _delay_ms(1000);
            } 
            else
            {
        Lcd_clear(); //Очистка буфера дисплея
        Lcd_prints(0,0, FONT_1X, (unsigned char*)PSTR("ВЕТЕР:"));    
        Lcd_update(); //Копирование буфера в ОЗУ системы
            }
            if (PINC &(1<<1))  //Регистр РС1
            {
                Lcd_prints(0,0, FONT_1X, (unsigned char*)PSTR("ВЕТЕР:"));
                Lcd_prints (0,1, FONT_1X, (unsigned char*)PSTR("Восток"));
                Lcd_update(); //Копирование буфера в ОЗУ системы
                _delay_ms(1000);
            }
            else
            {
                Lcd_clear(); //Очистка буфера дисплея
                Lcd_prints(0,0, FONT_1X, (unsigned char*)PSTR("ВЕТЕР:"));
                Lcd_update(); //Копирование буфера в ОЗУ системы
            }

  15. @COKPOWEHEU, приветствую! Не выходит задумка. сжал код до 2 бит на прием (4 комбинации). "dir_arr" не признает (variable 'dir_arr' must be const in order to be put into read-only section by means of '__attribute__((progmem))')...

    //Atmega8
    #define F_CPU 8000000 //частота 8МГц
    #include <avr/pgmspace.h> //Библиотека PROGMEM
    #include <avr/io.h>
    #include "n5110.h" //Библиотека LCD Nokia3310
    #include <util/delay.h> //Библиотека задержки

    PROGMEM const char string_N[] = "N"; //массив
    PROGMEM const char string_NNW[] = "NNW"; //
    PROGMEM const char string_NW[] = "NW"; //
    PROGMEM const char string_NWW[] = "NWW";//ключевого слова const декларирует размещение данных в памяти программ (flash)
    PROGMEM const char *dir_arr[] = {string_N, string_NNW, string_NW, string_NWW}; //массив, в котором хранятся _адреса_ всех строк

    //процедура отображения на дисплей текстового значения направления
    //аргумент - индекс направления (0 - 15)
    void ShowDir(unsigned char dir){
        char *index; //адрес нужной строки
        //dir = dir & 0b00000011; //"защита от дурака"
        //if( dir > 15 )lcd_str_P(PSTR("E: ShowDir")); //другой вариант защиты - отображение ошибки на дисплее
        memcpy_P(&index, &dir_arr[ dir ], sizeof(char*) ); //Обращение к страке
        //копирование адреса нужной строки в переменную index
        lcd_str_P( index ); //отображение строки (из flash!) на дисплей
        Lcd_print(1,1, FONT_1X, index); // Вывод строки из переменной
        Lcd_update();// Копирование буфера в ОЗУ дисплея
    }

    ShowDir (PINC & 0b00000011 );

    не могу сообразить, как программа поймет при какой комбинации регистров (РС0, РС1) выдать ту или иную строчку??? Жаль в интернете мало примеров с PROGMEM. Чую чего то не хватает.

  16. 13 часа назад, COKPOWEHEU сказал:

    В PC0-PC3 у вас хранится 4-битный код направления ветра, от 0 до 15. Используйте его в качестве индекса массива, хранящего строки.

    @COKPOWEHEU  приветствую! Идея замечательная, If{},else{} можно исключить и воспользоваться выводом строки из переменной (LCD_print (x,y,FONT_1X, (unsigned char*) переменная). Почитав, что такое :umnik2:массив, пришел к такому результату (см рисунок). Индексы массива записал в двоичной (правда чую надо 8 битами записывать (иль в шестнадцатеричной системе, что проще)), а значение текстом. Правильно иль нет:unknw:(всё на интуиции)? Возник вопрос, как связать регистры с индексом:shok:. С программированием дело никогда не имел, хотя с двоичными и шестнадцатеричными сист. работаю постоянно на работе.Чую там всё не так, кроме строчки 37,38.

    строка из переменной 1.jpg

  17. Всем привет. Нуждаюсь в вашей подсказке. Задумал собрать датчик направления ветра (анемометр). Необходимо отобразить на дисплее LCD Nokia3310 инфу поступающую на 4 регистра (в моём случае РС0 – РС3), т.е. 4 бита. Например: 1011 – ветер северный, при входе на регистры 1010 – ветер южный и т.д. Четырёх разрядов вполне хватит на 16 направлений (0000 – 1111). Реализую на МК Atmega8 в ПО Atmel Studio 6.1. Легко получается с одним регистром (см. рис 2), а как считать в один момент времени 4 бита и сделать вывод не могу сообразить? В чём СИНУС? Пользовался фишкой «проверка некоторого разряда переменной на наличие лог.1» (If{} else {}). Предположил записать 15 значений (0001 – 1111) If{}, в противном случае при 0000 (на регистрах) else{}. Подскажите пример и направление, где «КОПНУТЬ»? Заранее благодарен.

    Север.jpg

    Си.jpg

  18. Доделал 7-ой урок! Все супер :spiteful: . Но возник один вопрос. Опорное напряжение камушка 2,56 Вольт, а у меня вышло 2,05 Вольт в тестовом режиме. При уменьшении напряжения на лапке АЦП от 2,05Вольта все норм, как напряжение превышает значение 2,05В (от 2,05 - 2,56 и т.д.) добавляется знак минус и значения уходят вниз. Что за парадокс? В чем "синус"? :unknw:

    post-192800-0-93218700-1438173893_thumb.jpg

    post-192800-0-69020200-1438173896_thumb.jpg

×
×
  • Создать...