Sammelthread Ambilight-Nachbau mit Arduino Uno R3 unter Windows 8.1 mit WMPC und DVBViewer

Meinst du einblenden wenn du Ambibox an machst (beim pc-start?)? Damit habe ich mich nicht beschäftigt, kann dir aber sagen, dass das mein Philips Fernseher mit original-Ambilight, den ich als PC-Monitor benutze, auch nicht macht. ;)

100 mal in der Sekunde den Bildschirminhalt zu analysieren ist auch ziemlich viel und nicht notwendig. 30 oder sogar weniger sollte dicke ausreichen und schon hast du nur noch ein Drittel Workload. ;)

Das stimmt, die streuen stark. Ich habe es auch nicht wirklich gestestet, ob es einen Vorteil gibt. ;)
 
ne, ich meinte anders. Hat man ein schwarzes Bild, das langsam und stufenlos heller bis hin zu richtig weiß wird: dann sind die LEDs anfangs bei schwarz ja noch komplett aus. Jetzt werden die aber nicht wie der Bildinhalt langsam heller, sondern bleiben bis zu einem bestimmten Punkt komplett aus. Erst ab einer bestimmten Schwelle gehen sie dann sprunghaft und sehr überraschend an mit einer verglichen mit dem Bildinhalt vermutlich zu starken Helligkeit. Sie sind dann bei Weitem noch nicht ganz hell, ist der Punkt überschritten, klappt auch das weitere Aufhellen analog zum Bild. Dieses Sprunghafte stört mich aber schon etwas, weil sie anfangs eben nicht stufenlos heller werden, sondern auf einen Schlag.

Ich hoffe, das war etwas verständlicher :). Eben hab ichs mit einem Video versucht, da sah mans allerdings nicht gut.


edit
Das im letzten Post erwähnte Ruckeln liegt alleine an dem tollen Gotham, Ambibox kann nichts dafür (CPU load steigt um höchstens 3% von ~2 auf max. 5%). Ruckelt natürlich nicht immer, liegt nicht am Vollbildfenster anstatt Vollbild, nicht an DXVA etc. Es scheint, als könnte Gotham manche Frameraten nicht mehr korrekt auslesen (nicht dropped, sondern skipped). Eden soff gerne mal ab, aber geruckelt hat da nix ... . Da kommt man echt vom Regen in die Traufe ...
 
Zuletzt bearbeitet:
hi,

klick (0,3MB). Dropbox etc hab ich nicht. Ist nur quickn dirty, ab glaub 12secs kommt der Effekt.

Hast du bei Tests rausgefunden, für was "Dynamics" und "Hue" steht? Ich hab da kaum einen Unterschied feststellen können.



Mit Helix ruckeln die o.g. Videos btw nicht mehr. Gotham schien zumindest bei meinen Tests nachvollziehbar Probleme mit 29,97fps zu haben.
 
Hallo,
ich nutze seit ein paar monaten "Prismatik" unter XBMC auf meinen htpc - bin auch sehr zufrieden damit.
Ich habe hierzu 50leds für meinen 55" TV.

Da ich Ambilight für Spiele ebenfalls nutzen möchte, habe ich Ambibox auf den PC installiert und das Arduino board auf dem PC angeschlossen.

Die Frage die sich mir nun für den HTPC und XBMC stellt, was ist besser Ambibox oder Prismatik?
Kann man das überhaupt beantworten, oder ist dies "Geschmackssache"?
lg,
 
Zuletzt bearbeitet:
Bietet ambibox nicht mehr Optionen? wie zbs die Profilverwaltung?
 
Wie erkenne ich den Chipsatz?
Bei mein Cousin habe ich alles installiert und habe mittlerweile Netzteil und aurduino bei mir ausprobiert aber bei ihn leuchtet es nicht. Mittlerweile glaub ich das er falsche LEDs geschickt bekommen hat.
 
hallo , ich brauch eure hilfe , ich habe mir das ambiledhd gekauft , was ja auf den arduino uno basiert ,
https://ambiled-hd.googlecode.com/svn/trunk/AmbiLED_Firmware/
AmbiLED HD | High Definition Ambient Light by Inovatek Electronics

