Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

RG(B) LED Hodiny problém - "stínování číslic"

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Poradna
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Darthy



Založen: Jan 15, 2008
Příspěvky: 187
Bydliště: Olomouc

PříspěvekZaslal: čt červenec 18 2019, 13:48    Předmět: RG(B) LED Hodiny problém - "stínování číslic" Citovat

Zdravím, nějakou dobu pracuji na projektu RGB Led hodin, které mají od určitého času svítit červeně a pozvolna přecházet do zelené. Hodiny jsou vytvořeny z RGB Led pásků, každý jednotlivý segment číslice je jeden segment pásku (tzn. 3 RGB LED diody). Udělal jsem si návrh schématu, odzkoušel jednotlivé "moduly", napsal program a návrh funguje až na jeden problém a to je, že se mi jednotlivé číslice mírně zobrazují na sousedních číslicích. Nazývám to stínování číslic, nevím jestli pro to je jiný pojem. Nemůžu přijít na to jestli se jedná o problém programu (arduina), nebo návrhu elektroniky. Přikládám schámata a kód programu.
Kód arduina:
kód:

int tempo = 4;

void changeColor() {
  int sec = dt.second;
  analogWrite(green, map(sec, 0, 59, 0, 255));
  analogWrite(red, map(sec, 0, 59, 255, 0));
}

TimedAction color = TimedAction(1, changeColor);

void loop() {
 
  color.check();
  dt = clock.getDateTime();
 
  hour1 = dt.hour / 10;
  hour2 = dt.hour % 10;
  minute1 = dt.minute / 10;
  minute2 = dt.minute % 10;
 
  digit(1);
  segments(hour1);
  delay(tempo);

  digit(2);
  segments(hour2);
  delay(tempo);


  digit(3);
  segments(minute1);
  delay(tempo);

  digit(4);
  segments(minute2);
  delay(tempo);


}

void digit(int digit) {
  switch (digit) {
    case 0:
      PORTB = B00000000;
      break;
    case 1:
      PORTB = B00001000;
      break;
    case 2:
      PORTB = B00000100;
      break;
    case 3:
      PORTB = B00000010;
      break;
    case 4:
      PORTB = B00000001;
      break;
  }
}

void segments(int number) {
  switch (number) {
    case 0:
      PORTL = B01111110;
      break;
    case 1:
      PORTL = B00110000;
      break;
    case 2:
      PORTL = B01101101;
      break;
    case 3:
      PORTL = B01111001;
      break;
    case 4:
      PORTL = B00110011;
      break;
    case 5:
      PORTL = B01011011;
      break;
    case 6:
      PORTL = B01011111;
      break;
    case 7:
      PORTL = B01110000;
      break;
    case 8:
      PORTL = B01111111;
      break;
    case 9:
      PORTL = B01111011;
      break;
  }

}


Vynechal jsem deklaraci proměnných a definování jednotlivých pinů. Nezáleží na tom jaké tempo (delay) nastavím, jestli 400ms nebo 5ms, číslice se stále zobrazují kde nemají.
Obrázky jsou při napájení UDN cca 9,6V, pokud snížím na 8V tak se to tolik neprojevuje. Kde může být problém v programu, nebo v elektronice, je možné že je chyba v UDN2981?



RG Led driver.jpg
 Komentář:
1) Původní návrh, všech 4 číslic ovládaný jedním UDN2981
 Velikost:  284.24 kB
 Zobrazeno:  146 krát

RG Led driver.jpg



cely_cas_zelena.jpg
 Komentář:
3) Zobrazuji cely čas, číslice přepínám s delay na 5ms.
 Velikost:  211.57 kB
 Zobrazeno:  67 krát

cely_cas_zelena.jpg



400ms_cervena.jpg
 Komentář:
4) Zobrazuji číslice s delay 400ms, nuly jsou vidět na každé číslici.
 Velikost:  240.76 kB
 Zobrazeno:  87 krát

400ms_cervena.jpg



RG Led driver_board.jpg
 Komentář:
2) Návrh realizovaný na desku. Reálně jsou dvě tyto desky vytvořeny a osazeny. Každá ovládá jednu dvojici čísel.

Stáhnout
 Soubor:  RG Led driver_board.jpg
 Velikost:  250.69 kB
 Staženo:  109 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3302

PříspěvekZaslal: čt červenec 18 2019, 14:15    Předmět: Citovat

Neutíká to někde kolem dolního Mosfetu?
Zkus to změřit.

Podobný displej (ale jen jednobarevný) jsem dělal staticky s 74HC595 a ULN2803
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt červenec 18 2019, 14:19    Předmět: Citovat

V programu bys měl mít nejdřív zhasnutí číslice, pak nastavení nové hodnoty a teprve pak číslici rozsvítit.

digit(0);
segments(hour1);
digit(1);
delay(tempo);

Tak jak to máš, se na nově rozsvícené číslici zobrazí nejdřív to, co bylo na předchozí a pak se to změní na to, co tam má být.
Ale to se týká jen prosvětlování do sousední číslice, ne přes všechny, jak to dělá tobě. To bych viděla spíš na problém těch sériových MOSFETů, to zapojení se mi vůbec nelíbí. Předpokládám, že signály R a G jsou PWM výstupy a jsou tam pořád, i na číslicích, co nemají svítit. A přes ty kilový odpory mezi S a G horních tranzistorů (a možná i nějaký parazitní kapacity) se ty neaktivní číslice prosvětlují. Čistější by bylo dát tam jen jeden MOSFET a před něj AND hradlo.

Edit: Zkus ty 1k odpory horních tranzistorů přepojit na zem, ne na S (mimochodem 1k je zbytečná zátěž, stačí 10k). A případně ještě dát na drainy toho spodního dvojitého tranzistoru pull-upy na + (třeba taky 10k). To by mělo ty horní tranzistory spolehlivě zavřít, když bude zavřený ten spodní.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3302

PříspěvekZaslal: čt červenec 18 2019, 14:30    Předmět: Citovat

A co dole řídit Mosfetem znak a nahoře u ULN řídit Mosfetem PWM?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Darthy



Založen: Jan 15, 2008
Příspěvky: 187
Bydliště: Olomouc

PříspěvekZaslal: čt červenec 18 2019, 14:30    Předmět: Citovat

lesana87 napsal(a):
a) V programu bys měl mít nejdřív zhasnutí číslice, pak nastavení nové hodnoty a teprve pak číslici rozsvítit.

b)...Předpokládám, že signály R a G jsou PWM výstupy a jsou tam pořád, i na číslicích, co nemají svítit. A přes ty kilový odpory mezi S a G horních tranzistorů a nějaký parazitní kapacity se ty neaktivní číslice prosvětlují. Čistější by bylo dát tam jen jeden MOSFET a před něj AND hradlo.


a) zkoušel jsem, nefunguje - žádná změna

b) PWM řídí všechny číslice stejnou barvou, takže jsou tam pořád, ale uzemňuji ty PWM mosfety pro jednotlivé číslice zvlášť, takže dvojici PWM mosfetů pro R a G uzemním tím jedním (otevřeným) mosfetem pokud chci aby svítila, naopak, když ne. Tzn. pokud chci aby mi svítila jen první číslice poslední (digit) mosfety ostatních číslic jsou prostě zavřené (měly by). Což mě přivádí k prvnímu příspěvku od Cowley.

Cowley napsal(a):
Neutíká to někde kolem dolního Mosfetu?
Zkus to změřit.


Mám stejný podezření ale dělám poprvé s mosfety a nevím jak to potvrdit... Embarassed Jak to můžu změřit, resp co přesně mám změřit?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt červenec 18 2019, 14:46    Předmět: Citovat

Darthy napsal(a):

Tzn. pokud chci aby mi svítila jen první číslice poslední (digit) mosfety ostatních číslic jsou prostě zavřené (měly by). Což mě přivádí k prvnímu příspěvku od Cowley.

