Prepínač digitálneho signálu.

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
judeware
Příspěvky: 2018
Registrován: 04 srp 2009, 00:00
Bydliště: okres Písek

#31 Příspěvek od judeware »

Tazetel nemá v oblibě I²C. :oops:

Nádherně by to šlo řešit šesti PCF8574 a signály SCL & SDA sdílet oběma MCU (mají-li aspoň dva vývody typu open collector). Přepínací obvod by byl třeba jen jeden (pro přepínání vstupů A0, A1, A2 jedním, či druhým MCU; PCF8574 reaguje na celkem osm slave adres).
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#32 Příspěvek od Valdano »

danhard píše:V tom případě si tam dej třeba 4x 74HCT157 :D

4 x 74HCT157 třeba nějak takto.
Přílohy
prepinac13.png
prepinac13.png
Uživatelský avatar
kutilmil
Pod dozorem moderátorů
Pod dozorem moderátorů
Příspěvky: 4204
Registrován: 01 lis 2008, 00:00
Bydliště: Skalica

#33 Příspěvek od kutilmil »

TO Vladano: Presne tak som to urobil, len som tam použil 74HC257. Ináč keď rád kreslíš ako by si zostavil riadiaci obvod na prepínanie displejov? Ideálne (3sekundy display č.1,) (0,5s impulz do E na zatemnenie)(3sekundy display č.2) a zasa zatemnenie a zasa to isté dokola.
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#34 Příspěvek od Valdano »

1. Můj nick v této diskusi není Vladano, ale Valdano podobně jako se bývalý argentinský fotbalista nejmenuje Jorge Vladano, ale Jorge Valdano.

2. Tohle bych řešil špíš Arduinem třeba verzí Nano. Doporučoval bych se to naučit. Není to zas tak složité. Níže je jednoduchý program, který by to zvládl. Použité digitální piny 2 a 3. Pin 2 ovládání E a pin 3 přepínání mezi MCU1 a MCU2.

Kód: Vybrat vše

#define PIN_ZATEMNENI  2
#define PIN_PREPMCU    3

#define MCU1           LOW
#define MCU2           HIGH
#define TMA            HIGH
#define ZOBRAZ         LOW

#define STAV_TMA       1
#define STAV_MCU       2

int mcu = 0;
int stv = 0;
unsigned long csz = 0;
unsigned long tck = 0;

void setup()
{
  pinMode(PIN_ZATEMNENI, OUTPUT);
  pinMode(PIN_PREPMCU, OUTPUT);
  digitalWrite(PIN_PREPMCU, MCU1);
  digitalWrite(PIN_ZATEMNENI, ZOBRAZ);
  csz = millis();
  mcu = 1;
  stv = STAV_MCU;
};

void loop()
{
  tck = millis();
  switch (stv) {
    case STAV_TMA:
      if (tck - csz > 500) {
        // po uplynuti 500 ms zmenit MCU a zobrazit
        if (mcu == 1) {
          mcu = 2;
          digitalWrite(PIN_PREPMCU, MCU2);
        } else {
          mcu = 1;
          digitalWrite(PIN_PREPMCU, MCU1);
        };
        digitalWrite(PIN_ZATEMNENI, ZOBRAZ);
        csz = tck;
        stv = STAV_MCU;
      };
      break;
    case STAV_MCU:
      if (tck - csz > 3000) {
        // po uplynuti 3000 ms zatemnit
        digitalWrite(PIN_ZATEMNENI, TMA);
        csz = tck;
        stv = STAV_TMA;
      };
      break;
  };
};

3. Řídící obvod bez programování jen velmi hrubým odhadem viz přiložený obrázek, ale nejsem jist nakolik to bude funkční. Spíš bych doporučoval to Arduino Nano, se kterým je to jednodušší.
Přílohy
casovac_500ms_3s.png
casovac_500ms_3s.png
Uživatelský avatar
danhard
Příspěvky: 6646
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#35 Příspěvek od danhard »

Proboha a proč by jsi Arduinem dělal nějaký přepínač, když tam můžeš naprogramovat celý úkol ? :roll:

A na displej to vysypeš přes 74HC595, nebo 74HC4094 třemi dráty :D
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#36 Příspěvek od Valdano »

