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

Miroslav Šinko sinkomiro na gmail.com
Pondělí Duben 20 18:17:08 CEST 2020


Pardon odoslal som nedopatrenim skor
https://github.com/maniacbug/EtherBright/blob/master/avrlibdefs.h

Makra BV, sbi, cbi (a ine).

Ich pouzivanim sa takymto chybam predide.

miro

po 20. 4. 2020 o 18:14 Miroslav Šinko <sinkomiro na gmail.com> napísal(a):
>
> Je mozne sa inspirovat v starych avrlibdefs.h. Pozeram, ze stale ziju :)
>
> po 20. 4. 2020 o 18:05 Pavel Hudecek <edizon na seznam.cz> napísal(a):
> >
> > 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.
> >
> >
> >
> > _______________________________________________
> > 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