mirror of
https://github.com/AlexGyver/GyverCore.git
synced 2025-11-17 10:02:40 +03:00
add
This commit is contained in:
@@ -124,7 +124,7 @@ menu.timers=System timer
|
|||||||
nano.menu.timers.yes_millis=enable
|
nano.menu.timers.yes_millis=enable
|
||||||
nano.menu.timers.yes_millis.extra_flags.timer=
|
nano.menu.timers.yes_millis.extra_flags.timer=
|
||||||
nano.menu.timers.no_millis=disable
|
nano.menu.timers.no_millis=disable
|
||||||
nano.menu.timers.no_millis.build.extra_flags=-D_GYVERCORE_NOMILLIS
|
nano.menu.timers.no_millis.build.extra_flags.timer=-D_GYVERCORE_NOMILLIS
|
||||||
|
|
||||||
## BOD ##
|
## BOD ##
|
||||||
menu.bod=B.O.D.
|
menu.bod=B.O.D.
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
#include "Arduino.h"
|
|
||||||
|
|
||||||
void init() { // функция инициализации
|
|
||||||
cli();
|
|
||||||
/* timer 0 */
|
|
||||||
TCCR0A = 0b00000011; // fast pwm 8 bit
|
|
||||||
TCCR0B = 0b00000011; // делитель 64
|
|
||||||
#ifndef _GYVERCORE_NOMILLIS
|
|
||||||
TIMSK0 |= (1<<TOIE0); // ovf interrupt вкл
|
|
||||||
#endif
|
|
||||||
/* timer 1 */
|
|
||||||
TCCR1A = 0b00000001; // phasecorrect pwm 8 bit
|
|
||||||
TCCR1B = 0b00001011; // делитель 64
|
|
||||||
/* timer 2 */
|
|
||||||
TCCR2A = 0b00000001; // phasecorrect pwm 8 bit
|
|
||||||
TCCR2B = 0b00000100; // делитель 64
|
|
||||||
/* adc */
|
|
||||||
ADCSRA = 0b10000010; // делитель - 4 [0,1,2 bits - делитель]
|
|
||||||
/* ADC prescalers: 001 >> /2 010 >> /4 011 >> /8 100 >> /16 101 >> /32 110 >> /64 111 >> /128*/
|
|
||||||
/* UART */
|
|
||||||
UCSR0B = 0; // пока не вызван Serial.begin / uartBegin выводы 0/1 свободны для работы.
|
|
||||||
sei();
|
|
||||||
}
|
|
||||||
@@ -10,6 +10,8 @@ void tone(uint8_t pin , uint16_t freq, uint32_t duration = 0){
|
|||||||
tone_pin = pin; // присвоили номер пина для прерывания
|
tone_pin = pin; // присвоили номер пина для прерывания
|
||||||
willStop = duration;// если введено время генерации - будет ненулевым
|
willStop = duration;// если введено время генерации - будет ненулевым
|
||||||
toggle_top = (freq * duration)/500; // расчет кол-ва toggl'ов за указанное время генерации
|
toggle_top = (freq * duration)/500; // расчет кол-ва toggl'ов за указанное время генерации
|
||||||
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
TCCR2A = (1<<WGM21); // вкл CTC
|
TCCR2A = (1<<WGM21); // вкл CTC
|
||||||
TIMSK2 |= (1<<OCIE2A); //Вкл прерывание
|
TIMSK2 |= (1<<OCIE2A); //Вкл прерывание
|
||||||
if(freq < 122){ // максимальный делитель
|
if(freq < 122){ // максимальный делитель
|
||||||
@@ -25,15 +27,19 @@ void tone(uint8_t pin , uint16_t freq, uint32_t duration = 0){
|
|||||||
OCR2A = (125000/freq)-1; // по аналогии см выше
|
OCR2A = (125000/freq)-1; // по аналогии см выше
|
||||||
}
|
}
|
||||||
toggle_counter = 0; // обнулили счетчик toggl'ов
|
toggle_counter = 0; // обнулили счетчик toggl'ов
|
||||||
|
SREG = oldSREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
void noTone(uint8_t pin){ // если вызван noTone
|
void noTone(uint8_t pin){ // если вызван noTone
|
||||||
digitalWrite(pin,0);// устанавливаем 0 на выходе
|
digitalWrite(pin,0);// устанавливаем 0 на выходе
|
||||||
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
TIMSK2 &=~ (1<<OCIE2A); // остановить прерывания
|
TIMSK2 &=~ (1<<OCIE2A); // остановить прерывания
|
||||||
TCCR2A = 0b00000011; // установить стандартные настройки для таймера 2
|
TCCR2A = 0b00000011; // установить стандартные настройки для таймера 2
|
||||||
TCCR2B = 0b00000100;
|
TCCR2B = 0b00000100;
|
||||||
OCR2A = 0; //обнуляем регистр сравнения
|
OCR2A = 0; //обнуляем регистр сравнения
|
||||||
TCCR2A &=~ ((1<<COM2A1)|(1<<COM2B1)); // откл регистры сравнения (подстраховка)
|
TCCR2A &=~ ((1<<COM2A1)|(1<<COM2B1)); // откл регистры сравнения (подстраховка)
|
||||||
|
SREG = oldSREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* Главный цикл программы */
|
/* Главный цикл программы */
|
||||||
|
#pragma message "Это фиксики , помогите !"
|
||||||
|
#pragma message "Нас тут заперли, вызовите 911!"
|
||||||
#pragma message "GyverCore v1.7.3 inside. Enjoy"
|
#pragma message "GyverCore v1.7.3 inside. Enjoy"
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ uint8_t a_ref = DEFAULT; // глобальная переменная для х
|
|||||||
// ============= DIGITAL =============
|
// ============= DIGITAL =============
|
||||||
|
|
||||||
void pinMode(uint8_t pin, uint8_t mode)
|
void pinMode(uint8_t pin, uint8_t mode)
|
||||||
{
|
{ uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 0: // input
|
case 0: // input
|
||||||
if (pin < 8) bitWrite(DDRD, pin, 0); // расставляем нули в DDRn
|
if (pin < 8) bitWrite(DDRD, pin, 0); // расставляем нули в DDRn
|
||||||
@@ -35,9 +36,12 @@ void pinMode(uint8_t pin, uint8_t mode)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
|
|
||||||
void digitalWrite(uint8_t pin, uint8_t x) {
|
void digitalWrite(uint8_t pin, uint8_t x) {
|
||||||
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
switch (pin) { // откл pwm
|
switch (pin) { // откл pwm
|
||||||
case 3: // 2B
|
case 3: // 2B
|
||||||
TCCR2A &= ~(1 << COM2B1);
|
TCCR2A &= ~(1 << COM2B1);
|
||||||
@@ -61,6 +65,7 @@ void digitalWrite(uint8_t pin, uint8_t x) {
|
|||||||
if (pin < 8) bitWrite(PORTD, pin, x);
|
if (pin < 8) bitWrite(PORTD, pin, x);
|
||||||
else if (pin < 14) bitWrite(PORTB, (pin - 8), x);
|
else if (pin < 14) bitWrite(PORTB, (pin - 8), x);
|
||||||
else if (pin < 20) bitWrite(PORTC, (pin - 14), x);
|
else if (pin < 20) bitWrite(PORTC, (pin - 14), x);
|
||||||
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
|
|
||||||
int digitalRead (uint8_t pin) {
|
int digitalRead (uint8_t pin) {
|
||||||
@@ -71,6 +76,8 @@ int digitalRead (uint8_t pin) {
|
|||||||
|
|
||||||
|
|
||||||
void digitalToggle(uint8_t pin){
|
void digitalToggle(uint8_t pin){
|
||||||
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
if (pin < 8) bitToggle(PORTD, pin);
|
if (pin < 8) bitToggle(PORTD, pin);
|
||||||
else if (pin < 14) bitToggle(PORTB, pin - 8);
|
else if (pin < 14) bitToggle(PORTB, pin - 8);
|
||||||
else if (pin < 20) bitToggle(PORTC, pin - 14);
|
else if (pin < 20) bitToggle(PORTC, pin - 14);
|
||||||
@@ -85,10 +92,12 @@ void digitalToggle(uint8_t pin){
|
|||||||
bitWrite(PORTC, (pin - 14), !bitRead(PORTC,(pin-14)));
|
bitWrite(PORTC, (pin - 14), !bitRead(PORTC,(pin-14)));
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
// ============= ANALOG =============
|
// ============= ANALOG =============
|
||||||
void analogPrescaler (uint8_t prescl) {
|
void analogPrescaler (uint8_t prescl) {
|
||||||
cli();
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
switch (prescl) {
|
switch (prescl) {
|
||||||
case 2:
|
case 2:
|
||||||
ADCSRA &= ~((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
|
ADCSRA &= ~((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
|
||||||
@@ -117,7 +126,7 @@ void analogPrescaler (uint8_t prescl) {
|
|||||||
ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
|
ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sei();
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
|
|
||||||
void analogReference(uint8_t mode)
|
void analogReference(uint8_t mode)
|
||||||
@@ -138,9 +147,9 @@ void analogStartConvert(byte pin) {
|
|||||||
pin = (pin < 14) ? (pin) : (pin - 14); // совместимость между A0, A1.. A7 и 0, 1.. 7
|
pin = (pin < 14) ? (pin) : (pin - 14); // совместимость между A0, A1.. A7 и 0, 1.. 7
|
||||||
ADMUX = 0; // обнуляем опорное и мультиплексор
|
ADMUX = 0; // обнуляем опорное и мультиплексор
|
||||||
ADMUX = (a_ref << 6) | pin; // задвигаем опорное и номер входа
|
ADMUX = (a_ref << 6) | pin; // задвигаем опорное и номер входа
|
||||||
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
|
||||||
if (pin == 8 || pin == 14) delay(2); // Wait for Vref to settle для VCC и термометра
|
if (pin == 8 || pin == 14) delay(2); // Wait for Vref to settle для VCC и термометра
|
||||||
ADCSRA |= (1 << ADSC); // начинаем преобразование
|
ADCSRA |= (1 << ADSC); // начинаем преобразование
|
||||||
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
|
|
||||||
int analogGet() {
|
int analogGet() {
|
||||||
@@ -150,7 +159,8 @@ int analogGet() {
|
|||||||
|
|
||||||
// ============= PWM =============
|
// ============= PWM =============
|
||||||
void analogWrite(uint8_t pin, int val) {
|
void analogWrite(uint8_t pin, int val) {
|
||||||
cli();
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 5:
|
case 5:
|
||||||
bitSet(TCCR0A, COM0B1);
|
bitSet(TCCR0A, COM0B1);
|
||||||
@@ -179,5 +189,5 @@ void analogWrite(uint8_t pin, int val) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sei();
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
}
|
}
|
||||||
@@ -25,19 +25,21 @@ ISR(TIMER0_OVF_vect){
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned long millis() {
|
unsigned long millis() {
|
||||||
cli(); // остановить счет
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
unsigned long m = timer0_millis; // перехватить значение
|
unsigned long m = timer0_millis; // перехватить значение
|
||||||
sei(); // продолжить счет
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
return m; // вернуть миллисекунды
|
return m; // вернуть миллисекунды
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long micros() {
|
unsigned long micros() {
|
||||||
cli(); // остановить прерывания
|
uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания
|
||||||
|
cli();//выключаем прерывания
|
||||||
unsigned long m = timer0_overflow_count; // счет переполнений
|
unsigned long m = timer0_overflow_count; // счет переполнений
|
||||||
uint8_t t = TCNT0; // считать содержимое счетного регистра
|
uint8_t t = TCNT0; // считать содержимое счетного регистра
|
||||||
if ((TIFR0 & _BV(TOV0)) && (t < 255)) //инкремент по переполнению
|
if ((TIFR0 & _BV(TOV0)) && (t < 255)) //инкремент по переполнению
|
||||||
m++;
|
m++;
|
||||||
sei(); // продолжить счет
|
SREG = oldSREG; // если прерывания не были включены - не включаем и наоборот
|
||||||
return (long)(((m << 8) + t) * MICROS_MULT); // вернуть микросекунды
|
return (long)(((m << 8) + t) * MICROS_MULT); // вернуть микросекунды
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -87,3 +89,25 @@ void delayMicroseconds(unsigned int us) {
|
|||||||
// return = 4 cycles
|
// return = 4 cycles
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init() { // функция инициализации
|
||||||
|
cli();
|
||||||
|
/* timer 0 */
|
||||||
|
TCCR0A = 0b00000011; // fast pwm 8 bit
|
||||||
|
TCCR0B = 0b00000011; // делитель 64
|
||||||
|
#ifndef _GYVERCORE_NOMILLIS
|
||||||
|
TIMSK0 |= (1<<TOIE0); // ovf interrupt вкл
|
||||||
|
#endif
|
||||||
|
/* timer 1 */
|
||||||
|
TCCR1A = 0b00000001; // phasecorrect pwm 8 bit
|
||||||
|
TCCR1B = 0b00001011; // делитель 64
|
||||||
|
/* timer 2 */
|
||||||
|
TCCR2A = 0b00000001; // phasecorrect pwm 8 bit
|
||||||
|
TCCR2B = 0b00000100; // делитель 64
|
||||||
|
/* adc */
|
||||||
|
ADCSRA = 0b10000010; // делитель - 4 [0,1,2 bits - делитель]
|
||||||
|
/* ADC prescalers: 001 >> /2 010 >> /4 011 >> /8 100 >> /16 101 >> /32 110 >> /64 111 >> /128*/
|
||||||
|
/* UART */
|
||||||
|
UCSR0B = 0; // пока не вызван Serial.begin / uartBegin выводы 0/1 свободны для работы.
|
||||||
|
sei();
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ volatile uint8_t _UART_RX_BUFFER_TAIL;
|
|||||||
|
|
||||||
// ===== INIT =====
|
// ===== INIT =====
|
||||||
void uartBegin(uint32_t baudrate){
|
void uartBegin(uint32_t baudrate){
|
||||||
uint16_t speed = (F_CPU / (8 * baudrate)) - 1;
|
uint16_t speed = (F_CPU / (8L * baudrate)) - 1;
|
||||||
UBRR0H = highByte(speed);
|
UBRR0H = highByte(speed);
|
||||||
UBRR0L = lowByte(speed);
|
UBRR0L = lowByte(speed);
|
||||||
UCSR0A = (1 << U2X0);
|
UCSR0A = (1 << U2X0);
|
||||||
|
|||||||
@@ -215,3 +215,7 @@ parseFloat | 1070 | 246 | 824
|
|||||||
- Пофикшены различные баги
|
- Пофикшены различные баги
|
||||||
- Убран lightInit
|
- Убран lightInit
|
||||||
- Добавлен загрузчик optiBoot v8
|
- Добавлен загрузчик optiBoot v8
|
||||||
|
- 1.7.4
|
||||||
|
- Поправлены баги с Serial
|
||||||
|
- И не только с Serial
|
||||||
|
- Оптимизированы прерывания
|
||||||
@@ -162,6 +162,20 @@
|
|||||||
{"name": "ATmega328 based boards"}
|
{"name": "ATmega328 based boards"}
|
||||||
],
|
],
|
||||||
"toolsDependencies": []
|
"toolsDependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GyverCore",
|
||||||
|
"architecture": "avr",
|
||||||
|
"version": "1.7.4",
|
||||||
|
"category": "Contributed",
|
||||||
|
"url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.7.4/GyverCore.zip",
|
||||||
|
"archiveFileName": "GyverCore.zip",
|
||||||
|
"checksum": "MD5:e6df1cf0ef4f6c2ee987a9d3bc7df918",
|
||||||
|
"size": "115466",
|
||||||
|
"boards": [
|
||||||
|
{"name": "ATmega328 based boards"}
|
||||||
|
],
|
||||||
|
"toolsDependencies": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tools": []
|
"tools": []
|
||||||
|
|||||||
Reference in New Issue
Block a user