Řešení s 74HC595 nebo 74HC4094 a třemi dráty to už nechávám na někom jiném kdo bude ochoten Kutilmilovi také napsat hotový příklad pro Arduino. Kutilmil jak už sám psal to naprogramovat neumí a tudíž je potřeba to napsat kompletní tj. pouhé náznaky pro něj zřejmě budou nedostačují. Ono je vůbec otázkou jestli půjde do jakéhokoli řešení přes Arduino apod. nebo jestli spíš raději nepoužije ten dříve uvedený bastl jen s několika obvody bez programování.

Podle toho co Kutilmil psal už ten přepínač udělal z obvodů 74HC257, akorát mu chybí to řízení a k tomu je jednodušší Arduino Nano než složit to z obvodů.

Jako náhrada toho přepínače s tím, že by byly zachovány 74HC573, které dle dříve uvedeného Kutilmil už má zapojeny k těm segmentovkám by se dalo použít Arduino Mega 2560, které má dostatek digitálních pinů, aby se to všechno dalo zrealizovat jen přes Arduino. Rozložení pinů na desce Arduina viz přiložený obrázek. Níže je zdroják pro Arduino Mega 2560.

Doba zatemnění i přepínání mezi MCU1 a MCU2 je uvedena na začátku zdrojáku jako definice DOBA_ZATEMNENI a DOBA_PREPMCU přičemž čas je v ms. Pokud by byla potřeba změna některého z pevně definovaných časů při ladění pak stačí změnit hodnotu v definici a znovu přeložit a naprogramovat Arduino. Toto je minimalistická verze, která předpokládá, že se časy odladí napevno.

Pokud by bylo potřeba udělat časy nastavitelné za chodu Arduina dalo by se to řešit dvěma potenciometry zapojenými na dva Analogové vstupy Arduina a pak by se daly časy zatemnění i přepínání mezi MCU1 a MCU2 plynule měnit za chodu v určitém předdefinovaném rozmezí, ale taková potřeba nebyla definována tj. zatím předpokládám výše zmíněné použití pevně definovaných časů.

Kód: Vybrat vše

#define STAV_TMA       1
#define STAV_MCU       2
#define DOBA_ZATEMNENI 500
#define DOBA_PREPMCU   3000

int i = 0;
int mcu = 0;
int stv = 0;
int zobr = 0;
unsigned long csz = 0;
unsigned long tck = 0;

void setup()
{
  // 39 digitalnich pinu pro vstupy a vystupy prepinace
  // z toho
  // 13 (3 az 15) pro vystupy prepinace na displej
  // 13 (22 az 34) pro vstupy prepinace z MCU1
  // 13 (35 az 47) pro vstupy prepinace z MCU2
  for (i=3; i<16; i++) pinMode(i, OUTPUT);
  // pinMode(i, INPUT) pro piny 22 az 47 neni potreba volat,
  // protoze digitalni vstupy to maji jiz implicitne nastaveno
  csz = millis();
  mcu = 1;
  zobr = 1;
  stv = STAV_MCU;
};

void loop()
{
  tck = millis();
  switch (stv) {
    case STAV_TMA:
      if (tck - csz > DOBA_ZATEMNENI) {
        // po uplynuti DOBA_ZATEMNENI v ms zobrazit
        if (mcu == 1) {
          mcu = 2;
        } else {
          mcu = 1;
        };
        zobr = 1;
        csz = tck;
        stv = STAV_MCU;
      };
      break;
    case STAV_MCU:
      if (tck - csz > DOBA_PREPMCU) {
        // po uplynuti DOBA_PREPMCU v ms zatemneni
        zobr = 0;
        csz = tck;
        stv = STAV_TMA;
      };
      break;
  };
  if (zobr == 0) {
    // zatemneno
    for (i=3; i<16; i++) digitalWrite(i, LOW);
  } else {
    // zobrazeno
    if (mcu == 1) {
      // 13 (3 az 15) pro vystupy prepinace na displej
      // 13 (22 az 34) pro vstupy prepinace z MCU1
      for (i=3; i<16; i++) digitalWrite(i, digitalRead(i + 19));
    } else {
      // 13 (3 az 15) pro vystupy prepinace na displej
      // 13 (35 az 47) pro vstupy prepinace z MCU2
      for (i=3; i<16; i++) digitalWrite(i, digitalRead(i + 32));
    };
  };
};
Přílohy
Arduino_Mega_2560_pinout.jpg
Rozložení pinů na desce Arduino Mega 2560
Rozložení pinů na desce Arduino Mega 2560
Naposledy upravil(a) Valdano dne 22 říj 2023, 14:18, celkem upraveno 3 x.
Uživatelský avatar
danhard
Příspěvky: 6646
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#37 Příspěvek od danhard »

