RE: Chyba v C - velmi podivné chování
Pavel Hudecek
edizon na seznam.cz
Pondělí Duben 20 18:04:59 CEST 2020
Je.
A jinak teda ten kód udělá to, že pokud je splněna podmínka v závorce, nastaví se bit 0 na výstupní (zda to bude bit 0 není zaručeno, ale jinak skoro jisté).
V tomhle je super CodeVision, že se dá napsat třeba PORTB.3=1. Teda vlastně částečně byl, protože u nových AVR s UPDI to už neumí.
PH
Od: Ladislav Vaiz
Není to tak, že při pinu nastaveném na vstup se zápisem na PORTB zapíná
a vypíná pullup?
Dne 20.04.2020 v 15:54 Petr Zapadlo napsal(a):
> 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.
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200420/16e240ca/attachment.html>
Další informace o konferenci Hw-list