Baco Led Matrix

Dit topic is gesloten

@squant: Ja, ik heb het kristal op het bord vervangen door 16MHz, dus de CPLD weet nu niet beter of ik zit op de goede klok (of op precies de dubbelle klok?)
Uiteraard kun je ook je micro op 18.432 MHz zetten, als je die kristalwaarde hebt rondslingeren.

@RS2Racer: Ik denk niet dat het ghosting is, ik stuur een vrij random patroon dus sommige leds zullen vaker aangaan dan anderen. Soort van PWM dus.

In ieder geval verwacht de CPLD geen lange periode met alleen '1' of '0', want dat komt niet voor in een reeks oplopende tellerwaarden.

Ik kan nu het matrix aansturen met de orginele cpld. De optische interface heb ik alleen nog niet werkend.

De cpld die op het grote bord zit is anders dan de cpld uit het schema. De pinout was daarom ook iets anders. Dit is de pinout die ik gevonden heb:
Klok van kristal:
-27 clk_1024(576 kHz)
Interface naar shift register:
-42 dr
-15 en(active low)
-43 clk
-41 strobe
-44 dor
Interface naar column switcher:
-37 A
-35 B
-34 C
-33 enable chip1 (active low)
-40 enable chip2 (active low)
Een signaal uit opamps, weet niet echt waar deze voor is. Misschien stroombegrensing?:
-11 ledtin
Optische interface:
-8 d_in
-1 d_out

Heb ook de CPLD er af gehaald en met een NXP LPC1768 wat werkend gekregen.

http://oi45.tinypic.com/99fhxk.jpg

De volgende code is gebruikt

c code:

#include "mbed.h"

DigitalOut Strobe(p8);
DigitalOut EN(p9);
DigitalOut A(p10);
DigitalOut B(p11);
DigitalOut C(p12);
DigitalOut EN1(p13);            //Inverted
DigitalOut EN2(p14);            //Inverted
Serial pc(USBTX, USBRX);

SPI spi(p5, p6, p7); // mosi, miso, sclk

void SetCol(int ColData)
{
    A = ColData & 1;
    B = ColData & 2;
    C = ColData & 4;
    
}

void WriteData(int Data)
{
    EN = 1;
    spi.write(Data);
    wait_us(0.1);
    Strobe = 1;
    Strobe = 0;
    EN = 0;
}