Valdano píše:Jako kompletní náhrada toho přepínače by se dalo použít Arduino Mega 2560, které má dostatek digitálních pinů, aby se to všechno dalo zrealizovat jen přes Arduino.

Opakuji, že je to hovadina, jelikož to Arduino může dělat celou tu funkci a není potřeba nic přepínat.
Ale to kutimil neřekl, co přesně chce realizovat a s čím :roll:
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#38 Příspěvek od Valdano »

Hned na první stránce v tomto tématu je od Kutilmila obrázek viz níže. V něm je jasně zakresleno, že tam má 6 kusů segmentovek a také už tam má připojeno 6 x 74HC573 a také tam má dva MCU, ale ty podle mého názoru on neprogramoval, protože jak už tu sám uvedl tohle on prostě neumí obecně. Zatím podle zadání chce řešit jen ten obdélník mezi tím a nic jiného. Neřeším tady, že to jde jinak. To už bylo zmíněno v předchozí častí diskuse, ale Kutilmil to prostře zatím jinak řešit nechce, a to beru jako základ. Když to jinak nechce tak jsem tu uvedl možnosti jak by to šlo řešit s tím co už tam má a nerozváděl jsem tu možnosti jak to celé včetně těch 74HC573 zahodit a udělat jinak.

Samozřejmě, že existují jiné možnosti, ale ty prostě nejsou aktuální, protože podle toho co zatím Kutilmil napsal je aktuální to řešení s přepínáním 13-ti výstupů na 6x74HC573 z 2x13 vstupů ze dvou MCU a nic jiného a z toho jsem vycházel u toho příkladu s Arduinem Mega 2560. Teprve pokud Kutilmil uvede, že to řešení chce změnit na jiné konkrétní tak to bude aktuální, ale jinak to nemá smysl, protože jak už jsem psal třeba Kutilmil ani vůbec nestojí o kompletní řešení přes jakýkoli procesor, který bude potřeba programovat vzhledem k tomu, že je to pro něj asi více méně "nesrozumitelný blackbox".

Takže možná to bylo stejně zbytečné uvádět tu jakýkoli příklad a Arduinem jelikož Kutilmil spíš asi preferuje řešení se samostatnými obvody, aby se vyhnul jakékoli potřebě cokoli programovat. Řešení bez nutnosti cokoli programovat jsem tady už nakreslil jednak přepínač s obvody 4 x 74HCT157 a poté co zde Kutilmil uvedl, že už si postavil obdobný přepínač z obvodů 74HC257 a ptal se na obvod bez programování pro již zmíněné řízení časování tak jsem zde doplnil schéma s obvodem 555, 74112 a 74164 jako doplněk k tomu přepínači, který už si sám postavil. Pokud to Kutilmilovi takto vyhovuje a preferuje raději řešení s obvody bez programování tak to je jeho věc.

Obrázek
Uživatelský avatar
danhard
Příspěvky: 6646
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#39 Příspěvek od danhard »

kutilmil píše: Jedná sa o 2 kusy stopiek.

Valdano, to jsi takovej amatér, že bys neuměl dát do Arduina 2 kusy stopiek ?
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#40 Příspěvek od Valdano »

Samozřejmě, že uměl, ale schválně to nechávám na vás. Já už jsem tu dal možnosti, které aktuálně považuji za relevantní a zatím jsem za to sklidil jen kritiku. No tak když umíte tak hezky kritizovat tak tu také přiložte trochu víc ruku k dílu a napište kompletní příklad pro Arduino pro tento účel vy sám. To jistě zvládnete a nebo ne? :wink:
Uživatelský avatar
EKKAR
Příspěvky: 35012
Registrován: 16 bře 2005, 00:00
Bydliště: Česká Třebová, JN89FW21

#41 Příspěvek od EKKAR »

