Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2018, 10:08   #881
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

А зачем Вы из setup выкинули инициализацию таймера и внешнего прерывания?
Admin вне форума   Ответить с цитированием
Старый 11.10.2018, 10:13   #882
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Если димер подключен к сети, скетч заливается но не стартует.
Как Вы определили, что он не стартует?

Цитата:
Если залить скетч вести в монитор порта любое значение от 0 до 9 и только потом включить димер в сеть, турбина начинает вращаться. на все последующии значения вводимые в монитор программа не как не реагирует.
Вы бы сначала на лампочке проверили, потому как мотор это индуктивность и без снаббера нормально работать не будет
Admin вне форума   Ответить с цитированием
Старый 11.10.2018, 10:15   #883
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
А зачем Вы из setup выкинули инициализацию таймера и внешнего прерывания?
Хотел проверить конфликт происходит из за инициализации. Перенес в лууп, но это не помогло. Программа работает по ка не нажмешь на кнопку. Как только вызываешь инициализацию таймера и прерывания, программа толи подвисает толи зацикливается. Без сериал порта все работает прекрассно.
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 10:18   #884
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Как Вы определили, что он не стартует?


Вы бы сначала на лампочке проверили, потому как мотор это индуктивность и без снаббера нормально работать не будет
Вот как раз об этом и я подумал, убрал турбину подключил лампу щас буду проверять.
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 10:30   #885
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Скетч из шапки ничего не изменяя.
1) Димер включен в розетку, заливаю скетч , вожу в монитор порта значение 5 нечего не происходит.
2) Димер выключен из розетки, заливаю скетч , включаю димер лампочка загорается. но на вод значения в монитор порта не реагирует. от 0 до 9 вожу лампочка горит одним накалом.

p.s
В скетч из шапки добавил одну строчку в setup.
PHP код:
UART_SendArray(message3); 
Если димер не вставлен в розетку, скетч загружается в монитор порта выдает сообщение "std".

Если димер включен в розетку сообщение в монитор порта не приходит. Вывод! где-то зацикливается скетч на вот этих строках.
PHP код:
    attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    
StartTimer1(halfcycle40); //время для одного разряда ШИМ
    
StopTimer1(); //остановить таймер
    
UART_Init(115200); //инициализация порта
    
UART_SendArray(message3); 

Последний раз редактировалось ZombikPC; 11.10.2018 в 10:43.
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 10:54   #886
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Развернуть для просмотра

PHP код:
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t ticDimmer1Dimmer2Dimmer3;
uint8_t data;

void setup()
{
    
D4_OutD5_OutD6_Out//Настраиваем порты на выход
    
D4_LowD5_LowD6_Low//установить на выходах низкий уровень сигнала
    
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль  

           //CHANGE – прерывание вызывается при любом изменении значения на входе; 
           //RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
           //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
    
attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    
StartTimer1(halfcycle40); //время для одного разряда ШИМ
    
StopTimer1(); //остановить таймер
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера
{
    
tic++;  //счетчик  
    
if (Dimmer1 ticD4_High//управляем выходом
    
if (Dimmer2 ticD5_High;  //управляем выходом
    
if (Dimmer3 ticD6_High;  //управляем выходом 
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
{
    
tic 0;             //обнулить счетчик
    
ResumeTimer1();   //запустить таймер
    
attachInterrupt(0detect_downHIGH);  //перепрограммировать прерывание на другой обработчик
}

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{
    
StopTimer1(); //остановить таймер
    
D4_LowD5_LowD6_Low//логический ноль на выходы
    
tic 0;       //обнулить счетчик
    
attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик
}
//*************************************************************************
void loop()
{
    
Start
        Dimmer1 
map(A0_Read010232400);

    
Dimmer2 195//200=мин. 0=макс 
    
Dimmer3 0//200=мин. 0=макс 0
    
End

[свернуть]


Удалил все что связано с serial port. повесил переменик на a0. Если димер выключен с розетки зашиваю скетч включаю димер кручу переменик все чудно работает.
Если димер включен в розетку зашиваю скетч он в сетапе гдето штопорится. на переменик не реагирует. ( закончились какие либо соображения, с чем это связано?
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 11:02   #887
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

PHP код:
    //attachInterrupt(0, detect_up, LOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень 
закомментировал эту строку, понятно что димерование не работает. но программа стартует прекрасно даже когда димер воткнут в розетку.
строку в которой возникает конфлик я нашел но почему он происходит и как его обойти не понимаю(
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 11:31   #888
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Есть маленький сдвиг.
Начал использовать int1 прерывание на 3 пине uno.
PHP код:
    attachInterrupt(1detect_upCHANGE);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень 
Когда димер воткнут в розетку перепрошиваю скетч, по прежнему зависает где то в setup.
НО! Когда димер НЕвключен в розетку заливается скетч, стартует успешно программа. Включаю димер в розетку и все прекрасно работает.

Развернуть для просмотра

PHP код:
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t ticDimmer1Dimmer2Dimmer3;
uint8_t data;

String stringOne "";
uint8_t message[] = "55";
uint8_t message12[] = "\r\n";
uint8_t message14[] = "start";

void setup()
{
    
D4_OutD5_OutD6_Out//Настраиваем порты на выход
    
D4_LowD5_LowD6_Low//установить на выходах низкий уровень сигнала
    
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль  

           //CHANGE – прерывание вызывается при любом изменении значения на входе; 
           //RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
           //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
    
attachInterrupt(1detect_upCHANGE);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    
StartTimer1(halfcycle40); //время для одного разряда ШИМ
    
StopTimer1(); //остановить таймер
    
UART_Init(115200); //инициализация порта
    
UART_SendArray(message145);
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера
{
    
tic++;  //счетчик  
    
if (Dimmer1 ticD4_High//управляем выходом
    
if (Dimmer2 ticD5_High;  //управляем выходом
    
if (Dimmer3 ticD6_High;  //управляем выходом 
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
{
    
tic 0;             //обнулить счетчик
    
ResumeTimer1();   //запустить таймер
    
attachInterrupt(1detect_downHIGH);  //перепрограммировать прерывание на другой обработчик
}

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{
    
StopTimer1(); //остановить таймер
    
D4_LowD5_LowD6_Low//логический ноль на выходы
    
tic 0;       //обнулить счетчик
    
attachInterrupt(1detect_upLOW); //перепрограммировать прерывание на другой обработчик
}
//*************************************************************************
void loop()
{
    
Start
        Dimmer1 
map(A0_Read010232400);

    
stringOne String(Dimmer1);
    
stringOne.getBytes(messagesizeof(stringOne));
    
UART_SendArray(messagesizeof(message));
    
UART_SendArray(message122);
    
delay_ms(100);

    
Dimmer2 195//200=мин. 0=макс 
    
Dimmer3 0//200=мин. 0=макс 0
    
End

[свернуть]

Этот же скетч с прерыванием на int0 не работает по такому же принципу.
Если кто знает в чем может быть причина дайте совет.
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 12:34   #889
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Я так понимаю проблема в железе. В цепи PC814 или в самом оптроне
Вы бы взяли сначала скетч из шапки отладили бы на нем , а потом вносили бы свои изменения.
Для отладки не обязательно использовать Serial, можно и при помощи системного светодиода отлаживать
Admin вне форума   Ответить с цитированием
Старый 11.10.2018, 12:53   #890
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Вы бы взяли сначала скетч из шапки отладили бы на нем , а потом вносили бы свои изменения.
Вот и пытаюсь запустить скетч из шапки. Он у меня не стартует если димер включен в сеть. Попробую передалть схему




Последний раз редактировалось ZombikPC; 11.10.2018 в 13:02.
ZombikPC вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 72 (пользователей: 0 , гостей: 72)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:25. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика