1
0
mirror of https://github.com/AlexGyver/GyverCore.git synced 2025-12-06 19:40:56 +03:00
This commit is contained in:
Alex
2019-08-31 11:35:27 +03:00
parent 2214451bd3
commit b0e39ba9d5
6 changed files with 66 additions and 44 deletions

View File

@@ -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

View File

@@ -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; // обнуляем опорное и мультиплексор

View File

@@ -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<<UCSZ01) | (1<<UCSZ00));
_UART_RX_BUFFER_HEAD = _UART_RX_BUFFER_TAIL = 0;
}
void uartBegin(void) {
uartBegin(9600);
}
void uartEnd(){
UCSR0B = 0;
@@ -50,7 +47,7 @@ char uartPeek() {
return _UART_RX_BUFFER_HEAD != _UART_RX_BUFFER_TAIL? _UART_RX_BUFFER[_UART_RX_BUFFER_TAIL]: -1;
}
boolean uartAvailable() {
uint8_t uartAvailable() {
return ((unsigned int)(UART_RX_BUFFER_SIZE + _UART_RX_BUFFER_HEAD - _UART_RX_BUFFER_TAIL)) % UART_RX_BUFFER_SIZE;
}

View File

@@ -1,4 +1,5 @@
/* Облегченный Serial */
// Версия 1.2
#ifndef uart_h
#define uart_h
@@ -6,11 +7,10 @@
#include "Arduino.h"
#include <avr/io.h>
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();

View File

@@ -211,4 +211,7 @@ parseFloat | 1070 | 246 | 824
- Добавлен **Clock Out** - вывод тактирования на пин D8 (через меню выбора платы)
- Добавлена настройка **Save EEPROM** (через меню выбора платы)
- Добавлена настройка **Initialization** отключить инициализацию периферии при старте скетча (через меню выбора платы)
- Огромное спасибо **Pasha13666** за помощь в доработке!
- Огромное спасибо **Pasha13666** за помощь в доработке!
- 1.7.1
- Поправлены баги с I/O
- Улучшен uart

View File

@@ -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": []