C: reverzne cykly

Pavel Hudeček edizon na seznam.cz
Středa Červenec 31 10:23:42 CEST 2024


Sedmisegmentovky v kombinaci s MCU používám často. Skončil jsem u toho, 
že segmenty zapojím na nějaký port v náhodném pořadí jak to vyjde na 
nejsnazší routování. Společný konce zapojím zas náhodně. Program pak má 
pro dané rozložení segmentů vygenerovaný písmenka a používá tabulku na 
překlad z indexu číslice na hodnotu portu, nebo index bitu.

PH

Dne 31.07.2024 v 0:02 Miroslav Šinko napsal(a):
> 1. som rad, ze sa moje riesenie s otacanim indexu pacilo
>
> 2. asi je lepsie zacat vlakno tymto, citujem "najprv napisem o co sa 
> jedna"
>
> Ked ide o to, ze plosak je optimalizovany otocenim adresovania 
> segmentov, tak v SW sa to niekde prejavit musi. Moze to byt na nizsej 
> urovni (driver, HAL), kde do toho moj "aplikacny" kod nevidi. Alebo ak 
> mam kod jednoduchy, tak si dam ten komentar a vobec si nevycitam, ze 
> robim nieco zle. No a ked som odporca komentarov a za kazdu cenu chcem 
> mam samopopisny kod, tak napr. takto.. Za zaklad pouzijem svoj priklad 
> a este zmenim MAX na CNT, aby som v podmienke cyklu pouzil < namiesto <=
>
> #define CNT_SEGMENTS   4
>
> //tu moze byt uplne lubovolne mapovanie, nielen otocenie
> unsigned char remapSegmentsDueToOptimizedPCB(unsigned char i)
> {
>     return CNT_SEGMENTS - 1 - i;
> }
>
> for(unsigned char i = 0; i < CNT_SEGMENTS; i++)
> {
>     unsigned char index = remapSegmentsDueToOptimizedPCB(i);
> }
>
> miro
>
> On 30.7.2024 21:22, Jan Waclawek wrote:
>> [preposielam]
>>
>> Ahojte,
>>
>> najprv napisem o co sa jedna. Ide o 7-segmentovy display, ktory ma 
>> DP_1000
>> (3)  .... DP_1 (0). A ako na potvoru hardwarovo je to kvoli jednoduchemu
>> plosaku navrhnute zprava dolava. Takze ked som napisal jednoduchy test
>> displaja s pocitanim 0->3, ten isiel zprava dolava, dalo sa na to 
>> pozerat,
>> ale je to pre nas europanov take neprirodzene, kedze mi citame zlava
>> doprava. A tak zacala story okolo pocitania od 3 -> 0 a dolezite je, 
>> ze to
>> musi prebehnut este aj v tej 0. Druhy faktor je ten ten, ze pocitadlo sa
>> sucasne pouziva ako index v poli zobrazovanych znakov, takze by bolo 
>> dobre
>> zostat pri unsigned char alebo unsigned int. Z tych rieseni, ktore tu
>> zazneli sa mne najviac paci to s otocenim indexu (index=DP_1000 - i) a
>> pocitanim od 0 -> 3 (DP_1....DP_1000). Druha moznost je pouzit index 
>> i-1 a
>> pocitat od 4 do 1. V kazdom pripade je treba obetovat prehladnost na
>> ukor poznamky v kode, o aky cyklus sa vlastne jedna.
>>
>> Tymto by som rad este raz podakoval vsetkym za odpovede a inspirativne
>> navrhy a aj za odpovede v predchadzajucom vlakne o statickych 
>> premennych.


Další informace o konferenci Hw-list