Programovatelné hodiny (aneb: vzorová diskuse bastlířů)

Klasické bastlení z domácích zásob

Moderátor: Moderátoři

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

#46 Příspěvek od danhard »

A teď se pustím do předělávání PIP-1, PIP-2 a jeho následovníků.
Připadá mi, že je to moc složitý a moc hloupý :D
http://krapfen.cz/~nostalcomp/clite_info_cz.html
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#47 Příspěvek od tomasjedno »

danhard píše:pokud je C, tak zapiš následující hodnotu čítače modulo N
Těmi “následujícími hodnotami” jsi měl zaplněnou půlku té 74S287?
Na kolik taktů se provedla instrukce? Na 2 (7474)?
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#48 Příspěvek od danhard »

Celou 74S287, 4bity data, C a 3 bity adresa registru.
Časování už nevím, ale asi jen čtení/zápis na jeden takt, ten latch tam byl potřeba, ale nějaký zkrácení tam bylo k dispozici díky tomu předdělení.
Měl jsem na hodiny taky krystal 8kHz ve skle, ale ten byl moc velikej :D
Ovládání už bylo trochu težkopádný, musely tam být ty přepínače, logikou by tam přibylo moc materiálu.

Naposled jsem takovej kolovrátek dělal v r. 87, JS4700/2530 Jednotka pro styk se sběrnicí B1. Byla toho plná dvojdeska do ADT4700.
Byl to vyrovnávací FIFO buffer 2x8kB pro 8 bit sběrnici, která jela na 500kBps, kterou si vymyslel VÚAP, adresace, protokol, CRC a to všechno dělal kolovrátek nad dvěma 7489, které počítaly adresaci 16kB DRAM paměti a ukládaly do ní zprávy. Makal jsem na tom rok, pak jsem to ještě zjednodušil do PC-XT a pak to nikdo nechtěl, protože ETHERNET :D
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#49 Příspěvek od tomasjedno »

Aha, myslel jsem, že to rozhodnutí podle CY jsi udělal logikou vně - ale máš recht, přes tu tabulku v ROM je to jednodušší :-)
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#50 Příspěvek od danhard »

Horší to bylo s přenosem out, tam výstupní bit RAM už nebyl, tam jsem hlídal, že to šlo na 0.
Ale vyjasnilo by se to, až bych to smaloval.
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#51 Příspěvek od tomasjedno »

To chápu, že tě muselo štvát, kolik tahle jednoduchá fce sežrala hardwaru. 7425 v šuplíku nebylo?
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#52 Příspěvek od danhard »

Spadl jsi z višně ? za raného socialismu v r.80 nebylo ani 7408, ani 7432 :D
To jsem měl tabulku podporovaných brouků z RVHP a na nic jiného jsem neměl nárok.
Integráče se objednávali na 2 roky dopředu a kydž jsem si objednal MHB8080, tak mi za dva roky přišla ruská verze. Dostal jsem jich 20, nastrkal jsem to na zkoušku maďarskejch terminálů místi I8080A a za 2 roky jsem jich 90% vyhodil a dal tam zpátky Intelácký :D
Jste moc mladý :lol:

Dělám ty archaický konstrukce, protože jsem to tak dělal, nebo se to tak dalo udělat už před 50. lety a to se týká i analog a zesilovačů.

Před 15 lety jsem dělal jako spoluautor pro pana Seebachera stmívač s MOSfety, stále si myslím, že to byla díky konstruktivnímu přístupu nadčasová konstrukce, vyrábí se to pořád, určitě přes 10tis.
https://www.seebacher.de/en/products/co ... 700-x2-rdm
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#53 Příspěvek od tomasjedno »

danhard píše:Spadl jsi z višně ? za raného socialismu v r.80 nebylo ani … 7432 :D
Taky jsi mohl zvolit inverzní logiku (fyzická 1 v RAM znamená logickou 0) a ten výsledek 0000 by se zaznamenal jako 1111 a vyhodnocoval by se půlkou 7420 :-)

P.S. Já vím, po bitvě je každý generálem :lol:
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1366
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#54 Příspěvek od Ivan_Ryger »

Dobrý deň,
Posielam doplňujúce otázky.
Môj odhad zatiaľ znie nasledovne, môžem sa kdekoľvek mýliť.

