Chyba v C - velmi podivné chování
Petr Zapadlo
zapik na email.cz
Pondělí Duben 20 15:54:55 CEST 2020
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
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200420/009e5926/attachment.html>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: oabnemokomjkijdi.png
Type: image/png
Size: 5086 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200420/009e5926/attachment.png>
Další informace o konferenci Hw-list