Stránka 3 z 4
Napsal: 20 říj 2023, 20:44
od judeware
Tazetel nemá v oblibě I²C.
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).
Napsal: 21 říj 2023, 03:50
od Valdano
danhard píše:V tom případě si tam dej třeba 4x 74HCT157

4 x
74HCT157 třeba nějak takto.
Napsal: 21 říj 2023, 08:19
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.
Napsal: 22 říj 2023, 03:32
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šší.
Napsal: 22 říj 2023, 06:45
od danhard
Proboha a proč by jsi Arduinem dělal nějaký přepínač, když tam můžeš naprogramovat celý úkol ?
A na displej to vysypeš přes 74HC595, nebo 74HC4094 třemi dráty

Napsal: 22 říj 2023, 13:37
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));
};
};
};
Napsal: 22 říj 2023, 14:16
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

Napsal: 22 říj 2023, 14:33
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.

Napsal: 22 říj 2023, 15:27
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 ?
Napsal: 22 říj 2023, 15:56
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?

Napsal: 22 říj 2023, 16:41
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 ...
Napsal: 22 říj 2023, 17:02
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

Napsal: 22 říj 2023, 17:09
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.
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.
Napsal: 22 říj 2023, 17:17
od EKKAR
Napsal: 22 říj 2023, 20:34
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.