kann mir jemand erklären wie ich diese Firmware anpassen kann ? es gibt zwar schon einige fws allerdings möchte ich da etwas verändern, aktuell nutze ich eine sogentannte Quad long strip Firmware wo 4 LEds leuchten für eine Zone , soll heißen 280 Leds / 4 = 70 Zonen damit erreicht man mit ambibox mehr speed und höhrere FPS was deutlich weicheres ambilight ermöglicht, ich würde gerne 5 Leds mit einer zone ansprechen und die maximale Limitierung der Firmware auf 300 Leds setzen , hier mal die Config file ich hoffe ihr könnt mich aufklären was ich tun muss , ps. Arduino IDE hab ich schon downloadet aber kein plan was ich genau machen muss.

Vielen Dank !!!!!

hier die orginale config ohne anpassungen als ino file

https://ambiled-hd.googlecode.com/svn/trunk/AmbiLED_Firmware/

Code:
#include "def.h"

#include <functions.h> 

#include <Adafruit_NeoPixel.h>

#if defined(ShortStrip)
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800); //Fast update for max. 256 LEDs strips
#else
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(total_led_support, PIN, NEO_GRB + NEO_KHZ800); //Standard update for max. 512 LEDs strips
#endif


int bi = 0;
int i = 0;
int j = 0;
byte R_pixel = 0;
byte G_pixel = 0;
byte B_pixel = 0;
byte R_previous = 0;
byte G_previous = 0;
byte B_previous = 0;
byte isSleep = 0;

byte Pixel_Res = LED_resolution; 

int color_sensor_counter=0;

unsigned long lastByteTime, t;
  
void setup() {
  Serial.begin(115200);
  
  pinMode(LED, OUTPUT);  
  
  //TCS3200 Light Sensor Pins
  pinMode(S0,OUTPUT);
  pinMode(S1,OUTPUT); 
  pinMode(S2,OUTPUT);
  pinMode(S3,OUTPUT);
  
  //Check the TCS3200 Light Sensor documentation for S0..S3 
  digitalWrite(S0,HIGH); //S0 High, S1 High for hish speed mode.
  digitalWrite(S1,HIGH);
  digitalWrite(S2,HIGH); //S2 High,S3 Low for Clear sensor mode
  digitalWrite(S3,LOW); 
  
 
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  
  Print_Sign(); // Print device name and sensor value
  
  Opening();
}

void ISR_INT1()
{
  color_sensor_counter++;
}

void loop() {
  
  
  t = millis(); //Time Data
  if (Serial.available()>0)    // Serial command received from the PC
                        {
                          
                          int cmd = Serial.read();
                          if (cmd>250) 
                            commands(cmd);
                          else              
                            {
                            if (bi%3 == 0)        
                               R_pixel = cmd;
                            else if (bi%3 == 1)   
                               G_pixel = cmd;
                            else if (bi%3 == 2)   
                               {
                                 B_pixel = cmd;
                                 if (Pixel_Res==1)
                                     strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel); //buffer single pixel
                                 else if (Pixel_Res==2)
                                   {
                                     strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel); //buffer double pixel for big screens
                                     bi +=3;
                                     strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel); 
                                   }
                                 else //Pixel_Res==4
                                   {
                                    strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel); //buffer quad pixel for bigger screens
                                    bi +=3;
                                    strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel);  
                                    bi +=3;
                                    strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel);
                                    bi +=3;
                                    strip.setPixelColor((bi/3)-1,R_pixel,G_pixel,B_pixel);
                                   }
                                   
                               }
                            bi++;     
                            lastByteTime = t;       
                            }                  
                        }
    if((t - lastByteTime) > 1000) {
       
        if (isSleep==0)
          {
          Sleeping();
          isSleep=1;
          }
        
        for (i=0;i<total_led_support;i++) strip.setPixelColor(i,0,0,0);
        strip.show(); // Initialize all pixels to 'off'
      
        Print_Sign();
        lastByteTime = t; // Reset counter
      }
                        
}

// Fill the dots one after the other with a color
void Opening() {

    for (j=0;j<50;j++)  
      {
      for (i=0;i<total_led_support;i++)  
            {
            strip.setPixelColor(i,j,j,j);
           }
      strip.show(); // Initialize all pixels to 'off'
      delay(20);
      }
    for (j=50;j>0;j--)  
      {
      for (i=0;i<total_led_support;i++)  
            {
            strip.setPixelColor(i,j,j,j);
           }
      strip.show(); // Initialize all pixels to 'off'
      delay(20);
      }  
    for (i=0;i<total_led_support;i++) strip.setPixelColor(i,0,0,0);
        strip.show(); // Initialize all pixels to 'off'  
}

