![]() |
|
|
|
|
#1 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Попробую на выходных
|
|
|
|
|
|
#2 |
|
Junior Member
Регистрация: 06.02.2016
Сообщений: 1
Вес репутации: 0 ![]() |
Скажите, а если мне надо обращаться к аналоговым портам A8-A11 в меге 2560, можно добавить поддержку в библиотеку?
|
|
|
|
|
|
#3 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если Вы знаете как добавить, то никто возражать не будет
|
|
|
|
|
|
#4 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
delay(1000) в секции setup, ни как не может влиять на выполнение остального кода, возможно Вы допустили ошибку в другом месте скетча
|
|
|
|
|
|
#5 |
|
Junior Member
Регистрация: 07.02.2016
Сообщений: 5
Вес репутации: 0 ![]() |
сам в шоке, перепроверял многократно. Либо attachInterrupt либо delay. Код брал 100% Ваш, единственное изменение вносил - delay(1000), причем как я говорил баг плавающий, проявляется не каждый раз. Может конечно у меня глючная плата, но проверить на другой не мог, так как схема диммера собрана вместе с ней.
|
|
|
|
|
|
#6 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В таких случаях обычно выкладывают код - битва экстрасенсов это к каналу тнт. Или ошибка найдется или удостовериться в правильности на нашем железе
|
|
|
|
|
|
#7 |
|
Junior Member
Регистрация: 07.02.2016
Сообщений: 5
Вес репутации: 0 ![]() |
Код:
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t tic, Dimmer1, Dimmer2, Dimmer3;
uint8_t data;
void setup()
{
D4_Out; D5_Out; D6_Out; //Настраиваем порты на выход
D4_Low; D5_Low; D6_Low; //установить на выходах низкий уровень сигнала
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
//CHANGE – прерывание вызывается при любом изменении значения на входе;
//RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH)
//FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low)
attachInterrupt(0, detect_up, LOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
StopTimer1(); //остановить таймер
UART_Init(115200); //инициализация порта
delay(1000);
}
//********************обработчики прерываний*******************************
void halfcycle() //прерывания таймера
{
tic++; //счетчик
if(Dimmer1 < tic ) D4_High; //управляем выходом
if(Dimmer2 < tic ) D5_High; //управляем выходом
if(Dimmer3 < tic ) D6_High; //управляем выходом
}
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
tic=0; //обнулить счетчик
ResumeTimer1(); //запустить таймер
attachInterrupt(0, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
StopTimer1(); //остановить таймер
D4_Low; D5_Low; D6_Low; //логический ноль на выходы
tic=0; //обнулить счетчик
attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
}
//*************************************************************************
void loop()
{Start
if (UART_ReadByte(data)) Dimmer1=data;
Dimmer2=195; //200=мин. 0=макс
Dimmer3=0; //200=мин. 0=макс
End}
|
|
|
|
|
|
#8 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Точно не помню какой таймер использует delay, но если Timer1 то функция StopTimer1(); останавливает таймер
|
|
|
|
|
|
#9 |
|
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
https://arduinodiy.wordpress.com/201...er-interrupts/
Timer0 is an 8-bit timer, meaning its counter register can record a maximum value of 255 (the same as an unsigned 8-bit byte). Timer0 is used by native Arduino timing functions such as delay() and millis(), so unless you know what you are doing, timer 0 is best left alone. ... Timer1 is a 16-bit timer, with a maximum counter value of 65535 (an unsigned 16-bit integer). The Arduino Servo library uses this timer, so keep that in mind if you use this timer in your projects. ... Timer2 is an 8-bit timer that is very similar to Timer0. It is used by the Arduino tone() function.
__________________
istarik.ru |
|
|
|
|
|
#10 |
|
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Может поможет поставить делай в начале функции?
__________________
istarik.ru |
|
|
|
![]() |
| Здесь присутствуют: 9 (пользователей: 0 , гостей: 9) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|