Re: Chyba v C - velmi podivné chování

Petr Zapadlo zapik na email.cz
Pondělí Duben 20 19:07:01 CEST 2020


Ano je to tak.

Nicméně je někdo schopen vysvětlit tu závislost na stavu sousedního bitu?

Petr

Dne 20. 04. 20 v 16:03 Ladislav Vaiz napsal(a):
> Není to tak, že při pinu nastaveném na vstup se zápisem na PORTB 
> zapíná a vypíná pullup?
> L.
>
> Dne 20.04.2020 v 15:54 Petr Zapadlo napsal(a):
>>
>> Zdravím,
>>
>> udělal jsem chybu v C zápise - zapomněl jsem jedno většítko:
>>
>>   DDRB |=(1<CLK_UP);
>>
>> takže se ze zápisu jedničky do patřičného bitu stalo cosi.
>>
>> Nastavení portu proběhne jen jednou na začátku programu, směr pinu už 
>> pak nikde neměním.
>>
>> IO používám takto:
>>
>> void shift_out_up(uint8_t data){
>>   for (uint8_t i=0; i<8; i++){
>>     if ((0b10000000>>i)& data){ PORTB |=(1<<MOSI_UP);} else {PORTB 
>> &=~(1<<MOSI_UP);}
>>     pause_us(1);
>>     PORTB |=(1<<CLK_UP);
>>     pause_us(1);
>>     PORTB &=~(1<<CLK_UP);
>>   }
>> }
>>
>> tj čistě jako výstupní.
>>
>> A teď záhada - čekal bych, že pokud nastavení v DDRB neproběhne 
>> dobře, tak pin bude buď vstupní a nebo výstupní. A pokud bude 
>> výstupní, tak to bude fungovat. (Po opravě výrazu to začalo fungovat).
>>
>> Pokud vstupní, tak na něm neuvidím nic - ale ve finále to vypadá takto:
>>
>>
>> Když je sousední pin na 0, tak hodiny na výstup jdou, když je 
>> vedlejší pin na 1, tak to zmizí, ale ne vždy - v reálu se to chovalo 
>> tak, že se občas "ztratil" nějaký tik hodin.
>>
>> Jak může pin takto "plavat"?
>>
>> Jen doplňuji, je to Attiny84.
>>
>> Pěkně zákeřná chyba.
>>
>> Petr
>>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list