Diskuze - danyk.cz

Vlákno z kategorie: Hlavní diskuze
Celkem 23 odpovědí.


7.01.2017 (14:53:51) K # IP X
Martin12:
Potřebuji v STM32F103 v průběhu programu rychle změnit konfiguraci mezi vstupem a výstupem daného pinu, rozhodl jsem se tedy zde upustit od STDPeriphal knihovny a zapsat to přímo přes registry, ale nedaří se mi, mohl by mi někdo prosím napsat příklad řešení ? Díky
PS: moje řešení bylo:
GPIOB->CRL &= 0x8000000;
GPIOB->ODR &= 0x4000;
Pro nastavení vstupu&PullUP a obdobně pro výstup
V čem jsem udělal chybu ? díky
7.01.2017 (16:09:37)  # IP X
VroutekB:
Když potřebuješ rychle přepínat vstup a výstup (není mi ani za pyču jasný na co), tak použij OPENDRAIN mód ne?

Krom toho, proč se snažíš shodit do nuly všechny bity registru CRL kromě bitu 27, to samý ODR registr (bit 15 zůstane na původní hodnotě)?

Já ti povím, kde máš přesně problém: Nemáš nejmenší ponětí, jak fungujou bitový masky a logický funkce. Fascinující pro mě je, že člověk, který tyhle věci neví, se dostane k programování ARMů.
https://www.youtube.com/watch?v=PvP2ehmq2wo
**34
7.01.2017 (16:33:50)  # IP X
Martin12:
Nehodlám řešit co umím a co ne, problém byl, že jsem při nulování těhto bitů zapoměl otočit bit GPIOB->CRL &= ~0x8000000; abych nemusel zapínat pullup v ODR, udělal jsem opačný vstup (použiji pull↓)
Toto přepínání používám v multiplexu.
7.01.2017 (16:35:27)  # IP X
Martin12:
Plus koukám, že jsem zde napsal chybu, do ODR jsem zapisoval 0x40 ne 4000 (pin 7)
7.01.2017 (16:46:14)  # IP X
VroutekB:
No tak to by mě zajímalo, co multiplexuješ, že potřebuješ přepínat IN/OUT. Jsem jedno ucho...
7.01.2017 (17:01:22)  # IP X
Martin12:
Multiplexuju 20x50 "LEDek"[1] pro spektrak a jelikož 50 není násobkem 15ti (nemam přístup k 1 pinu z portu) a 5 pinů tudíž zbývá, tak mi přišlo zbytečné zapojovat 5 ovládacích tlačítek (↑→← ↓ a 'OK') samostatně, když je můžu zmultiplexovat k těm LEDkám

