Результаты опроса: Нужна ли вам такая функция на телевизоре?

Голосовавшие
191. Вы ещё не голосовали в этом опросе
  • Нет.

    28 14.66%
  • Да.

    129 67.54%
  • Нужна , только руки кривые, самому не осилить

    34 17.80%
Показано с 1 по 10 из 921

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10
    Продвинутый Аватар для HiddenPilot
    Регистрация
    14.04.2008
    Возраст
    46
    Сообщений
    354
    Вес репутации
    311

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Продолжение темы/Очередная доработка:
    Отказался от библиотеки SmallUart, так что теперь нет необходимости скачивать библиотеку SmallUart. Основные функции перенес в скетч.
    Код:
    #include <util/delay.h>
    //#include <smallUart.h>
    //#include <SPI.h>
    
    unsigned long LastByteTime, t;
    uint8_t data;
    
    void setup() 
      {
      //Инициализация UART  
      UBRR0L = 16;UBRR0H = 0; //115200
      //UBRR0L = 34;UBRR0H = 0; //57600
      UCSR0A = ( 1<<U2X0 ); //UART_DOUBLESPEED
      UCSR0C=((1<<UCSZ01) | (1<<UCSZ00)); //Set Frame Format
      UCSR0B = ((1<<TXEN0) | (1<<RXEN0)); //Enable The receiver and transmitter 
      
      //Инициализация SPI;
      //SPI.begin();
      DDRB |= (1<<MOSI) | (1<< SCK) | (1<<SS);
      PORTB |= _BV(PORTB2); 
      PORTB &= ~((1<<PORTB3)|(1<<PORTB5)); 
    
      
      //SPI.setBitOrder(MSBFIRST);
      //SPI.setDataMode(SPI_MODE0);
      //SPI.setClockDivider(SPI_CLOCK_DIV16); // 1 МГц
      SPCR = 1; SPSR = 0; // 1 МГц; MSBFIRST; SPI_MODE0
      //SPCR = 1; SPSR = 1; // 2 МГц; MSBFIRST; SPI_MODE0
      //SPCR = 2; SPSR = 1; // 0.5 МГц; MSBFIRST; SPI_MODE0
    }//setup()
    
    bool Read_Next_Byte(uint8_t& data)
    {
    	if (_SFR_MEM8(0xC0) & (1<<7)) //(UCRA & (1<<UART_RXREADY))
    	{
    		data = _SFR_MEM8(0xC6); //data = UDR;
    		return true;
    	}
    	else    return false;
    }
    
    void loop()
    {
      //for(;;){
          t= millis();
          if (Read_Next_Byte(data)){
          //if (true){
            LastByteTime = t;
            //if (data == 255){_delay_ms(1);continue;} //подождем 1мс для след кадра(for(;;))
            if (data == 255){_delay_ms(1);return;} //подождем 1мс для след кадра(loop())
            else{
           // PORTB &= ~_BV(PORTB2); // для отладки: SS off, начинаем передачу
              SPDR = data;while(!(SPSR & _BV(SPIF)));
            //PORTB |= _BV(PORTB2); // для отладки: SS on, закончили передачу
              }
          }else{
          //гасим подсветку если нет потока более 10 сек  
         if((t - LastByteTime) > 10000) {
          for(int8_t i=0; i<255; i++) {
               SPDR = 0;while(!(SPSR & _BV(SPIF)));
          }
            _delay_ms(1); // подождем 1мс
            LastByteTime = t;
            }
          }
        //}//for
     }
    После очередной оптимизации программа снова "похудела" почти на 200 байт
    Размер скетча в двоичном коде: 666 байт
    Знаковое число получилось )))
    Последний раз редактировалось HiddenPilot; 03.09.2012 в 22:16.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

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