RTV forum PL | NewsGroups PL

AVR z CodeVision: Dlaczego PINA.1 nie wykrywa stanu z PORTA.0?

AVR - troche kodu, gdzies blad ?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - AVR z CodeVision: Dlaczego PINA.1 nie wykrywa stanu z PORTA.0?

aciuh
Guest

Tue May 11, 2004 11:38 pm   



Witajcie
Moze ktos z grupowiczow mnie oswieci ;>
W CodeVision pisze tak:

PORTA=0x01;
DDRA=0x01; pin 0 wyjscie, reszta wejscia
DDRB.0=1; wyjscie do swiecenia dioda
DDRB.1=1;

if(PINA.1)
petla_dobra();
else
petla_zla();

gdzie petla_dobra() mruga dioda zielona na PORTB.0 a petla_zla() mruga dioda
na PORTB.1.
Zwieram PORTA.0 z PORTA.1 i tu sa schody, bo na PINA.1 powinien wykryc 1 z
PORTA.0 a tak nie jest. Swiecenie jednej z diod zalezy tylko od ustawienia
portu.
Probowalem wiec tak :

#asm
petla:
clr r25
in r25,$1B ; czytam port A
ror r25 ; bit 1 przesuwam do carry
ror r25

brcs dobry ; jesli w carry 1 to znaczy ze na PINA.1 wykryl jedynke i
skacze do "dobry"
ldi r25,2 ; tu tylko zapalam diode na PORTB.1
out $18,r25
JMP petla
dobry:
ldi r25,1 ; a tu zapalam diode na PORTB.0
out $18,r25
JMP petla
#endasm

No i w zaleznosci czy zwieram, czy rozwieram, powinny sie gasic i zapalac
odpowiednie diody, ale nadal tego nie wykrywa. Swieci albo jedna, albo
druga, w zaleznosci czy piny wejsciowe ustawie jako Tri-state czy z "pull-up
resistor".
Pytanie wiec.... co moze byc przyczyna, ze ani if(PINA.1) ani in r25,$1B
nie wykrywa poprawnie stanu ?


pozdr
Marcin

Andy
Guest

Wed May 12, 2004 12:27 am   



Użytkownik "aciuh" <mwxxx@obronet.org> napisał w wiadomości
news:c7rrk5$3ui$1@213.216.87.131...
Quote:
Witajcie
Moze ktos z grupowiczow mnie oswieci ;
W CodeVision pisze tak:

PORTA=0x01;
DDRA=0x01; pin 0 wyjscie, reszta wejscia
...


na PORTA.0 masz stan 1

jesli wejscie PINA.1 dasz z pullup'em
to nie odroznisz stanu kiedy PINA.1 dostaje 1 z pullup'a
a kiedy jest zwarte do 1 z PORTA.0

nie wiem co chesz zrobic ale sytuacje
poprawi jak dasz PINA.1 z pull'upem
a na PORTA.0 wystawisz 0

wtedy po zwraciu PORTA.0 z PINA.1 bedziesz mial na nim 0
a gdy nie beda zwarte to na PINA.1 bedzie 1

--
Andrzej

aciuh
Guest

Wed May 12, 2004 11:37 am   



Quote:
jesli wejscie PINA.1 dasz z pullup'em
to nie odroznisz stanu kiedy PINA.1 dostaje 1 z pullup'a
a kiedy jest zwarte do 1 z PORTA.0

nie wiem co chesz zrobic ale sytuacje
poprawi jak dasz PINA.1 z pull'upem
a na PORTA.0 wystawisz 0

wtedy po zwraciu PORTA.0 z PINA.1 bedziesz mial na nim 0
a gdy nie beda zwarte to na PINA.1 bedzie 1

OK dziala tak jak mowisz... ale czy instukcja
in r25,$1B
zmienia kierunek calego portu ? Z tego co widze to tak, bo musialem uzywac
instrukcji if(PINA.1==0) zeby zadzialalo Smile
No i czy na wejsciu trojstanowym mozna wykryc jedynke ? Czy tylko moge
wykrywac zero na wejsciu z PullUpem ?

pozdr
Marcin

Andy
Guest

Wed May 12, 2004 12:53 pm   



Użytkownik "aciuh" <mwxxx@obronet.org> napisał w wiadomości news:c7t5pc$ua$1@213.216.87.131...
Quote:
...
...ale czy instukcja
in r25,$1B
zmienia kierunek calego portu ?


"in" nie zmienia kierunku portu,
do ustawienia czy dany pin jest WY czy WE sluzy port DDRA (dla PORTA)

jesli dany bit w DDRA jest 1 to odpowiadajacy mu pin jest WY
jesli dany bit w DDRA jest 0 to odpowiadajacy mu pin jest WE

i dodatkowo gdy bit jest WE to wtedy stan danego bitu w PORTA
okresla czy WE jest z pullup'em (1 na danym bicie w PORTA)
lub tri-state (0 na danym bicie w PORTA)

Quote:
Z tego co widze to tak, bo musialem uzywac
instrukcji if(PINA.1==0) zeby zadzialalo Smile

stan wejscia zawsze odczytuje sie z PINA
odczyt z PORTA zwraca to co do niego wpisales a nie stan na pinie

Quote:
No i czy na wejsciu trojstanowym mozna wykryc jedynke ? Czy tylko moge
wykrywac zero na wejsciu z PullUpem ?

na tri-state mozna wykryc oba stany 1 - 0

tylko gdy wejscie pracuje jako tri-state to zawsze musi byc do czegos podlaczone
nie mozna go zostawic wiszacego w powietrzu
poniewaz ma bardzo duza impedancje wejsciowa (jak bramka tranzystora MOS)
wiec jego stan moze sie przypdkowo zmieniac
np od dotkniecia pinu procka palcem

jesli stosujesz wykrywanie stanu klawisza
to ewidentnie masz sytuacje przy rozwartym klawiszu, ze pin wisi w powietrzu
wiec koniecznie trzeba dodac rezystor albo na zewnatrz
albo wewnatrz (wlaczyc pull'up)

--
Andrzej

elektroda NewsGroups Forum Index - Elektronika Polska - AVR z CodeVision: Dlaczego PINA.1 nie wykrywa stanu z PORTA.0?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map