int main()
{
    EN = 0;
    A = 0;
    B = 0;
    C = 0;
    EN1 = 0;
    EN2 = 0; 
    
    int i;
   
    //                Chip   1                                         2                                         1                                         2                                         1                                         2                                         1                                         2                                         1                                         2                                         1                                         2                                            Col
    int Databyte[48][8] = {{000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, //   4
                           {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, //   3
                           {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, //   2
                           { 60,  66, 129, 129, 129,  66, 000, 000}, { 60,  66, 129, 129, 129,  66,  60, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}, {000, 000, 000, 000, 000, 000, 000, 000}};//   1
                    //Row    1                                         1                                         2                                         2                                         3                                         3                                         4                                         4                                         5                                         5                                         6                                         6
                                
    // Setup the spi for 8 bit data, high steady state clock,
    // second edge capture, with a 1MHz clock rate
    spi.format(8,0);
    spi.frequency(8000000);

    while(1) 
    {   
        //Enable 1
        EN1 = 0;
        EN2 = 1;
        for(i=0;i<=7;i++)
        {          
            SetCol(i);
            //Get data chip 1
            for(int l=1;l<=48;l=l+2)
            {
                WriteData(Databyte[l-1][i]);
            }
            wait_ms(1);
        }
        
        //Enable 2
        EN1 = 1;
        EN2 = 0; 
        for(i=0;i<=7;i++)
        {
            SetCol(i);  
            //Get data chip 2        
            for(int l=2;l<=48;l=l+2)
            {
                WriteData(Databyte[l-1][i]);
            }
            wait_ms(1);
        }
    }
}

Op 18 maart 2013 08:48:06 schreef robojan:
Een signaal uit opamps, weet niet echt waar deze voor is. Misschien stroombegrensing?:

Volgens mij is dit een single LED check. Om te kijken of de LED niet defect is.

Even om gewoon te melden, hier werkt t hele scherm(zonder clpd wel) inmiddels en wanneer t ding vol aan is trekt het mijn 6A labvoeding omlaag naar 7V. Ik vraag me ergens af of dat wel de bedoeling is want t hele paneel word ook best warm.

Zal wel meevallen toch? 64 x 48 = 3072 leds. En dat maal 10mA = 30Amp.

Maar er zal mogelijk nog iets geschakeld worden?

klein is fijn

Moderator

Op 18 maart 2013 22:23:32 schreef JesperR:
en wanneer t ding vol aan is

Die dingen zijn volgens mij helemaal niet ontworpen om vol aan te staan. Als er gewoon tekst op komt staat ie hoogstens voor 20% aan.

De power connector is van een type dat typisch voor 2A/pin gespect is.

Dus meer dan 4A is het bord niet voor ontworpen, en een goed designer neemt daar altijd wat marge. Dus veel eer dan 3A is denk ik niet de bedoeling.

De P-fetjes lijken een variant van de FDS4435 (PSI4435 kan ik niet vinden), en die kan 7A aan. Andere varianten een ampere meer of minder.

Meer dan 3-4 A is dus niet raadzaam voor de levensduur van het bord (al zal het wel wekenlang goed gaan op 10A).

Ik heb het schema niet goed bekeken, maar wordt er geen multiplexing toegepast? In dat geval zou het stroomverbruik veel lager zijn.

Op 18 maart 2013 08:48:06 schreef robojan:
Ik kan nu het matrix aansturen met de orginele cpld.

Hoe ziet je signaal er precies uit?

Ik heb mijn sturende PIC16F1825 nu geklokt met de 18.432 MHz van het bord, en krijg het nog niet werkende. Heb verschillende signalen met 1/16 en 1/8 van de klokfrequentie uitgestuurd.
Het signaal komt wel netjes door de optische link heen.

@Zonnepaneeltje Ik bedoelde dat ik de orginele cpld er op heb laten zitten en mijn eigen ontwerp op de cpld geprogrammeerd heb. Het 18.432 MHz signaal gaat niet rechtstreeks de cpld binnen. Eerst wordt het kloksignaal nog gedeeld door 32. Ik denk dat je dus lager moet gaan zitten in de signalen die je aanbiedt.

Ik heb een klein beetje ervaring met verilog, dus een protocol te implementeren voor de optische link gaat niet zo snel.

@aanuit Er wordt multiplexing gebruikt ja.

[Bericht gewijzigd door robojan op dinsdag 19 maart 2013 09:48:09 (24%)

Op 19 maart 2013 09:17:39 schreef aanuit:
Ik heb het schema niet goed bekeken, maar wordt er geen multiplexing toegepast? In dat geval zou het stroomverbruik veel lager zijn.

Als je 1:10 multiplexing doet, dan is het met veel ledjes gewoon mogelijk om 10x de normale stroom te sturen. Je stuurt dus 10% van de tijd 100mA door ieder ledje om gemiddeld op 10mA per ledje te komen.

Deze "truuk" is voor "hobbyisten" niet altijd aan te raden: Als je software vastloopt, brandt je ledje door. Maar in een profi toepassing kan ik me goed voorstellen dat je eerst de boel ontwikkelt met stroombegrenzingsweerstanden voor "10mA max" totdat de boel werkt, en dan in productie gaat met stroombegrenzingsweerstanden die op 100mA mikken.

Deze dingen moeten in fel zonlicht ook gewoon goed zichtbaar zijn. Ik heb een keer op een beurs op 3m afstand van zo'n paneel gestaan. Je voelt gewoon de infrarood die er afkomt op je huid. Zoveel vermogen wordt er in die dingen gestopt.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

@robojan, zonnepaneeltje:
Ik heb (met een AVR, maar ach) ook de originele CPLD laten zitten. Alleen heb ik heb bord gedown-clockd naar 16MHz, ipv de AVR overklokken op 18.432. Maar dat maakt hoogstwaarschijnlijk niets uit.

Waarmee ik uiteindelijk enige beweging kreeg was met bitjes van 4 klokperioden lang. Klok/8 (oftewel een 010101 patroon op klok/4) geeft 4 strepen over het display.

Met je PIC moet dat ook kunnen lijkt me (ik weet verder niets van PIC's). Checken (als je een SPI of UART interface gebruikt) of je geen dode periodes in je signaal hebt?

Op 19 maart 2013 10:13:20 schreef rew:
[...]

Deze "truuk" is voor "hobbyisten" niet altijd aan te raden: Als je software vastloopt, brandt je ledje door.

of je driverIC :o

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.

Op 19 maart 2013 10:13:20 schreef rew:
Je voelt gewoon de infrarood die er afkomt op je huid.

Klopt. Dat probeerde ik dit weekend ook, met een stevige labvoeding.
Dataheet zegt hetzelfde als rew.

Peak Current Per Dice(duty cycle 1/10,1KHz) 90 mA

Op 19 maart 2013 08:56:17 schreef blurp:.....en een goed designer neemt daar altijd wat marge.....

Een goed designer neemt ook ontkoppel Ctjes op in zijn schema. De spikes die je ziet op het moment dat dat bord in bedrijf is, daar word je niet vrolijk van....

Serea

10% duty cycle * 90mA * 48 modules geeft 432 mA voor het hele bord
100% duty cycle * 25mA * 48 modules geeft 1200mA voor het hele bord.

Conclusie: die connector is niets mis mee, zolang je binnen de specs van de leds blijft.

Andersom: als je display meer dan 2A verstookt zit je buiten de specs van de led's.

Op 19 maart 2013 11:41:50 schreef blurp:
10% duty cycle * 90mA * 48 modules geeft 432 mA voor het hele bord

Dat moet nog wel x8 , er zitten nl 64 leds op een module.
Dat is dus 3,5 A. Die connector kan trouwens 6A per pin hebben..

Op 19 maart 2013 11:49:12 schreef Zonnepaneeltje:
[...]
Dat moet nog wel x8

Oeps, dat klopt. 3.5A dus. Met alle leds aan dus.

Ik had toevallig ook gemaild met Surtronic en heb zojuist reactie gekregen (ik heb de persoonlijke gegevens eruit geknipt):

In feite waren de PCB's die wij aan Baco hebben verkocht bedoeld voor onderdelen.

Het is nooit de bedoeling geweest dat deze modules weer als displays in omloop zouden komen.

Zelfs de system integrators moeten eerst een NDA tekenen voordat wij protocollen vrijgeven, en het protocol over de fiber krijgen zelfs deze System Integrators per definitie niet!

Kortom, we zullen alle mensen op het forum hierin moeten teleurstellen. Ik heb even doorgenomen wat er tot nu toe op het forum bereikt is en kan niet anders dan mijn bewondering uitspreken over hoe dit als groep wordt aangepakt.

Veel succes met het verder engineeren aan deze modules.

edit: ik had een rare eerste regel

Grappig. Maakt het wel een leukere uitdaging om het protocol te achterhalen ;-)

Op 19 maart 2013 09:41:26 schreef robojan:
@Zonnepaneeltje Ik bedoelde dat ik de orginele cpld er op heb laten zitten en mijn eigen ontwerp op de cpld geprogrammeerd heb.

Zou je hier wat meer info over willen geven?
Je hebt de programmer uit deze post gebouwd?:
http://www.circuitsonline.net/forum/view/message/1490464#1490464

Volgens mij heb ik een spoor van het optische protocol te pakken. Ik kan namelijk alle 16 lijnen individueel aan en uit schakelen.

bewijsstuk 1:
http://www.uploadarchief.net/files/download/img-20130319-wa0006.jpg

Bewijsstuk 2:

code:


int main(void)
{
	uint8_t i[] = { 0xa0, 0x02, 0x00, 0x80, 0xa1, 0x02, 0x00, 0x80,
			0xa2, 0x02, 0x00, 0x80, 0xa3, 0x02, 0x00, 0x80,
			0xa4, 0x02, 0x00, 0x80,	0xa5, 0x02, 0x00, 0x80,
			0xa6, 0x02, 0x00, 0x80,	0xa7, 0x02, 0x00, 0x80,
			0xa8, 0x02, 0x00, 0x80,	0xa9, 0x02, 0x00, 0x80,
			0xaa, 0x02, 0x00, 0x80,	0xab, 0x02, 0x00, 0x80,
			0xac, 0x02, 0x00, 0x80,	0xad, 0x02, 0x00, 0x80,
			0xae, 0x02, 0x00, 0x80,	0xaf, 0x02, 0x00, 0x80
	};
	const uint8_t len = 16*4;
	uint8_t j = 0;
	UCSR0C = _BV(UMSEL01) | _BV(UMSEL00);
	UBRR0H = 0;
	UBRR0L = 1;
	UCSR0B = _BV(TXEN0);

	while (1) {
		if (UCSR0A & _BV(UDRE0)) {
			UDR0 = i[j];
			if (j == 0) j=len;	
			j--;
		}
	}
}

edit: Kleine aanvulling; nog even met de scope gekeken. Inderdaad gaan alle FETjes een voor een aan. Ook gaat er (als de FET aanstaat) een strobe naar de schuifregisters

Op 19 maart 2013 16:05:08 schreef DeSoepkip:
Ik had toevallig ook gemaild met Surtronic en heb zojuist reactie gekregen (ik heb de persoonlijke gegevens eruit geknipt):

[...]

edit: ik had een rare eerste regel

Toch is het een leuk compliment wat ze zo geven :-)

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.

@Blurp: Dat is goed nieuws.
Jammer dat ik geen C ken, heb werkelijk geen idee wat voor signaal je hier uitstuurt.

Op 19 maart 2013 21:41:11 schreef Zonnepaneeltje:
Jammer dat ik geen C ken, heb werkelijk geen idee wat voor signaal je hier uitstuurt.

Een (herhalend) patroon van 0 en 1 (:-p), waarbij iedere bit 4 klokperioden lang is, en het volgende patroon gebruikt wordt (MSB eerst):
0x800002af => zet lijn 0 aan
0x800002ae => zet lijn 1 aan (en 0 dus uit)
etc.

Dit topic is gesloten