a) ALU jednotku tvorí 74S287 (256x4bit) ako pamäť inštrukcií, 7489 16x4bit pamäť a jeden 4-bit záchytný register (asi 7475).
b) 74S287 má 8 adresných vstupov, z čoho 4 vstupy sú vedené ako spätná väzba z výstupov RAM,napr. pre účel aritmetických operácií.
c) RAM má 4 adresné vstupy, ktoré sú obslúžené čítačom 7493 s opakovacou frekvenciou 1.024kHz (16 adries). Adresa môže byť taktiež fixne nastavená spínačom (ISOSTAT).

d) následne delenie na minútový interval je realizovaný pomocou ALU jednotky s Vami navrhnutým modulom 16-16-16-15, čím pri prenose v najvyššom ráde vznikne pulz s opakovacou frekvenciou 1 minúta.

d) RAM má výstupy v inverznej logike. Na určovanie modula čítania my vychádza, že priamy kód je výhodný pri použitých 7400, 7420 a 7410 NAND. Z toho odhadujem, že výstupy RAM sú invertované s použitím 7404.

e) odhadujem, že pre RAM memory select bude trvalo povolený. Zatiaľ nemám doriešený /wr signál. Predpokladám, že tento bude nejako súvisieť s funkciou spínačov v kombinácii s adresnými vstupmi RAM a ALU.

f) pri týchto úvahách mi vychádza, že 5 z 8 adresných vstupov 74S287 je takto obsadených, zostávajú 3 vstupy na adresáciu a inštrukcie. Pracujem na logike spínačov a tlačítok, predpokladám, že nejakým spôsobom využívate vlastnosť, že registre časovača ON-OFF majú rovnaké modulo ako register hodiniek. No zatiaľ čo registre časovača sa inkrementujú nezávislo od chodu hodín iba tlačítkom, hodiny budú trvalo bežať.


g)Domnievam sa, že výber modula rádu čítača (jednotky min, 10-tky min, 1-tky hodín, poldne) bude mať dodatočný adresný dekodér/multiplexor (asi 7410), kde sa podľa aktuálnej adresy registra na adresnom vstupe RAM zvolí zodpovedajúci logický člen detekujúci hodnotu modulo. Cez tento multiplexor je hodnota modulo zavedená do registra C. Zatiaľ mi ale vychádza, že mám nedostatočný počet hradiel pre túto detekciu, ak vo Vašom zapojení nie je nejaká finta alebo súčiastky zospodu (napr. diódová logika)

h) Ak tomu správne chápem, tak "C" je register, ktorý používate pre aritmetický prenos do vyššieho rádu s oneskorením 1 hodinového cyklu (z registra nižšieho do registra vyššieho rádu). Tipujem, že tento register je obdobou akumulátora a je naň vyčlenený D-klopný obvod (1/2 7474).

i) pre komparátor magnitúdy 7485 predpokladám, že je potrebné podržať hodnotu porovnávaného registra (budík ON/OFF) v 4 bitoch, na čo asi slúžia dve 7474. Predpokladám, že výsledok porovnávania bude stačiť zvoliť a<b a vo výsledku hodnotu negovať v ALU.

j) Funkcia dekodéru 1-10 (7442) mi je zatiaľ nejasná. Jeden nápad bol použiť ho na multiplex displeja?

k) na fotografii vidím 4 tranzistory (3+1), očakával by som 4 tranzistory na multiplex displeja. Ten jeden tranzistor osamote tipujem, že je na kryštálový oscilátor, ak sa nepoužívajú hradlá.

S pozdravom,
Ivan
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#55 Příspěvek od tomasjedno »

Ivan_Ryger píše:f) pri týchto úvahách mi vychádza, že 5 z 8 adresných vstupov 74S287 je takto obsadených, zostávajú 3 vstupy na adresáciu a inštrukcie. Pracujem na logike spínačov a tlačítok, predpokladám, že nejakým spôsobom využívate vlastnosť, že registre časovača ON-OFF majú rovnaké modulo ako register hodiniek. No zatiaľ čo registre časovača sa inkrementujú nezávislo od chodu hodín iba tlačítkom, hodiny budú trvalo bežať.
Na toto nám už Danhard odpověděl
danhard píše:Celou 74S287, 4bity data, C a 3 bity adresa registru.
3 bity pro adresu registru té PROM stačí - má hodnoty pro 4 registry typu předdělička clocku a pro 4 registry typu minuty, hodiny, desítky hodin, půldny. To, jestli se jedná o čas hodin nebo budíku, ji nezajímá.

