diff --git a/GyverCore/cores/arduino/pinOperation.cpp b/GyverCore/cores/arduino/pinOperation.cpp index 0d2d0d6..d52a821 100644 --- a/GyverCore/cores/arduino/pinOperation.cpp +++ b/GyverCore/cores/arduino/pinOperation.cpp @@ -142,6 +142,7 @@ int analogRead(uint8_t pin) ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0)); // обнуляем мультиплексор ADMUX = ADMUX | pin; // задвигаем номер входа sei(); + if (pin == 8 || pin == 14) delay(2); // Wait for Vref to settle для VCC и термометра ADCSRA |= (1 << ADSC); // начинаем преобразование while (ADCSRA & (1 << ADSC)); // ждем окончания return ADCL | (ADCH << 8); // склеить и вернуть результат diff --git a/README.md b/README.md index 5ab17eb..d92ba7f 100644 --- a/README.md +++ b/README.md @@ -96,8 +96,7 @@ parseFloat | 1070 | 246 | 824 Убраны всякие сервисные файлы и прочий хлам, не относящийся к ATmega328 (wifi, USB). Ядро полностью совместимо с остальными библиотеками, ничего из стандартных функций не вырезано. ## Дополнительно -### Настройки прошивки -- Смотри примеры в папке examples (в корне этого репозитория!) +- Смотри примеры в папке **examples** (в корне этого репозитория!) - Добавлен вариант прошивки без загрузчика **ATmega 328/168 without bootloader** (во всю доступную Flash память) для прошивки через ISP - Добавлен вариант прошивки с отключенными функциями времени **with/without millis** (освобождает вектор **TIMER0_OVF_vect** для личного пользования) diff --git a/examples/temp_measure/temp_measure.ino b/examples/temp_measure/temp_measure.ino new file mode 100644 index 0000000..7a2a91b --- /dev/null +++ b/examples/temp_measure/temp_measure.ino @@ -0,0 +1,16 @@ +// измерение приблизительной температуры ядра + +void setup() { + uartBegin(9600); + analogReference(INTERNAL); // подключаем АЦП к опорному + analogPrescaler(128); // установить предделитель 128 (иначе некорректно измеряет) + // в стандартном ядре делитель 129 является стандартным + // в GyverCore по умполчанию 4 (быстрее измеряет) +} + +void loop() { + // analogRead(THERMOMETR) вернёт напряжение в мв + // (val - 324.31 ) / 1.22 - примерное уравнение перевода в градусы по цельсию + uartPrintln((float)(analogRead(THERMOMETR) - 324.31) / 1.22); + delay(100); +} diff --git a/examples/vcc_measure/vcc_measure.ino b/examples/vcc_measure/vcc_measure.ino new file mode 100644 index 0000000..fb664fb --- /dev/null +++ b/examples/vcc_measure/vcc_measure.ino @@ -0,0 +1,14 @@ +// измерение опорного напряжения + +void setup() { + uartBegin(9600); + analogPrescaler(128); // установить предделитель 128 (иначе некорректно измеряет) +} + +void loop() { + // 1100 является константной, которую нужно калибровать (+- лапоть) + int vcc = (float)1100 * 1023 / (analogRead(INTERNAL)); + uartPrint("vcc: "); + uartPrintln(vcc); // напряжение в милливольтах + delay(300); +} diff --git a/package_GyverCore_index.json b/package_GyverCore_index.json index f305b51..ce73b01 100644 --- a/package_GyverCore_index.json +++ b/package_GyverCore_index.json @@ -16,8 +16,8 @@ "category": "Contributed", "url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore/GyverCore.zip", "archiveFileName": "GyverCore.zip", - "checksum": "MD5:c304d158e055df8911457ed1aa42fae4", - "size": "137283", + "checksum": "MD5:a559f0299e7b815f5148a623f7fd70c6", + "size": "137346", "boards": [ {"name": "ATmega328/168 based boards"} ],