diff --git a/GyverCore/cores/arduino/Arduino.h b/GyverCore/cores/arduino/Arduino.h index 71cf049..57ab942 100644 --- a/GyverCore/cores/arduino/Arduino.h +++ b/GyverCore/cores/arduino/Arduino.h @@ -45,6 +45,14 @@ extern "C"{ #define DEFAULT 1 #define EXTERNAL 0 #define THERMOMETR 22 + +#define PWM_8BIT 0 +#define PWM_10BIT 1 + +#define PWM_DEFAULT 0 +#define PWM_8KHZ 1 +#define PWM_31KHZ 2 + // ===== MATH MACRO ===== #ifdef abs #undef abs diff --git a/GyverCore/cores/arduino/pinOperation.cpp b/GyverCore/cores/arduino/pinOperation.cpp index e6990b3..2ed002a 100644 --- a/GyverCore/cores/arduino/pinOperation.cpp +++ b/GyverCore/cores/arduino/pinOperation.cpp @@ -88,47 +88,47 @@ void digitalToggle(uint8_t pin){ } // ============= ANALOG ============= void analogPrescaler (uint8_t prescl) { - cli(); - switch (prescl) { - case 2: - ADCSRA &= ~((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0)); - break; - case 4: // (defalut) - ADCSRA &= ~((1 << ADPS2) | (1 << ADPS0)); - ADCSRA |= (1 << ADPS1); - break; - case 8: - ADCSRA &= ~ (1 << ADPS2); - ADCSRA |= ((1 << ADPS1) | (1 << ADPS0)); - break; - case 16: - ADCSRA &= ~((1 << ADPS1) | (1 << ADPS0)); - ADCSRA |= (1 << ADPS2); - break; - case 32: - ADCSRA &= ~ (1 << ADPS1); - ADCSRA |= ((1 << ADPS2) | (1 << ADPS0)); - break; - case 64: - ADCSRA &= ~ (1 << ADPS0); - ADCSRA |= ((1 << ADPS2) | (1 << ADPS1)); - break; - case 128: - ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0)); - break; - } - sei(); + cli(); + switch (prescl) { + case 2: + ADCSRA &= ~((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0)); + break; + case 4: // (defalut) + ADCSRA &= ~((1 << ADPS2) | (1 << ADPS0)); + ADCSRA |= (1 << ADPS1); + break; + case 8: + ADCSRA &= ~ (1 << ADPS2); + ADCSRA |= ((1 << ADPS1) | (1 << ADPS0)); + break; + case 16: + ADCSRA &= ~((1 << ADPS1) | (1 << ADPS0)); + ADCSRA |= (1 << ADPS2); + break; + case 32: + ADCSRA &= ~ (1 << ADPS1); + ADCSRA |= ((1 << ADPS2) | (1 << ADPS0)); + break; + case 64: + ADCSRA &= ~ (1 << ADPS0); + ADCSRA |= ((1 << ADPS2) | (1 << ADPS1)); + break; + case 128: + ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0)); + break; + } + sei(); } void analogReference(uint8_t mode) { -a_ref = mode; // изменения будут приняты в силу при следующем analogRead() / analogStartConvert() + a_ref = mode; // изменения будут приняты в силу при следующем analogRead() / analogStartConvert() } int analogRead(uint8_t pin) { - if(a_ref == INTERNAL) a_ref = 3; // для удобства задвигания - uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания + if(a_ref == INTERNAL) a_ref = 3; // для удобства задвигания + uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания cli();//выключаем прерывания pin = (pin < 14) ? (pin) : (pin - 14); // совместимость между A0, A1.. A7 и 0, 1.. 7 ADMUX = 0; // обнуляем опорное и мультиплексор @@ -141,8 +141,8 @@ int analogRead(uint8_t pin) } void analogStartConvert(byte pin) { - if(a_ref == INTERNAL) a_ref = 3; // для удобства задвигания - uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания + if(a_ref == INTERNAL) a_ref = 3; // для удобства задвигания + uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания cli();//выключаем прерывания pin = (pin < 14) ? (pin) : (pin - 14); // совместимость между A0, A1.. A7 и 0, 1.. 7 ADMUX = 0; // обнуляем опорное и мультиплексор diff --git a/GyverCore/cores/arduino/uart.cpp b/GyverCore/cores/arduino/uart.cpp index eeddff0..4cbede6 100644 --- a/GyverCore/cores/arduino/uart.cpp +++ b/GyverCore/cores/arduino/uart.cpp @@ -8,7 +8,7 @@ volatile uint8_t _UART_RX_BUFFER_TAIL; // ===== INIT ===== void uartBegin(uint32_t baudrate){ - uint16_t speed = (2000000/baudrate)-1; + uint16_t speed = (F_CPU / (8 * baudrate)) - 1; UBRR0H = highByte(speed); UBRR0L = lowByte(speed); UCSR0A = (1 << U2X0); @@ -16,9 +16,6 @@ void uartBegin(uint32_t baudrate){ UCSR0C = ((1< -void uartBegin(void); -void uartBegin(uint32_t baudrate); +void uartBegin(uint32_t baudrate = 9600); void uartEnd(); -boolean uartAvailable(); +uint8_t uartAvailable(); boolean uartAvailableForWrite(); char uartRead(); char uartPeek(); diff --git a/README.md b/README.md index 802d12b..2419e0a 100644 --- a/README.md +++ b/README.md @@ -211,4 +211,7 @@ parseFloat | 1070 | 246 | 824 - Добавлен **Clock Out** - вывод тактирования на пин D8 (через меню выбора платы) - Добавлена настройка **Save EEPROM** (через меню выбора платы) - Добавлена настройка **Initialization** отключить инициализацию периферии при старте скетча (через меню выбора платы) - - Огромное спасибо **Pasha13666** за помощь в доработке! \ No newline at end of file + - Огромное спасибо **Pasha13666** за помощь в доработке! +- 1.7.1 + - Поправлены баги с I/O + - Улучшен uart \ No newline at end of file diff --git a/package_GyverCore_index.json b/package_GyverCore_index.json index da0da09..0403d26 100644 --- a/package_GyverCore_index.json +++ b/package_GyverCore_index.json @@ -120,6 +120,20 @@ {"name": "ATmega328 based boards"} ], "toolsDependencies": [] + }, + { + "name": "GyverCore", + "architecture": "avr", + "version": "1.7.1", + "category": "Contributed", + "url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.7.1/GyverCore.zip", + "archiveFileName": "GyverCore.zip", + "checksum": "MD5:772a85fabaec1353d8510f65e8ee14c4", + "size": "115920", + "boards": [ + {"name": "ATmega328 based boards"} + ], + "toolsDependencies": [] } ], "tools": []