[1] Nejsou to přímo LEDky, nýbrž nějaké digitální vstupy ovládající LEDky, které mají digitální 1b vstup s předepsanou frekvencí, proto potřebuji co nejrychlejší přepnutí
7.01.2017 (17:13:35)  # IP X
VroutekB:
Nějak tvému multiplexu nerozumím.
Na přimultiplexování tlačítek nepotřebuješ přepínat IN/OUT, stačí jeden vstupní pin navíc.
7.01.2017 (17:32:00)  # IP X
Martin12:
Jak to myslíš ? Moje zapojení je následující:
Přes tranzistory se mi spínají spojené katody po 15ti LED (10LED u vrchu a 10LED+5Ks TL u vrchu posledního sloupce) + jednotlivých 15 Anod je spínáno pomocí Portu B (PB0->PB14) přičemž jednotlivé sloupce mají navíc zmultiplexovaný "enable" vstup, určující do kterého sloupce momentálně zapisuji. Stejný MCU (proč osazovat více ?) ovládá i další obvody, které jsou v zařízení -> Proto jsou potřeba směrová tlačítka a potvrzovací tlačítko + enkodér.
=> Přepínání IN/OUT používám u posledních 5ti pinů portu B, kde kontroluji zda je v LOG1/LOG0 který je přiveden z pařičného "katodového" tranzistoru.
7.01.2017 (17:49:39)  # IP X
VroutekB:
Pořád mi připadá, že se nějak neumíš vymáčknout a cpeš mi k tomu něco, na co jsem se neptal.
Máš matici 20x50 LED nebo 20x50 multiplex? Ani jedno totiž moc nesedí s tvým popisem. Multiplex je matice mající sloupce a řádky. Definuj jednoznačně, co budí řádky a co sloupce matice. Tzn napěříklad mám matici 20 řádků 50 sloupců. Tzn 70 vývodů matice. A teď chci slyšet, jak 15 pinů portu B jsi namnožil na 70 vývodů té matice.
Domnívám se, že něco děláš blbě, když kvůli tlačítkům v multiplexu přepípnáš něco mezi vstupy a výstupy.
To proč potřebuješ tlačítka, na to jsem se tě neptal. Že je potřebuješ je zde dostatečná informace a řikám ti, že tlačítka jdou přimultiplexovat i bez přepínání IN/OUT.
7.01.2017 (18:02:07)  # IP X
VroutekB:
To jen abychom si rozuměli: Matice multiplexovaná po sloupcích, vždy jeden z nich aktivní log1: https://u03.imgup.net/IMG_4454s31f4.jpg
1 pevně definovaný vstup ti stačí.
7.01.2017 (19:06:49)  # IP X
Martin12:
Mam to zapojené asi takto http://www.imgup.cz/image/L17s (zběžně nakreslené schéma)
7.01.2017 (19:17:07)  # IP X
Martin12:
Jen ještě dodám, že z celého STM mi zbyde pouze SWD a SWClk, které nechci obsazovat kvůli programování.
7.01.2017 (19:24:22)  # IP X
VroutekB:
Z toho schématu je poznat úplné ale naprosté hovno, jak je to zapojené. Nebo to z toho někdo chápete? Já teda ne. Fakt mi neni jasný, jak se 15 pinů z MCU v tomhle zapojení přidělá k matici 50x20.

