AVR - vstupy, vystupy

Jan Waclawek konfera na efton.sk
Čtvrtek Červen 16 13:10:59 CEST 2011


Toto je sice pekne, ale nie je to standardne C, t.j. je to neprenositelne. 

Ono to vacsinou nevadi, ale pan kolega Grunt podla vsetkeho pouziva avr-gcc a avr-libc.

Da sa to robit aj velmi podobne prenositelne s bitfieldami (teda je to prenositelne v ramci prekladacov ktore splnaju v rozumnej miere C99), ale aj to ma svoje zadrhele a klucky, a najma hlavicky v avr-libc tak napisane nie su takze by ich bolo treba "prebit" svojou definiciou.

No a potom sa to da robit aj makrami, ktore tie haciky a klucky potlaci.

Tie ma pan kolega Grunt takmer vsetky zle, ale to uz tu zaznelo.

Este jedna poznamka, port sa v skutocnosti neda otocit na vstup: vstup je vzdy pripojeny a da sa zapinat a vypinat vystup. Rozdiel je ten, ze aj ked je port otoceny na vystup, tak sa zo vstupneho registra (PINx) cita skutocny stav, napr. ak sa pretlaci stav vystupneho tranzistora zvonka.

wek



----- Original Message ---------------

Subject: Re: AVR - vstupy, vystupy
   From: =?iso-8859-2?Q?Pavel=20Hude=E8ek?= <edizon at seznam.cz>
   Date: Thu, 16 Jun 2011 12:48:22 +0200 (CEST)
     To: HW-news <hw-list at list.hw.cz>

>Zda je vstupní/výstupní se nastavuje v DDR, to máte správnì. Ale dìláte to zbyteènì krkolomnì, nebo pou¾íváte hloupý pøekladaè.
>
>Stav nohy procesoru se ète z PIN. Výstup, nebo pull-up se ovládá v PORT.
>
>Pøíklady:
>
>DDRB=255; // nastaví port B jako výstupní
>PORTB.0=1; // bit 0 nastaví na 1
>if (PINB.0!=1) .... // error - pin je asi zkratován na GND
>
>PORTB.0=0; // bit 0 nastaví na 0
>
>DDRB.3=0; // nastaví bit 3 jako vstupní
>PORTB.3=1; // na bitu 3 zapne pull-up
>while (PINB.3==1) cekani();  // èekáme, a¾ nìkdo stiskne tlaèítko, které bit 3 spojí s GND
>
>PORTB.3=0; // na bitu 3 vypne pull-up, od teï je to èistý vstup
>
>PH
>
>> Od: Michal Grunt <michal.grunt at vynet.cz>
>> potreboval bych trochu poradit. Ted jsem se do problemu tak zamotal, ze uz ani
>> nevim ci jsem :-) Mam trochu zmatek s tim, jak u AVR (WinAVR+GCC) dany port
>> (resp. pin napr. PD6) nastavit jako vstupni (a jak z nej cist) nebo jako
>> vystupni (a jak na nej zapsat 1 nebo 0)...
>> 
>> Zapnout PD6 jako vystupni port
>> 
>> #define PD6_out   DDRD |= (1<<PD6);
>> 
>> 
>> 
>> Zapsat log 1
>> 
>> #define PD6_log1  PORTD &= ~(1<<PD6);
>> 
>> Zapsat log 0
>> 
>> #define PD6_log0  PORTD |= (1<<PD6);
>> 
>> Zapnout PD6 jako vstupni port
>> 
>> #define PD6_in    DDRD |= (0<<PD6);
>> 
>> Cteni z PD6
>> 
>> #define PD6_read  PIND&PD6
>> 
>> Je to tak, nebo uplne jinak?
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list at list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list