Ivan_Ryger píše: g)Domnievam sa, že výber modula rádu čítača (jednotky min, 10-tky min, 1-tky hodín, poldne) bude mať dodatočný adresný dekodér/multiplexor (asi 7410), kde sa podľa aktuálnej adresy registra na adresnom vstupe RAM zvolí zodpovedajúci logický člen detekujúci hodnotu modulo. Cez tento multiplexor je hodnota modulo zavedená do registra C. Zatiaľ mi ale vychádza, že mám nedostatočný počet hradiel pre túto detekciu, ak vo Vašom zapojení nie je nejaká finta alebo súčiastky zospodu (napr. diódová logika)
To je právě řešeno tou 74S287, která při adresovém vstupu CY=0 replikuje na výstupu vstupní “adresová” data a při adresovém vstupu CY=1 obsahuje vstupní “adresová” (data +1) mod N.
Ivan_Ryger píše:j) Funkcia dekodéru 1-10 (7442) mi je zatiaľ nejasná. Jeden nápad bol použiť ho na multiplex displeja?
Taky myslím že MUX.
Ivan_Ryger píše:i) pre komparátor magnitúdy 7485 predpokladám, že je potrebné podržať hodnotu porovnávaného registra (budík ON/OFF) v 4 bitoch, na čo asi slúžia dve 7474.
Já tipuji tu 7475.
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#56 Příspěvek od danhard »

Záchytný registr 7475 dělá taky inverzi 7489, zobrazují se jen 3 číslice, hodiny jedou v modulu 12h, 60 minut, nebo se na té třetí číslici zobrazuje AM/PM a den v týdnu.
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1366
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#57 Příspěvek od Ivan_Ryger »

Trochu som pokročil v náčrte schémy hodín. Zatiaľ najdôležitejšia časť logiky vyhodnocovania stavu tlačítok a logika časovača ON-OFF nie je dokončená.
Rozmýšľam, ako urobiť logiku manuálneho inkrementu /i/ a logiku času on/off /ii/.

/i/ Uvažujem nasledovne, /i/ napr. keď je stlačený spínač minúty a tlačítko inkrementu slačené, nastaví sa signál Carry na log 1 v momente, keď adresa registra RAM je totožná s adresou hodinkového registra jednotiek minút .
Ak je navyše stlačený spínač zobrazenia času ON alebo OFF, je povolený inkrement registra jednotiek minút, ktorý za iných okolností by zostával nemenný. Taktiež je povolený prenos do vyššieho rádu (nasledujúci register desiatok minút), naviazaný na prechod modulo čítača predchodzieho rádu nulou.
Najjednoduchší spôsob, ako by sa dal generovať inkrementovací pulz by bol prostredníctvom monostabilného klopného obvodu, ktorého doba kyvu by bola totožná s periódou adresácie všetkých 16 registrov (cca 1ms), čím by sa zabezpečila logická podmienka inkrementovacieho pulzu prítomného 1x počas jedného adresného cyklu pre inkrement o 1.
V takom prípade sa pridá logická 1 do Carry registra, ak je splnená logická podmienka adresy registra totožnej s adresou registra jednotiek minút. Podobne by sa postupovalo pri inkremente hodín.
Druhou možnosťou by bolo nastavenie nejakého S-R klopného obvodu do log.1 pomocou pulzu z tlačítka. Stav tohoto k.o. by bol vyčítaný pri zhode výstupu adresného čítača s adresou registra jednotiek minút.
Prosím, je táto úvaha správna alebo podobná s algoritmom, ktorý ste navrhli vy?

/ii/Spúšťanie časového spínača. Tu sa mi zdá situácia trochu zamotaná, keďže treba sekvenčne porovnávať hodnoty RAM počas aspoň 4 úplných adresných cyklov, keďže máme k dispozícii iba sériový prístup k RAM. Tu mi potom vychádza stavový automat s 8 stavmi na určenie, či aktuálny čas je zhodný alebo väčší ako čas ON, a následne či je rovný alebo väčši ako čas OFF. Pre prístup k porovnávanej hodnote pre komparátor adresy uvažujem použitie obvodu 7475, ak to bolo tak zamýšľané. Avšak, na uchovanie prechodových stavov mi vychádza podrebných 8 D klopných obvodov (ON jednotky minút, desiatky minút, jednotky hodín, desiatky hodín, OFF jednotky minút, desiatky minút, jednotky hodín, desiatky hodín), ak nie je urobené skrátenie.
Přílohy
stavovy_automat_casovaca.jpg
stavovy_automat_casovaca.jpg
nacrt_logiky_hodiniek.jpg
nacrt_logiky_hodiniek.jpg
casovanie_RAM_ALU.jpg
casovanie_RAM_ALU.jpg
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#58 Příspěvek od danhard »