No zavřené jsou ty spodní, ty jsou jasné, ale ty horní nemusí být. Když máš třeba na G +5V a na R 0V, tak ty Source horních transitorů jsou na napětí 2,5V (přes ty 1k odpory) a na Gate toho zeleného je +5V - je nejspíš otevřený a přes to 1k se ta číslice trochu prosvětlí. Zkus udělat tu úpravu, co jsem ti napsala v editu předchozího příspěvku. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Darthy



Založen: Jan 15, 2008
Příspěvky: 187
Bydliště: Olomouc

PříspěvekZaslal: čt červenec 18 2019, 14:58    Předmět: Citovat

Cowley napsal(a):
A co dole řídit Mosfetem znak a nahoře u ULN řídit Mosfetem PWM?

To mi přijde komplikovanější, pokud "dole" myslíš na katodě LED, tak tam je dvojnásobek výstupů (jeden pro červenou druhý pro zelenou), anoda je společná pro LED pásek, tak mi přijde snadnější ovládat znak na anodách. A PWM jednotlivých barev na katodách.

lesana87 napsal(a):
Edit: Zkus ty 1k odpory horních tranzistorů přepojit na zem, ne na S (mimochodem 1k je zbytečná zátěž, stačí 10k). A případně ještě dát na drainy toho spodního dvojitého tranzistoru pull-upy na + (třeba taky 10k). To by mělo ty horní tranzistory spolehlivě zavřít, když bude zavřený ten spodní.
Myslíš to takhle? (příloha)

EDIT
lesana87 napsal(a):
No zavřené jsou ty spodní, ty jsou jasné, ale ty horní nemusí být. Když máš třeba na G +5V a na R 0V, tak ty Source horních transitorů jsou na napětí 2,5V (přes ty 1k odpory) a na Gate toho zeleného je +5V - je nejspíš otevřený a přes to 1k se ta číslice trochu prosvětlí. Zkus udělat tu úpravu, co jsem ti napsala v editu předchozího příspěvku.


Tohle dává smysl Smile vyzkouším.



RG Led driver_f1.jpg
 Komentář:
 Velikost:  263.13 kB
 Zobrazeno:  119 krát

RG Led driver_f1.jpg



RG Led driver_board_f1.jpg
 Komentář:
 Velikost:  283.61 kB
 Zobrazeno:  93 krát

RG Led driver_board_f1.jpg


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt červenec 18 2019, 15:06    Předmět: Citovat

Ano, přesně tak. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Darthy



Založen: Jan 15, 2008
Příspěvky: 187
Bydliště: Olomouc

PříspěvekZaslal: pá červenec 19 2019, 12:51    Předmět: Citovat

Tak jsem udělal dvě nové desky, a vypadá že to pomohlo, ačkoliv to stále mírně stínuje, tak při 12V zanedbatelně, na fotce to vypadá sice hůř, ale když před to dám mléčné sklo, nebo folii, tak to bude dobrý. Díky


dips.jpg
 Komentář:
 Velikost:  209.1 kB
 Zobrazeno:  61 krát

dips.jpg


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: pá červenec 19 2019, 13:00    Předmět: Citovat

Teď ti to stínuje jen do sousední číslice, máš tam to zhasínání než přepneš anody, jak jsem ti psala na začátku?

kód:

  digit(0);
  segments(hour1);
  digit(1);
  delay(tempo);

  digit(0);
  segments(hour2);
  digit(2);
  delay(tempo);

  digit(0);
  segments(minute1);
  digit(3);
  delay(tempo);

  digit(0);
  segments(minute2);
  digit(4);
  delay(tempo);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Darthy



Založen: Jan 15, 2008
Příspěvky: 187
Bydliště: Olomouc

PříspěvekZaslal: pá červenec 19 2019, 14:29    Předmět: Citovat

To jsem pro jistotu dopsal, ale to stejné jsem napsal pro segmenty, před každým cyklem je vynuluji, trochu se to zase zlepšilo. Akorát mi teď blbne jeden segment, prosvítá nějak moc... To už asi doladím. Díky za pomoc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: pá červenec 19 2019, 14:36    Předmět: Citovat

Není zač. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Poradna Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.53 sekund