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).
Prepínač digitálneho signálu.
Moderátor: Moderátoři
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šší.
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));
};
};
};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
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.

A kutilmile - nelituju tě
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.
Č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 84 x