A ad Q1 až Q8: Už si někdy slyšel o starém dobrém ULN2803? Nebo že dokonce se to dělá i se sériovým vstupem? (třeba TPIC6C595... atd)
7.01.2017 (19:38:57)  # IP X
Martin12:
Není tam matice 50x20 ale 20x 50LED rozdělených po oněch 15ti (Ve schématu: Na PORTB je přivedeno 15LED [viz konektor s piny LED0~LED14], které jsou multiplexovány pomocí anod vedoucích přes Q1-4 [viz také label-y ANODAxy /x=číslo sloupce 1-20; y=číslo anody 1-4] a abych anod neměl dohromady 80, tak jsou rozdělovány pomocí 3 stavových bufferů, které si postupně volím [výše nazívané sloupce => 1sloupec = matice 15x4].
7.01.2017 (20:22:22)  # IP X
Martin12:
Mam ještě jeden takovej dotaz, když bych chtěl číst hodnotu "Volume" z potenciometru, je vhodné udělat to způsobem, že si přečtu aktuální hodnotu na vstupu potencíku a na jeho výstupu v jednu chvíli, to porovnám a mam tu hodnotu nebo to bude způsobovat rušení ? Jak by jste to řešili Vy ?
7.01.2017 (20:43:20)  # IP X
VroutekB:
Pořád jsem z toho nějaký jalový (a začínám mít pocit, žes to vyřešil tím nejblbějším možným způsobem), ale zkusím to:
sloupec je dlouhý 50 a dělený na 4 úseky 15 15 15 a 5. A tohle je tam krát 20 řádků.
Čili přivedeš signály na 15 LEDek z jednoho sloupce, zvolíš úsek 1-4 a chvíli svítíš.
Potom pokračuješ na druhý řádek .... atd až do 20tého řádku.

Čili multiplexuješ na 1/80, tedy jednu osmdesátinu a potřebuješ k tomu celkem 15 (data) + 20 (řádek) + 4 (sekce slooupce) drátů, tj celkem 39 drátů. **18
Ty si dobrý šulín s prominutím, jaký od těch LEDek očekáváš jas? Uvážím-li, že pulsní proud LEDkou můžeš mít nejvýš tak 100mA, bude průměrný proud něco nad 1mA na LEDku. To ti stačí? Pokud tomu nerozumíš, znamená to, že LEDky budou svítit na zhruba 1/16 svého jasu a ještě k tomu potřebuješ:
39 GPIO
20 kusů 74125
80 tranzistorů
95 rezistorů

Co když ti povím, že se to celé dá udělat takto:
Poměr multiplexu 1/10, průměrný proud LED až 10mA (tj, pokud nechápeš, tak celkový odběr až 10A)
6 GPIO
13 kusů nějaký jiný vhodný IO
100 rezistorů
10 PMOS tranzistorů
2 kusy nějaký další vhodný logický IO
A ne, nestojí to výrazně víc, za nějaké drahé nedostupné IO.

Takže co ty na to?
7.01.2017 (20:48:26)  # IP X
Martin12:
Zní to lákavě, ale pokud těmi jinými IO nemyslíš něco jako posuvný registr, dekodér 1z10(např) či přímo driver pro led (třeba I2C) tak jsem fakt šulin a nevím jak :(
7.01.2017 (21:28:14)  # IP X
VroutekB:
Ano, myslím tím posuvný registry s výkonovýma výstupama. Protože jinak se to dělat nedá. Pro praktický použití s LED nemá multiplex větší jak 1/16 smysl, protože jde pak jas do háje a pulsní proud LEDkou být větší nemůže.
A pardon, GPIO to sežere 7, zapomněl sem, že ty 6C595 nemají transparentní latche. Layout desky na tohle je víc, než triviální.

https://p53.imgup.net/IMG_4455s3578.jpg

Pokud ti není jasný, jak to řídit, tak ROW3:0 je binární číslo určující řádek 0..9, CLK a DATA zapojit na SPI a DMA nakázat práci. Pak už stačí jen timer interrupt s frekvencí např 500Hz (50fps), který ti zajistí refresh zobrazení.

EASY AS FUCK, UH? **27

Pozn.: Takhle se to řeší i v komerčně robených věcech. Mám tu třeba textovou tabuli z LED matic, taky něco okolo stovky LED na řádek, 32 řádků (dva samostatné multiplexy 1/16). Spínání anod je tam vtipně řešené NMOSy, pač je to staré a PMOS vhodný na ty ampéry tenkrát nebyl dostupný, a taky ty BUZ11 tam spínají 5V ale gejty se krmí z 12 nebo 15V zdroje.
7.01.2017 (21:33:23)  # IP X
VroutekB:
Ještě drobný postřeh: A když si vytáhneš z těch posuváků i /G (output enejbl), můžeš to řídit vhodným způsobem i tak, že bude možné regulovat jas jednotlivých LED. Asi to zabere nějaký ten CPU horsepower navíc, ale šlo by to.
7.01.2017 (22:08:48)  # IP X
VroutekB:
Tak sem se drobet zamyslel: Asi by šlo udělat minimálně 4bity jasu na LED. (nejspíš však víc).
7.01.2017 (22:11:53)  # IP X
Martin12:
Mno, myslím že se jde předělávat návrh :) Díky moc
Jen ještě, co to čtení toho volume ? Jestli tedy ještě můžu :)
7.01.2017 (22:16:12)  # IP X
VroutekB:
Hodnota z potíku se čte tak, že změříš ADC jeho výstupní napětí. Co ti na to mám říct víc?
7.01.2017 (22:59:13)  # IP X
8-bit obalka (web) :
Pro ledky jsou vhodnější posuvné registry co mají výstupy s konstantním proudem. Běžně se dělají i s 16 výstupy, třeba Macroblock MBI5026.
7.01.2017 (23:06:33)  # IP X
VroutekB:
Ano, s těmi lze samozřejmě souhlasit. Aspoň se ušetří i drobet výkon, pač půjde jít napětím na minimum (eliminují se odpory úplně)
Jméno:
Heslo:
Text: