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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.10.2018, 22:01   #871
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
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
По умолчанию

Цитата:
Код в обработчике - это наш loop ???
Нет, это обработчик прерывания halfcycle

Цитата:
Как рассчитать время выполнения программы в обработчике?
по тактам или по времени. стартануть micros при входе в обработчик и выключить его при выходе. Разница времени и будет искомое значение

Цитата:
Если использовать ваш скетч в чистом виде без подключения каких либо библиотек и функций. сможет он отрезать по 1 мкс от полупериода? Или тогда времени не останется на другие функции??
Не знаю попробуйте. Не пойму для чего Вам такое разрешение? 255 уровней даже глаз не различит, а Вы хотите 10000
В мониторах 256 уровней яркости каждого пикселя
Admin вне форума   Ответить с цитированием
Старый 10.10.2018, 22:06   #872
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Собрал димер, подключил к ардуино. Лампочка вроде как регулируется, но иногда бывает вспыхивание лампы, грешил на монтаж, собрано на макетке ардуиновскими проводками. потом подключил турбину от котла, она ток гудит и немного подергивается. залил ваш скетч который показывает частоту в мониторе порта.
PHP код:
unsigned long curTimeloopTime// Время работы программы
volatile int Hz 0;            // Назовем частотой в сети переменного тока .

void setup()
{
  
attachInterrupt(0zero_crosssRISING);  // прерывание на D2
  
Serial.begin(115200);
}

void zero_crosss()
{
  
Hz++; // считаем переход через 0
}

void loop()  

  
curTime millis();
  if (
curTime >= (loopTime 500)) 
  {
    
loopTime curTime;
    
Serial.print(Hz); 
    
Hz 0;
    
Serial.println(" Hz");
  }

Показует 25 Hz. может на 814 один диод згоревший? они не новые выпаял их из платки газового котла.
ZombikPC вне форума   Ответить с цитированием
Старый 10.10.2018, 22:11   #873
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Цитата:
Не пойму для чего Вам такое разрешение? 255 уровней даже глаз не различит, а Вы хотите 10000
В мониторах 256 уровней яркости
Это всего-лишь мысли в слух. разбираюсь с работой программы задаю вопросы, чтоб понять на правильно ли я пути или как всегда в дебри понесло))
ZombikPC вне форума   Ответить с цитированием
Старый 10.10.2018, 22:43   #874
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Все таки 814 работал на одном диоде. Поставил другую pc814. Все заработало правильно.
1) Использовать serial port я не могу, когда работает прерывание?
2) Есть какое-то решение или альтернатива.
ZombikPC вне форума   Ответить с цитированием
Старый 10.10.2018, 23:49   #875
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
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
По умолчанию

Можете использовать UART_ReadByte из скетча в шапке
Admin вне форума   Ответить с цитированием
Старый 11.10.2018, 00:16   #876
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

Как только в сетапе пытаюсь инициализировать порт
PHP код:
UART_Init(115200); 
или
PHP код:
Serial.begin(9600
Заливаю скетч но он где-то тормозится в сетапе и начинает висеть. основной цикл так и не запускается.
если димер подключен к 220 в. если выключить димер из розетки то программа выполняется в сериал передаются значения. как только димер подключаю к сети или сериал перестает слать в монитор значения или не происходит димирование.
Что может быть не так?
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 00:21   #877
ZombikPC
Junior Member
 
Регистрация: 10.10.2018
Сообщений: 23
Вес репутации: 0
ZombikPC is an unknown quantity at this point
По умолчанию

PHP код:
StartTimer1(halfcycle40); 
тормозится наверно на этой функции. попробую ее перенести из setup в loop. И буду запускать по нажатию кнопки. Посмотрим что получится
ZombikPC вне форума   Ответить с цитированием
Старый 11.10.2018, 00:49   #878
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
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
По умолчанию

Выложите код полностью, похоже что Вы в коде что то не так сделали. Код из шапки у меня работал без проблем
Admin вне форума   Ответить с цитированием
Старый 11.10.2018, 00:52   #879
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 ticDimmer1;
uint8_t data;
String stringOne ="";
uint8_t message[] = "55";
uint8_t message12[] = "\r\n";
uint8_t message14[] = "start";

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


    
UART_Init(115200); //инициализация порта
    //Serial.begin(115200);

}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера
{
    
tic++;  //счетчик  
    
if (Dimmer1 ticD4_High//управляем выходом
}

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

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

    
// проверяем нажата ли кнопка
    // если нажата, то buttonState будет HIGH:
    
if (buttonState == HIGH) {

        
//CHANGE – прерывание вызывается при любом изменении значения на входе; 
        //RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
        //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
        
attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
        
StartTimer1(halfcycle40); //время для одного разряда ШИМ
        
StopTimer1(); //остановить таймер
        
UART_SendArray(message145);
        
delay_ms(1000);


    }


        
Dimmer1 map(A0_Read010232400);
        
//UART_SendByte(5);
    
stringOne String(Dimmer1);
    
stringOne.getBytes(messagesizeof(stringOne));
    
UART_SendArray(messagesizeof(message));
    
UART_SendArray(message122);
    
delay_ms(100);
    
End

[свернуть]

Вот мой цикл как ток нажимаю на кнопку программа виснит((

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

только что взял пример из шапки, нечего не менял. Если димер подключен к сети, скетч заливается но не стартует. Если залить скетч вести в монитор порта любое значение от 0 до 9 и только потом включить димер в сеть, турбина начинает вращаться. на все последующии значения вводимые в монитор программа не как не реагирует.
ZombikPC вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 187 (пользователей: 0 , гостей: 187)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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