void Sleeping(){
 for (j=0;j<250;j++)  
            {
            for (i=0;i<total_led_support;i++)  
                {
                uint32_t pixy = strip.getPixelColor(i); 
                byte Rp = (pixy & 0x00ff0000UL) >> 16;
                byte Gp = (pixy & 0x0000ff00UL) >>  8;
                byte Bp = (pixy & 0x000000ffUL)      ;
                if (Rp>0) Rp--;
                if (Gp>0) Gp--;
                if (Bp>0) Bp--;
                strip.setPixelColor(i,Rp,Gp,Bp);
                }
            strip.show(); // Initialize all pixels to 'off'
            } 
}

void commands(byte cmd)
{
  switch (cmd) {
        case 255:// SET LEDs
          strip.show();
          isSleep=0;
          bi=0; 
          Pixel_Res = LED_resolution;
          break;
        case 254:// SET LEDs 2x for big screens
          strip.show();
          isSleep=0;
          bi=0; 
          Pixel_Res = 2;
          break;  

        case 252:// Read Sensors when strip is off
          for (i=0;i<total_led_support;i++)  strip.setPixelColor(i,0,0,0); //Stop all LEDs
          strip.show();
          Print_Sign();
          bi=0;
          break;  
        case 251:// Read Sensors when strip is on
          Print_Sign();
          bi=0;
          break; 

      } 
}

void Print_Sign(void){
  Serial.print("AmbiLED HD v1.0\n"); // Send ACK string to host
  Serial.print(TCS3200_read('A')); // Print Ambient light level
  Serial.print('\n');
  Serial.print(TCS3200_read('R')); // Print Ambient light level
  Serial.print('\n');
  Serial.print(TCS3200_read('G')); // Print Ambient light level
  Serial.print('\n');
  Serial.print(TCS3200_read('B')); // Print Ambient light level,
  Serial.print('\n'); 
}


int TCS3200_read(char read_mode){
   
  int color_count=0; 
  attachInterrupt(1, ISR_INT1, LOW);
  switch (read_mode) {
   case 'A':   
      //Red 
      digitalWrite(S2,HIGH);
      digitalWrite(S3,LOW); 
      color_sensor_counter=0;
      delay(10); 
      color_count=color_sensor_counter; 
      break;
     
   case 'R':   
      //Red 
      digitalWrite(S2,LOW);
      digitalWrite(S3,LOW); 
      color_sensor_counter=0;
      delay(10); 
      color_count=color_sensor_counter; 
      break;
   case 'G':   
      //Red 
      digitalWrite(S2,HIGH);
      digitalWrite(S3,HIGH);
      color_sensor_counter=0;
      delay(10); 
      color_count=color_sensor_counter; 
      break;
   case 'B':   
      //Red 
      digitalWrite(S2,LOW);
      digitalWrite(S3,HIGH); 
      color_sensor_counter=0;
      delay(10); 
      color_count=color_sensor_counter; 
      break;   
  }
 detachInterrupt(1); 
 return color_count;
 }

ich würde auch die Adalight Emulator firmware nutzen , mein vorhaben ist das , das ich mit ambibox 25 fps grabben kann ohne das es flackert oder klemmt , da ich einen 64 zoller habe und 280 Leds muss ich um performance rauszuholen ja die Kanäle halbieren . geht das auch mit der Arduino Emulator Firmware ?

https://ambiled-hd.googlecode.com/svn/trunk/AmbiLED_Firmware/AmbiLED_Adalight/AmbiLED_Adalight.ino

Code:
#include <Adafruit_NeoPixel.h>

#define PIN 2
#define LED 13

#define total_led_support 512

Adafruit_NeoPixel strip = Adafruit_NeoPixel(total_led_support, PIN, NEO_GRB + NEO_KHZ800);

int i = 0;
int Ri = 0;
int Gi = 0;
int Bi = 0;
int LED_Count = 200;

byte magic1,magic2,magic3,magic4,magic5,magic6;

unsigned long lastByteTime, t;
  
void setup() {
  pinMode(LED, OUTPUT);  
  
  Serial.begin(115200);
  
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  
  Serial.print("Ada\n");   

}

void loop() {

  t = millis(); //Time Data
  
  
  if (Serial.available()>0)    // Serial command received
                        {
                          
                          int cmd = Serial.read();
                          
                          magic1 = magic2;
                          magic2 = magic3;
                          magic3 = cmd;
                          
                          if ((magic1 == 'A') && (magic2 == 'd') &&(magic3 == 'a')) { LED_Count = i-3; i=0;} 
                          else{
                              
                              if (i%3 == 0)        Ri = cmd;
                              else if (i%3 == 1)   Gi = cmd;
                              else if (i%3 == 2)   Bi = cmd;
                              i++;
                            
                              if (i%3 == 0)  strip.setPixelColor((i/3)-2,Ri,Gi,Bi); //tek renk
                              if (i == LED_Count) 
                                    {
                                      strip.show();
                                    }
                              lastByteTime = t;
                             }
                         
                        }
    if((t - lastByteTime) > 1000) {
      
       
        for (i=0;i<total_led_support;i++)  strip.setPixelColor(i,0,0,0);
        strip.show(); // Initialize all pixels to 'off'
      
        Serial.print("Ada\n"); // Send ACK string to host
        lastByteTime = t; // Reset counter
      }
                        
}

bin gespannt auf eure antworten
 
Zuletzt bearbeitet:
Hab es hingekommen, habe die inofile neu compiliert, es laüft jetzt fantastisch
 
Hat es hier jemand mit mehr als 50 LEDS hinbekommen? Ich würde meinen 55" gern mit 100 ausstatten und frage mich, wie ich mehrere Einspeisepunkte realisieren kann und welches Netzteil ich stattdessen nehmen sollte. Eventuell kann sich mir jemand annehmen und mir Helfen gern auch via pn. Ich bin noch nicht erfahren in der Materie und könnte Hilfe gebrauchen.
 
Hallöchen,

ja mit 98 LED habe ich es nun am Laufen. Ich verwende aber nun einen LED Stripe und keine Kette mehr.

MfG
 
Hallo Felix, warum bist du jetzt auf eine Strippe umgestiegen? Wo siehst du den Vorteil? Ansonsten bleibt es aber von der Softwareseite das gleiche oder?


Würdest du mir bitte sagen, welche du da verwendest?


Könntest du mir auch verraten, wie das bei den Strippen mit der Stromversorgung abläuft? Bei den Ketten muss man ja an mehreren Stellen den Strom einspeisen? Reicht bei Strippen nur eine Einspeisung?

Würde es zu viel verlangt sein, wenn du mir die Strippen und das Netzteil was du verwendet hast Verlinken würdest? Wenn du gerade Langeweile hast, würde ich mich über eine Einkaufsliste freuen.
 
Zuletzt bearbeitet:
Hallo,

Vorteile:
-schneller anzubringen
-weniger mühseliges Ausrichten auf der Rückseite
-strahlen direkt gegen Wand
-einfacherer Handhabung

Nachteile:
-Lötaufwand in den 4 Ecken

Den Stripe habe ich bei ebay gekauft. WS2801 und 32LEDs/m. Stromeinspeisung am Anfang und am Ende reich aus. Theoretisch kann an jeder Ecke eingespeist werden. Ansonsten ist alles wie bei einer Kette. Eventuell muss die Reihenfolge (RGB auf BGR) in Ambibox geändert werden.

z.B.:Stripe

Netzteil

Adapter Stecker auf Klemmen


MfG
 
und ich habe nur eine Einspeisung ja? Gibt es nicht als Alternative Eckverbindungen um sich das Löten zu ersparen?
 
Hallo,

wie oben geschrieben am Anfang und am Ende. Also 2x einspeisen aber von z.B. einem Netzteil wenn du eines wie obe nnimmst.

Eckverbindungen gibt es für solche Stripes, aber die WS2801'er sind zu breit. Es sind 12mm breite Stripes und die Eckverbinder sind für 10mm.

MfG
 
Pixel sind schon etwas komplizierter zum Anbringen, aber man ist halt flexibler, weil man den Abstand zwischen den LEDs selbst wählen kann. So kriegt man auf jeden Fall welche genau in die Ecken. Letztlich aber Geschmackssache. Unauffälliger sind Stripes, wen der TV nicht ganz an der Wand steht. Dafür etwas schlechter ausgerichtet, sofern plan nach hinten aufgeklebt.
 
Zurück
Oben