Budík se hlídá jen rovnost a na přenos přes digity se používá logika přenosu čítače.
Uživatelský avatar
Ivan_Ryger
Příspěvky: 1366
Registrován: 02 bře 2005, 00:00
Bydliště: Jára Cimrman- "Uppsala, Uppsala,... tam jsem taky nebyl"

#59 Příspěvek od Ivan_Ryger »

Vyzerá to tak, že už ani mne to nemyslí.

Pochopil som, prečo postačujú len 3 tranzistory pre budenie spoločnej elektródy displejov. Keďže registre hodín uchovávajú jednotky a desiatky minút v separátnych BCD registroch a jednotky+desiatky hodín v spoločnom registri, displej jednotiek a desiatok hodín môže byť kombinovaný.

prvá vec, nad ktorou si lámem hlavu je finta zobrazovania dní v týždni.
Odhadujem, že obvod 7442 (dekodér 1 z 10, kombinačný obvod) používa na adresovanie jednotlivých segmentoviek. Tento má 4 adresné vstupy. Prepínanie zobrazovania hodiny-budík ON-budík OFF sa dá ošetriť dvomi hornými adresnými bitmi na 7442, zatiaľčo dva spodné bity obhospodária adresy jednotlivých číslicoviek 0..2 (alebo 0..3, ak uvažujem aj zobrazenie registra poldní).
Spomenuli ste, že pri zvolení zobrazenia dňa v týždni sa tento zobrazuje na segmentovkách, ktoré sú použité na jednotky/desiatky hodín. Nedarí sa mi prísť na to, akú fintu použiť, na zabezpečenie, aby pri zobrazovaní dňa v týždni sa na ostatných čísliciach nič nezobrazovalo.

Druhá vec, nad ktorou si lámem hlavu je porovnávanie hodín s registrom budíka.
Uvažujem, že obvod 7485 bude porovnávať hodnotu práve naadresovaného registra na výstupe RAM (povedzme hodinky),s hodnotou ktorá by bola zachytená v latch registri 7475 (povedzme budík ON). Komparátor 7485 má priebežný vstup stavu logickej rovnosti. Potom mi vychádza, že budem potrebovať 4 plné adresné cykly (za plný adresný cyklus považujem 16 adries registrov) RAM na to, aby som mohol urobiť individuálne porovnania jednotky minút-desiatky mnút-jednotky hodín-desiatky hodín a priebežne uchovávať stav porovnania v jednom "carry" registri, ktorý bude zavedený v spätnej väzbe komparátora 7485.

Z tohoto mi vychádza, že latch 7475 zachytí hodnotu jedného registra RAM, a zvolená adresa sa postupne mení po každom plnom adresnom cykle. Povedzme pri 1. cykle sa uloží do latch-u hodnota jednotiek minút, v 2. cykle desiatok minút, v 3. cykle hodiny, vo 4. cykle dni, a zas odznova.

Je to dobrá úvaha, alebo uvažujem zle?
Ďakujem vopred za odpoveď.
Uživatelský avatar
danhard
Příspěvky: 6638
Registrován: 05 bře 2007, 00:00
Bydliště: Jesenice u Prahy

#60 Příspěvek od danhard »

Při nastavování se vypíná +5V pro napájení příslušné sekce, aby zhasla.
Čítání hodin je modulo 12, nebo 14 půldnů v týdnu jsou dva digity, 8 segmentů.
_0 až 11 hodiny, zobrazení ale funguje do 15
_1 pondělí dopoledne
17 neděle odpoledne
dva segmenty před 1 nejvyšší segmentovky ukazují nastavení ON/OFF

Objíždí se dokola 16 registrů,
prvních 8 jede v modu čítání, čili se z adresy nečte obsah a na stejnou adresu se uloží následující hodnota.
dalších 8 registru jede v režimu srovnání, čili se načte hodnota budíku a v druhé fázi se načte odpovídající registr hodin.

Dával jsem obrázek logiky 4-místného AD převodníku, ten je jednodušší, není tam žádné nastavení a pracuje jen s 12 registry.
Je to převod s vyrovnáním náboje, měří se četnost vyrovnávacích pulzů.
https://www.ebastlirna.cz/modules/Forum ... 89_197.jpg
Naposledy upravil(a) danhard dne 02 čer 2026, 20:27, celkem upraveno 1 x.
Odpovědět

Zpět na „Zapojení ze šuplíku“