Re: Фоновая подсветка телевизора Ambilight
Так скетчь под твой контроллер скорее всего переделывать нужно.
Или вешать светодиоды на соответствующие порты
PHP код:
#define D2_High PORTD |=B00000100 //red
#define D2_LOW PORTD &= B11111011
#define D3_High PORTD |=B00001000 //green
#define D3_LOW PORTD &= B11110111
#define D4_High PORTD |=B00010000 //blue
#define D4_LOW PORTD &= B11101111
#define D5_High PORTD |=B00100000
#define D5_LOW PORTD &= B11011111
#define D6_High PORTD |=B01000000
#define D6_LOW PORTD &= B10111111
#define D7_High PORTD |=B10000000
#define D7_LOW PORTD &= B01111111
#define D8_High PORTB |=B00000001
#define D8_LOW PORTB &= B11111110
#define D9_High PORTB |=B00000010
#define D9_LOW PORTB &= B11111101
#define D10_High PORTB |=B00000100
#define D10_LOW PORTB &= B11111011
#define D11_High PORTB |=B00001000
#define D11_LOW PORTB &= B11110111
#define D12_High PORTB |=B00010000
#define D12_LOW PORTB &= B11101111
#define D13_High PORTB |=B00100000
#define D13_LOW PORTB &= B11011111
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Так скетчь под твой контроллер скорее всего переделывать нужно.
Или вешать светодиоды на соответствующие порты
Точно туплю как пацан, ведь порты PWM у меги идут в перемешку и совсем другие при явном объявлении :)
Pin0 = (Порт) PE0 (не трогаем)
Pin1 = (Порт) PE1 (не трогаем)
Pin2 = (Порт) PE4
Pin3 = (Порт) PE5
Pin4 = (Порт) PG5
Pin5 = (Порт) PE3
Pin6 = (Порт) PH3
Pin7 = (Порт) PH4
Pin8 = (Порт) PH5
Pin9 = (Порт) PH6
Pin10 = (Порт) PB4
Pin11 = (Порт) PB5
Pin12 = (Порт) PB6
Pin13 = (Порт) PB7
P.S. Простите новичка... Теперь я думаю, на правильном пути?
...
Вот исправленное, но не проверенное
PHP код:
#define D2_High PORTE |=B00010000 //red
#define D2_LOW PORTD &= B11101111
#define D3_High PORTE |=B00100000 //green
#define D3_LOW PORTD &= B11011111
#define D4_High PORTG |=B00100000 //blue
#define D4_LOW PORTG &= B11011111
#define D5_High PORTE |=B00001000 //red
#define D5_LOW PORTE &= B11110111
#define D6_High PORTH |=B00001000 //green
#define D6_LOW PORTH &= B11110111
#define D7_High PORTH |=B00010000 //blue
#define D7_LOW PORTH &= B11101111
#define D8_High PORTH |=B00100000 //red
#define D8_LOW PORTH &= B11011111
#define D9_High PORTH |=B01000000 //green
#define D9_LOW PORTH &= B10111111
#define D10_High PORTB |=B00010000 //blue
#define D10_LOW PORTB &= B11101111
#define D11_High PORTB |=B00100000 //red
#define D11_LOW PORTB &= B11011111
#define D12_High PORTB |=B01000000 //green
#define D12_LOW PORTB &= B10111111
#define D13_High PORTB |=B10000000 //blue
#define D13_LOW PORTB &= B01111111
Re: Фоновая подсветка телевизора Ambilight
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Как проверишь отпишись
Проверил, не все в норме.
Pin2 = (Порт) PE4 и Pin3 = (Порт) PE5 светятся постоянно, остальные правильно работают.
В объяве нашел ошибку
#define D2_High PORTE |=B00010000 //red
#define D2_LOW PORTD &= B11101111
#define D3_High PORTE |=B00100000 //green
#define D3_LOW PORTD &= B11011111
Это уже рабочий :)
PHP код:
#define D2_High PORTE |=B00010000 //red line-1 on
#define D2_LOW PORTE &= B11101111 //red line-1 off
#define D3_High PORTE |=B00100000 //green line-1 on
#define D3_LOW PORTE &= B11011111 //green line-1 off
#define D4_High PORTG |=B00100000 //blue line-1 on
#define D4_LOW PORTG &= B11011111 //blue line-1 off
#define D5_High PORTE |=B00001000 //red line-2 on
#define D5_LOW PORTE &= B11110111 //red line-2 off
#define D6_High PORTH |=B00001000 //green line-2 on
#define D6_LOW PORTH &= B11110111 //green line-2 off
#define D7_High PORTH |=B00010000 //blue line-2 on
#define D7_LOW PORTH &= B11101111 //blue line-2 off
#define D8_High PORTH |=B00100000 //red line-3 on
#define D8_LOW PORTH &= B11011111 //red line-3 off
#define D9_High PORTH |=B01000000 //green line-3 on
#define D9_LOW PORTH &= B10111111 //green line-3 off
#define D10_High PORTB |=B00010000 //blue line-3 on
#define D10_LOW PORTB &= B11101111 //blue line-3 off
#define D11_High PORTB |=B00100000 //red line-4 on
#define D11_LOW PORTB &= B11011111 //red line-4 off
#define D12_High PORTB |=B01000000 //green line-4 on
#define D12_LOW PORTB &= B10111111 //green line-4 off
#define D13_High PORTB |=B10000000 //blue line-4 on
#define D13_LOW PORTB &= B01111111 //blue line-4 off
volatile unsigned int tcnt2;
volatile byte pwm_time;
//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[12]; //массив храннения цветов 12-ть каналов
void setup()
{
for (int i=2; i < 14; i++){pinMode(i, OUTPUT);}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 252; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 12)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 12; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
// if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else {
if(blank>100000) { blank=0; for (byte i = 0; i < 12; i++) color[i] = 0;}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D2_High; else D2_LOW;
if(color[1] > pwm_time ) D3_High; else D3_LOW;
if(color[2] > pwm_time ) D4_High; else D4_LOW;
if(color[3] > pwm_time ) D5_High; else D5_LOW;
if(color[4] > pwm_time ) D6_High; else D6_LOW;
if(color[5] > pwm_time ) D7_High; else D7_LOW;
if(color[6] > pwm_time ) D8_High; else D8_LOW;
if(color[7] > pwm_time ) D9_High; else D9_LOW;
if(color[8] > pwm_time ) D10_High; else D10_LOW;
if(color[9] > pwm_time ) D11_High; else D11_LOW;
if(color[10] > pwm_time) D12_High; else D12_LOW;
if(color[11] > pwm_time) D13_High; else D13_LOW;
}
Re: Фоновая подсветка телевизора Ambilight
После двух недельного ожидания сегодня пришел китайский arduino nano v3
на atmega 328P.
по виду немного отличается от Вашего - детальками :)
а так тоже самое, дрова встали нормально
прошил скетч с первого поста - ошибок не вылетало
при подключении к USB - горит зеленый - питание
при запуске программы atmolight - горит красный D13 и начинает моргать Rx
Проверить работу не могу - остальные запчасти в пути еще
по моему описанию это штатное поведение?
зы. заливал скетч блинк- все работает!!!
Re: Фоновая подсветка телевизора Ambilight
Chip сделаете ли вы нам в этом году подарок в виде проги для двух мониторов))) либо же вообще её бессмысленно ждать?
Re: Фоновая подсветка телевизора Ambilight
Решился таки на такую классную штуку, но пока в целях приобретения опыта в программирования микроконтроллеров, вот сразу возникли вопросы (а куда ж без них :-) ). Дак вот:
1. При компилировании скетча, с первой страницы, выдает вот такую ошибку:
Ambilight.cpp: In function 'void setup()':
Ambilight:40: error: 'TIMSK2' was not declared in this scope
Ambilight:41: error: 'TCCR2A' was not declared in this scope
Ambilight:42: error: 'TCCR2B' was not declared in this scope
Ambilight:42: error: 'WGM22' was not declared in this scope
что в скетче не так?
2. Имею Arduino собственного производства, с atmega8-16PU на борту, сколько можно соорудить с помощью его каналов? понятно, что с дополнительными элементами.
Заранее благодарен за ответ!
Re: Фоновая подсветка телевизора Ambilight
Дело в том, что эти константы определены для процесоров XX8, типа 168, 328, наверное и 88, 48.
Придется взять документацию на 168-й проц и свою мегу и найти аналоги этих констант. Не всегда могут присутствовать полные аналоги - у 8-й меги может быть другое количество таймеров, к примеру.
Re: Фоновая подсветка телевизора Ambilight
ах вот она, где собака зарыта. Спасибо за ответ
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
Попробовал другой вариант с применением SoftPWM.h
Частота шима низкая, но мерцаний нет.
PHP код:
#include <SoftPWM.h>
uint8_t leds[12] = {30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52};
byte volatile color[12];
unsigned long night=0;
void setup()
{
Serial.begin(115200);
SoftPWMBegin();
for (int i = 0; i < 12; i++)
SoftPWMSet(leds[i], 0);
SoftPWMSetFadeTime(ALL, 5, 5);
}
void loop()
{
if (Serial.available() > 12)
{
if (Serial.read() == 255)
{
for (int i = 0; i < 12; i++)
{
color[i] = Serial.read();
}
night=0;
}
}
else
{
if(night>30000) { night=0; for (byte i = 0; i < 12; i++) color[i] = 0;}
night++;
}
for (int i = 0; i < 12; i++)
SoftPWMSet(leds[i], color[i]);
}