Tam v podstatě není potřeba nic jinýho, než diodama ve výstupech oddělený hradla libovolný logiky, který lze zapojit jako logickou úrovní zablokovatelnej opakovač/invertor úrovně. Hradlo NAND má na svým výstupu log.1 vždycky, když má aspoň na jednom vstupu log.0, zatímco když je na tom vstupu log.1, výstup invertuje stav dalšího vstupu, takže když vezmu dvouvstupový hradlo a na jeden vstup přivedu podle potřeby volitelnou logickou úroveň a na druhej jeden funkční bit toho přenášenýho signálu, dokážu volbou mezi log.0 a log.1 na ovládacím vstupu ovlivnit, jestli mi budou tím hradlem impulsy = změny logickejch úrovní procházet, nebo jestli se hradlo zablokuje v jedný výstupní úrovni. Stejně tak když vezmu hradla s trojstavovým výstupem = přivedením ovládací úrovně na příslušnej vstup zablokuju všecky výstupy ve stavu vysoký imprdelance a když budu mít takhle paralelně ke sběrnici připojenejch X budičů, můžu si ovládáním vybírat ty, který data ze svejch vstupů pustí dál a který se bloknou. Na to nepotřebuju žádný programování MCU ...
Nasliněný prst na svorkovnici domovního rozvaděče: Jó, paninko, máte tam ty Voltíky všecky...
A kutilmile - nelituju tě :mrgreen: :mrgreen: !!!
Uživatelský avatar
danhard
Příspěvky: 6646
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#42 Příspěvek od danhard »

Především je zapotřebí nakopat kutimila do zadku, že to dělá tak uboze a snižuje tím úroveň tohoto fóra :D
Uživatelský avatar
Valdano
Příspěvky: 3118
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#43 Příspěvek od Valdano »

Kutilmil, jak už tady psal výše, si přepínač už sám postavil ze 4 kusů 74HC257. Jeden kus 74HC257 je multiplexer s třístavovými výstupy a v podstatě nahrazuje 4 dvojice hradlových vstupů s ovládáním přepínání na 4 výstupy. 4 kusy 74HC257 je celkem 2 x 16 vstupů na 1 x 16 výstupů a z toho Kutilmil využil 2 x 13 vstupů na 1 x 13 výstupů. Takže to samotné přepínání už má Kutilmil v podstatě vyřešeno.

Akorát ještě chtěl navíc doplnit to řízení časování a tak jsem mu tady výše doplnil schéma s obvodem 555, 74112 a 74164 jako doplněk k tomu přepínači, který už si sám postavil.

To co jsem tady psal ohledně Arduina jsem uvedl navíc a původně spíš k tomu časování a samozřejmě uznávám, že ten další zdroják pro přepínání co jsem tu pak ještě přidal byl v podstatě úplně zbytečný, ale když už tu je tak ho mazat nebudu, ale nic dalšího k tomu už také nebudu psát i když se tady danhard snažil provokovat. :D

Jinak pokud jde o to řešení, které si zvolil Kutilmil tak to zkrátka beru tak, že někdo má raději řešení s různými obvody bez programování než aby cokoli programoval což je v duchu tohoto serveru a sekce Poradna není nijak vyhrazena jen pro řešení s programováním. U tohoto řešení jde v podstatě o elektro bastlení což by na tomto serveru neměl být problém.
Naposledy upravil(a) Valdano dne 22 říj 2023, 17:19, celkem upraveno 1 x.
Uživatelský avatar
EKKAR
Příspěvky: 35012
Registrován: 16 bře 2005, 00:00
Bydliště: Česká Třebová, JN89FW21

#44 Příspěvek od EKKAR »

danhard píše:Především je zapotřebí ...
PŠŠŠŠT, to se tady nesmí vykřikovat tak nahlas !!!! :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Nasliněný prst na svorkovnici domovního rozvaděče: Jó, paninko, máte tam ty Voltíky všecky...
A kutilmile - nelituju tě :mrgreen: :mrgreen: !!!
Uživatelský avatar
kutilmil
Pod dozorem moderátorů
Pod dozorem moderátorů
Příspěvky: 4204
Registrován: 01 lis 2008, 00:00
Bydliště: Skalica

#45 Příspěvek od kutilmil »

Dík Valdano a prepáč mi skomolenie mena. No ohľadom programovania: Je to ako píšeš. Ja by som rád naprogramoval nový kontroler a bolo by všetko vyriešené ale jednoducho nikdy som do programovania neprenikol a neviem to. Jediné čo viem naprogramovať a trúfnem si povedať že tam viem všetko je siemens LOGO!
Čo sa týka riadiacej dosky: Než si mi odpísal tak som spravil to čo posielam. Je v nej naviac zakomponované aj ovládanie pomocou 12V a reset stopiek. Neviem či to je zrozumiteľné. Keď tak kukni.
Přílohy
eb schema.pdf
(105.92 KiB) Staženo 85 x
Odpovědět

Zpět na „Poradna“