diff --git a/GyverCore/cores/arduino/Tone.cpp b/GyverCore/cores/arduino/Tone.cpp index 7dfb2d1..7dce212 100644 --- a/GyverCore/cores/arduino/Tone.cpp +++ b/GyverCore/cores/arduino/Tone.cpp @@ -6,47 +6,67 @@ uint32_t toggle_counter; // счетчик toggl'ов uint32_t toggle_top; // предел счета для toggl'ов bool willStop; // флаг позволяющий генерировать сигнал бесконечно долго -void tone(uint8_t pin , uint16_t freq, uint32_t duration = 0){ - tone_pin = pin; // присвоили номер пина для прерывания - willStop = duration;// если введено время генерации - будет ненулевым - toggle_top = (freq * duration)/500; // расчет кол-ва toggl'ов за указанное время генерации - uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания - cli();//выключаем прерывания - TCCR2A = (1< 244){ // минимальный делитель - TCCR2B = 0x5; // по аналогии см выше - OCR2A = (62500/freq)-1; // по аналогии см выше - } - else { // средний делитель - TCCR2B = 0x6; // по аналогии см выше - OCR2A = (125000/freq)-1; // по аналогии см выше - } - toggle_counter = 0; // обнулили счетчик toggl'ов - SREG = oldSREG; +void tone(uint8_t pin , uint16_t freq, uint32_t duration = 0) { + + tone_pin = pin; // присвоили номер пина для прерывания + willStop = duration;// если введено время генерации - будет ненулевым + toggle_top = (freq * duration) / 500; // расчет кол-ва toggl'ов за указанное время генерации + + uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания + cli();//выключаем прерывания + + TCCR2A = 0x2; // вкл CTC + TIMSK2 |= (1 << OCIE2A); //Вкл прерывание + + if (freq < (F_CPU >> 18)) { // ( < 240 Hz) + TCCR2B = 0x7; // prescaler = 1024 + OCR2A = ((F_CPU >> 11) / freq) - 1; + } + else if (freq < (F_CPU >> 15)) { // ( 240 - 480 Hz) + TCCR2B = 0x6; // prescaler = 256 + OCR2A = ((F_CPU >> 9) / freq) - 1; + } + else if (freq <= (F_CPU >> 14)) { // ( 480 - 970 Hz) + TCCR2B = 0x5; // prescaler = 128 + OCR2A = ((F_CPU >> 8) / freq) - 1; + } + else if (freq <= (F_CPU >> 13)) { // ( 970 - 1900 Hz) + TCCR2B = 0x4; // prescaler = 64 + OCR2A = ((F_CPU >> 7) / freq) - 1; + } + else if (freq <= (F_CPU >> 11)) { // ( 1.9 - 7.8 kHz) + TCCR2B = 0x3; // prescaler = 32 + OCR2A = ((F_CPU >> 6) / freq) - 1; + } + else if (freq <= (F_CPU >> 8)) { // ( 7.8 - 62 kHz) + TCCR2B = 0x2; // prescaler = 8 + OCR2A = ((F_CPU >> 4) / freq) - 1; + } + else { // ( > 62 kHz) + TCCR2B = 0x1; // prescaler = 1 + OCR2A = ((F_CPU >> 1) / freq) - 1; + } + + toggle_counter = 0; // обнулили счетчик toggl'ов + SREG = oldSREG; + } -void noTone(uint8_t pin){ // если вызван noTone - digitalWrite(pin,0);// устанавливаем 0 на выходе - uint8_t oldSREG = SREG; // запомнинаем были ли включены прерывания - cli();//выключаем прерывания - TIMSK2 &=~ (1< Плата > Менеджер плат...** - Подожди загрузку списка - Листай в самый низ, пока не увидишь **GyverCore** +- Выбери свою версию: **Win32**, **Win64** или **Linux** - Жми **Установка** - Закрой окно -- Выбери плату в **Инструменты > Плата > GyverCore > ATmega328/168 based** +- Выбери плату в **Инструменты > Плата > GyverCore > ATmega328 based** - Готово! -- *Примечание*: файлы ядра находятся по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.9.0\ +- *Примечание*: файлы ядра находятся по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.10.0\ ### Ручная -- Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.9.0\ +- Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.10.0\ +- Новая версия компилятора лежит отдельно! ## Изменения ### Облегчено и ускорено @@ -34,9 +36,9 @@ ----------------|-----------|-----------|---------- millis | 1.06 us | 1.00 us | - micros | 1.19 us | 1.13 us | - -pinMode | 2.90 us | 0.57 us | 5.09 -digitalWrite | 2.90 us | 0.57 us | 5.09 -digitalRead | 2.45 us | 0.50 us | 4.90 +pinMode | 2.90 us | 0.50 us | 5.09 +digitalWrite | 2.90 us | 0.50 us | 5.09 +digitalRead | 2.45 us | 0.00 us | ? analogWrite | 4.15 us | 1.13 us | 3.67 analogRead | 112.01 us | 5.41 us | 20.70 analogReference | 0.00 us | 0.00 us | - @@ -50,9 +52,9 @@ tone | 5.63 us | 2.40 us | 2.3 ----------------|---------|-----------|--------------- millis | 26 | 24 | 2 micros | 24 | 20 | 4 -pinMode | 114 | 24 | 90 -digitalWrite | 200 | 24 | 176 -digitalRead | 190 | 24 | 166 +pinMode | 114 | 2 | 112 +digitalWrite | 200 | 2 | 198 +digitalRead | 190 | 0 | 190 analogWrite | 406 | 48 | 358 analogRead | 32 | 72 | -40 analogReference | 0 | 22 | -22 @@ -104,6 +106,7 @@ parseFloat | 1070 | 246 | 824 - **uart.begin(baudrate)** - запустить соединение по последовательному порту со скоростью baudrate - **uart.end()** - выключить сериал - **uart.peek()** - вернуть крайний байт из буфера, не убирая его оттуда + - **uart.flush()** - ждать принятия данных - **uart.clear()** - очистить буфер - **uart.read()** - вернуть крайний байт из буфера, убрав его оттуда - **uart.write(val)** - запись в порт @@ -177,7 +180,7 @@ parseFloat | 1070 | 246 | 824 --- **Compiler version** - версия компилятора - **default v5.4.0** - встроенная в IDE версия компилятора -- **avr-gcc v8.3.0** - новая версия компилятора: компилирует быстрее, скетчи весят меньше! +- **avr-gcc v8.3.0** - новая версия компилятора: компилирует быстрее, скетчи весят меньше! Билд взял [отсюда](https://blog.zakkemble.net/avr-gcc-builds/) ## Больше контроля! Для большего контроля за периферией микроконтроллера рекомендую попробовать следующие наши библиотеки: @@ -257,4 +260,10 @@ parseFloat | 1070 | 246 | 824 - Убраны дублирующиеся программаторы - Ещё чуть ускорен uart - 1.9.0 - - Вшита новая версия компилятора avr-gcc \ No newline at end of file + - Вшита новая версия компилятора avr-gcc +- 1.10.0 + - Расширена подсветка синтаксиса + - Пофикшен tone + - Пофикшен pulseIn (но выдаёт разрешение 4 мкс) + - Добавлен avr-gcc v8 под Win32 и Linux + - Ускорен IO \ No newline at end of file diff --git a/avr-gcc/README.md b/avr-gcc/README.md new file mode 100644 index 0000000..a725416 --- /dev/null +++ b/avr-gcc/README.md @@ -0,0 +1,3 @@ +#AVR-GCC +Версия 8.3.0 взята [отсюда](https://blog.zakkemble.net/avr-gcc-builds/) +Более новые версии делают код тяжелее по Flash памяти \ No newline at end of file diff --git a/avr-gcc/avr-gcc-8.3.0-x64-linux.tar.bz2 b/avr-gcc/avr-gcc-8.3.0-x64-linux.tar.bz2 new file mode 100644 index 0000000..13108d2 Binary files /dev/null and b/avr-gcc/avr-gcc-8.3.0-x64-linux.tar.bz2 differ diff --git a/avr-gcc/avr-gcc-8.3.0-x64-mingw.zip b/avr-gcc/avr-gcc-8.3.0-x64-mingw.zip new file mode 100644 index 0000000..4d772c7 Binary files /dev/null and b/avr-gcc/avr-gcc-8.3.0-x64-mingw.zip differ diff --git a/avr-gcc/avr-gcc-8.3.0-x86-mingw.zip b/avr-gcc/avr-gcc-8.3.0-x86-mingw.zip new file mode 100644 index 0000000..3e65a9e Binary files /dev/null and b/avr-gcc/avr-gcc-8.3.0-x86-mingw.zip differ diff --git a/package_GyverCore_index.json b/package_GyverCore_index.json index af2bc26..ccf249b 100644 --- a/package_GyverCore_index.json +++ b/package_GyverCore_index.json @@ -260,7 +260,49 @@ {"name": "ATmega328 based boards"} ], "toolsDependencies": [] - } + }, + { + "name": "GyverCore", + "architecture": "avr", + "version": "1.10.0 win64", + "category": "Contributed", + "url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.10.0/GyverCore_win64.zip", + "archiveFileName": "GyverCore.zip", + "checksum": "MD5:c2ec5c7b0d64913faecafac966d64fab", + "size": "59016998", + "boards": [ + {"name": "ATmega328 based boards"} + ], + "toolsDependencies": [] + }, + { + "name": "GyverCore", + "architecture": "avr", + "version": "1.10.0 win32", + "category": "Contributed", + "url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.10.0/GyverCore_win32.zip", + "archiveFileName": "GyverCore.zip", + "checksum": "MD5:c2ec5c7b0d64913faecafac966d64fab", + "size": "59016998", + "boards": [ + {"name": "ATmega328 based boards"} + ], + "toolsDependencies": [] + }, + { + "name": "GyverCore", + "architecture": "avr", + "version": "1.10.0 linux", + "category": "Contributed", + "url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.10.0/GyverCore_linux.zip", + "archiveFileName": "GyverCore.zip", + "checksum": "MD5:c2ec5c7b0d64913faecafac966d64fab", + "size": "59016998", + "boards": [ + {"name": "ATmega328 based boards"} + ], + "toolsDependencies": [] + }, ], "tools": [] }