Dziwne zachowanie procesora AT89C51 - nieprawidłowe działanie portów P1.0-P1.2?
Dziwne zachowanie AT89C51. Bug?
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 19:40:30 GMT
Podczas uruchamiania pewnego programu natknąłem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 są dołączone
LED za pośrednictwem ULN2003.
Program czeka po resecie 1,5 sekundy (wszystkie LED powinny świecić),
włącza jedynki na trzy najmłodsze bity (diody dołączone do P1.0..P1.2
świecą, a pozostałe gasną), czeka 1,5s, zeruje wszystkie bity portu
oprócz P1.1 (powinna palić się dioda dołączona do tego wyjścia, ale z
niewiadomych przyczyn gaśnie), czeka 1,5s, ponownie ustawia trzy
najmłodsze bity itd. w pętli.
Nie wiem czy gdzieś robię jakiś "gruby błąd", czy może jest jakiś błąd
w konstrukcji, a może znalazłem "bug" w procesorze?
Dzisiaj lub jutro spróbuję włożyć zamiast "atmela" zwykłą 51-kę z
okienkiem.
Poniżej załączam programik, którym testowałem objawy. Może ktoś z Was
ma podobny układ (LED na P1) i zechce go uruchomić?
P1 .EQU 144
.org 0
ajmp start
start:
acall WAIT_500ms
acall WAIT_500ms
acall WAIT_500ms
petla: mov A, #00000111b
mov P1, A
acall WAIT_500ms
acall WAIT_500ms
acall WAIT_500ms
mov A, #00000010b
mov P1, A
acall WAIT_500ms
acall WAIT_500ms
acall WAIT_500ms
sjmp petla
WAIT_500ms: mov R0, #5
delayR0: mov R1, #125
delayR1: mov R2, #200
delayR2: djnz R2, delayR2
djnz R1, delayR1
djnz R0, delayR0
ret
.END
--
Jarek Andrzejewski
From: "Jerzy Szczesiul" <Jerzy.Szczesiul_at_nospam_ep.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 23:49:42 +0300
Hi
Jaroslaw Andrzejewski napisał(a) w wiadomości:
<3747db60.1460560_at_nospam_news.tpsa.pl>...
Podczas uruchamiania pewnego programu natknąłem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 są dołączone
LED za pośrednictwem ULN2003.
Czasem sa szopki przy sterowaniu poziomem wysokim
- wydajnosc pradowa moze byc za mala albo na styk co
owocuje rozmaitymi dziwolagami. Generalnie lepiej
uzywac 0 jako poziomu aktywnego ( i nie ma niepozadanych
wlaczen przy resecie ). Natomiast jak juz zlutowane to
instrukcje ustawiania linii trzeba czesto ponawiac w mniejszych
petlach - po ustawieniu '51 przez moment podciaga jedynke
wiekszym pradem. ( W tym akurat przykladzie programowym
nie bardzo jest jak bo trzeba wejsc do srodka procedury
opozniania - najlepiej zaleznosci czasowe wyrzucic do
przerwania timera )
Pozdrowienia
Jurek Szczesiul
Jerzy.Szczesiul_at_nospam_ep.com.pl
From: "Jerzy Szczesiul" <Jerzy.Szczesiul_at_nospam_ep.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 01:42:47 +0300
Tomasz Gumny napisał(a) w wiadomości: ...
Jerzy Szczesiul napisał(a) w wiadomości: ...
[...]
Natomiast jak juz zlutowane to instrukcje ustawiania
linii trzeba czesto ponawiac w mniejszych
petlach - po ustawieniu '51 przez moment podciaga jedynke
wiekszym pradem.
[...]
Tez tak myslalem i kiedys tego probowalem na 87C51 Signeticsa i nie
wychodzilo. Prad wzrastal tylko przy zmianie z 0 na 1 w rejestrze portu.
Jesli uprzednio byla tam jedynka, to prad ani drgnal. Dopiero wtedy
przyjrzalem sie dokladniej schematowi wewnetrznemu portow P1-P3...
Milej lektury :-)
TG
Wow! Widziala pani ? A poszedlbym do grobu przekonany, ze
podciaga :-) A na serio to ( teraz sobie przypomnialem ) kiedys
mialem taki sam problem z wyswietlaczami LED ( przez 2803 )
a wszystko bylo zmontowane - pomoglo cykliczne zerowanie
i ustawianie linii - zaswiecilo jak trzeba ( no ale to dobre raczej
tylko do swiecenia ).
Dzieki Tomie - niech Moc bedzie z Toba !
Jurek Szczesiul
Jerzy.Szczesiul_at_nospam_ep.com.pl
From: "Tomasz Gumny" <Tomasz.Gumny_at_nospam_ep.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 01:08:05 +0200
Jerzy Szczesiul napisał(a) w wiadomości: ...
[...]
Natomiast jak juz zlutowane to instrukcje ustawiania
linii trzeba czesto ponawiac w mniejszych
petlach - po ustawieniu '51 przez moment podciaga jedynke
wiekszym pradem.
[...]
Tez tak myslalem i kiedys tego probowalem na 87C51 Signeticsa i nie
wychodzilo. Prad wzrastal tylko przy zmianie z 0 na 1 w rejestrze portu.
Jesli uprzednio byla tam jedynka, to prad ani drgnal. Dopiero wtedy
przyjrzalem sie dokladniej schematowi wewnetrznemu portow P1-P3...
Milej lektury :-)
TG
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 11:17:02 GMT
Ogólna uwaga: konstrukcja układu nie była moja - robił to doświadczony
kolega, więc zacząłem szukać najpierw w programie, a potem dopiero
dalej.
Ja tylko pisałem program.
Sat, 22 May 1999 23:49:42 +0300, "Jerzy Szczesiul"
<Jerzy.Szczesiul_at_nospam_ep.com.pl> napisał(-a):
Czasem sa szopki przy sterowaniu poziomem wysokim
- wydajnosc pradowa moze byc za mala albo na styk co
owocuje rozmaitymi dziwolagami. Generalnie lepiej
pewnie masz rację...
Sat, 22 May 1999 23:30:36 +0200, "Tomasz Gumny"
<Tomasz.Gumny_at_nospam_ep.com.pl> napisał(-a):
Zaczalbym od sprawdzenia napiec na wejsciach ULN2003. Prad wyjsciowy
procesora w stanie wysokim chyba ledwo starcza do wysterowania tych
driverow. Dla pewnosci podciagnij je do +5V przez rezystory 5-10k.
... i Ty również
Sun, 23 May 1999 00:05:16 +0200, "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
napisał(-a):
A no wlasnie :) Ja zawsze daje HC04 przed ULN-ami. Czasem zatrzask jesli mi
te same linie do czegos jeszcze potrzebne.
cenna uwaga
Sat, 22 May 1999 23:34:30 +0200, "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
napisał(-a):
To zakrawa na szarlatanerie :) To musi dzialac bez wzgledu na cokolwiek :)
wiem, ale co z tego :-)
Albo procek padniety - wsadz inna sztuke - nie ta co juz 500 razy
była inna
programowales :) Albo masz zwarcie miedzy sciezkami, albo ULN winny. Odepnij
rezystory w szereg z bazami i sprawdz oscyloskopem. Nie wierze, ze to nie
dziala.
Moze assemler cos oszalal co ?
nie - dzięki za pomoc z asemblacją
Układ wrócił do konstruktora - ja skończyłem pisać program. raczej na
pewno to sprawa z obciążaniem wyjść.
Odpowiem definitywnie w środę lub czwartek - wyjeżdżam dziś na krótki
urlop.
Dziękuję wszystkim za pomoc.
--
Jarek Andrzejewski
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 20:24:54 +0200
Jaroslaw Andrzejewski napisał(a) w wiadomości:
<3750dc51.2292306_at_nospam_news.tpsa.pl>...
Ogólna uwaga: konstrukcja układu nie była moja - robił to do?wiadczony
A no wlasnie :) Ja zawsze daje HC04 przed ULN-ami. Czasem zatrzask jesli
mi
te same linie do czegos jeszcze potrzebne.
cenna uwaga
Układ wrócił do konstruktora - ja skończyłem pisać program. raczej na
pewno to sprawa z obci?żaniem wyj?ć.
Odpowiem definitywnie w ?rodę lub czwartek - wyjeżdżam dzi? na krótki
Bo zamiast sterowac LEDy z ULNa to wystarczy dac bramke HC04 i rezystor za
nia 1k -- dalej LED i do +5V. Po co ULNy do tego stosowac ? Nawet linii
portu nie trzeba podciagac.
Juliusz
From: "Tomasz Gumny" <Tomasz.Gumny_at_nospam_ep.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 23:30:36 +0200
Jaroslaw Andrzejewski napisał(a) w wiadomości:
<3747db60.1460560_at_nospam_news.tpsa.pl>...
Podczas uruchamiania pewnego programu natknąłem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 są dołączone
LED za pośrednictwem ULN2003.
[...]
Jarek Andrzejewski
Zaczalbym od sprawdzenia napiec na wejsciach ULN2003. Prad wyjsciowy
procesora w stanie wysokim chyba ledwo starcza do wysterowania tych
driverow. Dla pewnosci podciagnij je do +5V przez rezystory 5-10k.
Powodzenia.
TG
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 00:05:16 +0200
Tomasz Gumny napisał(a) w wiadomości: ...
Jaroslaw Andrzejewski napisał(a) w wiadomo?ci:
<3747db60.1460560_at_nospam_news.tpsa.pl>...
Podczas uruchamiania pewnego programu natkn?łem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 s? doł?czone
LED za po?rednictwem ULN2003.
[...]
Jarek Andrzejewski
Zaczalbym od sprawdzenia napiec na wejsciach ULN2003. Prad wyjsciowy
procesora w stanie wysokim chyba ledwo starcza do wysterowania tych
driverow. Dla pewnosci podciagnij je do +5V przez rezystory 5-10k.
Powodzenia.
A no wlasnie :) Ja zawsze daje HC04 przed ULN-ami. Czasem zatrzask jesli mi
te same linie do czegos jeszcze potrzebne.
Juliusz
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 23:34:30 +0200
Jaroslaw Andrzejewski napisał(a) w wiadomości:
<3747db60.1460560_at_nospam_news.tpsa.pl>...
Podczas uruchamiania pewnego programu natkn?łem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 s? doł?czone
LED za po?rednictwem ULN2003.
To zakrawa na szarlatanerie :) To musi dzialac bez wzgledu na cokolwiek :)
Albo procek padniety - wsadz inna sztuke - nie ta co juz 500 razy
programowales :) Albo masz zwarcie miedzy sciezkami, albo ULN winny. Odepnij
rezystory w szereg z bazami i sprawdz oscyloskopem. Nie wierze, ze to nie
dziala.
Moze assemler cos oszalal co ?
Juliusz
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 23:44:11 +0200
Wyslalem ci na e-mail moja wersje po assemblacji.
Juliusz
From: this_address_is_invalid_see_signature_at_nospam_adresniewazny.com (Jaroslaw Cichorski Jr.)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sat, 22 May 1999 22:47:40 GMT
jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski) wrote:
Podczas uruchamiania pewnego programu natknąłem się na dziwne
zachowanie procesora AT89C5120PC (produkcja 9724 - może to ma
znaczenie). Przy wystawianiu stanu 0 na nogi P1.0 i P1.2 również noga
P1.1 przyjmowała taki stan, choć odpowiedni bit był ustawiony. Poniżej
przytaczam program, którym testowałem. Do nóg P1.0..P1.7 są dołączone
LED za pośrednictwem ULN2003.
Poczytaj w instrukcji o instrukcjach (jak to brzmi !!!) typu 'read
modify write'
To mi wyglada na klasyczny taki przypadek (nie studiowalem Twojego
softu)
Przy wykonywaniu niektorych instrukcji nawet zmiana stanu jednego bitu
powoduje odczyt calego portu i ponowne wyslanie calej zawartosci na
port.
Jezeli odczytana wartosc z pinu byla niska z powodu zbyt duzego
obciazenia, to wpisane zostanie '0', chociaz poprzednio bylo '1'
(tylko bardzo obciazone, wiec odczytalo sie jako '0').
Sprawdz, czy uzywane przez Ciebie instrukcje nie sa wlasnie typu
read-modify write.
HTH
--
Jaroslaw Cichorski Jr.
E-mail cichy_at_nospam_amart.JUNKMAILPROTECTION.com.pl
WWW http://www.amart.com.pl
UWAGA Adres email niewazny!
Prosze usunac JUNK MAIL PROTECTION. zeby otrzymac prawidlowy adres.
Kto to jest General Failure i dlaczego czyta z mojego dysku twardego ?
From: "Tomasz Gumny" <Tomasz.Gumny_at_nospam_ep.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 01:13:03 +0200
Jaroslaw Cichorski Jr. napisał(a) w wiadomości:
<37473359.5674288_at_nospam_news.tpsa.pl>...
[...]
Poczytaj w instrukcji o instrukcjach (jak to brzmi !!!) typu 'read
modify write'
To mi wyglada na klasyczny taki przypadek (nie studiowalem Twojego
softu)
Przy wykonywaniu niektorych instrukcji nawet zmiana stanu jednego bitu
powoduje odczyt calego portu i ponowne wyslanie calej zawartosci na
port.
Jezeli odczytana wartosc z pinu byla niska z powodu zbyt duzego
obciazenia, to wpisane zostanie '0', chociaz poprzednio bylo '1'
(tylko bardzo obciazone, wiec odczytalo sie jako '0').
Sprawdz, czy uzywane przez Ciebie instrukcje nie sa wlasnie typu
read-modify write.
Jaroslaw Cichorski Jr.
Ja doczytalem. Odczytywany jest rejestr portu, a nie pin.
TG
From: this_address_is_invalid_see_signature_at_nospam_adresniewazny.com (Jaroslaw Cichorski Jr.)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 10:27:12 GMT
"Tomasz Gumny" <Tomasz.Gumny_at_nospam_ep.com.pl> wrote:
Ja doczytalem. Odczytywany jest rejestr portu, a nie pin.
TG
Jezeli czytany jest rejestr portu, to nie read-modify-write jest
przyczyna :-))
Pozdrawiam
--
Jaroslaw Cichorski Jr.
E-mail cichy_at_nospam_amart.JUNKMAILPROTECTION.com.pl
WWW http://www.amart.com.pl
UWAGA Adres email niewazny!
Prosze usunac JUNK MAIL PROTECTION. zeby otrzymac prawidlowy adres.
Kto to jest General Failure i dlaczego czyta z mojego dysku twardego ?
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 11:16:55 GMT
Sun, 23 May 1999 01:13:03 +0200, "Tomasz Gumny"
<Tomasz.Gumny_at_nospam_ep.com.pl> napisał(-a):
Ja doczytalem. Odczytywany jest rejestr portu, a nie pin.
czytany? Ja nie czytam w swoim programie stanu portu. Instrukcja
MOV P1, A zapisuje zatrzask bez jego czytania bądź czytania pinu. Nie
mylę się chyba?
--
Jarek Andrzejewski
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 11:16:54 GMT
Sat, 22 May 1999 22:47:40 GMT,
this_address_is_invalid_see_signature_at_nospam_adresniewazny.com (Jaroslaw
Cichorski Jr.) napisał(-a):
Poczytaj w instrukcji o instrukcjach (jak to brzmi !!!) typu 'read
modify write'
To mi wyglada na klasyczny taki przypadek (nie studiowalem Twojego
softu)
chyba to nie to. MOV P1, A (takiej instrukcji używam) zapisuje do
zatrzasków wyjsciowych bezpośrednio.
--
Jarek Andrzejewski
From: this_address_is_invalid_see_signature_at_nospam_adresniewazny.com (Jaroslaw Cichorski Jr.)
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Mon, 24 May 1999 09:12:24 GMT
jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski) wrote:
Sat, 22 May 1999 22:47:40 GMT,
this_address_is_invalid_see_signature_at_nospam_adresniewazny.com (Jaroslaw
Cichorski Jr.) napisał(-a):
Poczytaj w instrukcji o instrukcjach (jak to brzmi !!!) typu 'read
modify write'
To mi wyglada na klasyczny taki przypadek (nie studiowalem Twojego
softu)
chyba to nie to. MOV P1, A (takiej instrukcji używam) zapisuje do
zatrzasków wyjsciowych bezpośrednio.
Zachecam jeszcze raz - przeczytaj w opisie do '51 punkt pt "read
modify write feature"
Instrukcje typu
MOV P1,A rzeczywiscie nie czytaja ani latcha portu, ani pinu, tylko
zapisuja wartosc do portu.
ale instrukcje zwane read-modify-write np
ORL P1,A lub MOV P1.2,C i kilka innych
powoduja odczyt stanu latcha portu, wykonanie operacji i ponowny zapis
do latcha portu.
I takie instrukcje nie powoduja blednej interpretacji odczytanego z
pinu poziomu logicznego (np. na skutek zbyt duzego obciazenia portu),
poniewaz czytaja stan wpisany do latcha.
Jezeli natomiast zastosujesz ciag instrukcji
MOV A,P1
RLC A
MOV P1,A
to pierwsza instrukcja czyta stan pina (nie latcha) i jezeli dany pin
wyrzuca z siebie '1' ale jest bardzo obciazony, to odczytane zostanie
'0' i uzyte do dalszych operacji.
To moze byc zrodlem bledu - trzeba sobie z tego zdawac sprawe.
Jednak w Twoim przypadku (teraz obejrzalem kod) nie to jest przyczyna
takiego zachowania.
Pozdrawiam
--
Jaroslaw Cichorski Jr.
E-mail cichy_at_nospam_amart.JUNKMAILPROTECTION.com.pl
WWW http://www.amart.com.pl
UWAGA Adres email niewazny!
Prosze usunac JUNK MAIL PROTECTION. zeby otrzymac prawidlowy adres.
Kto to jest General Failure i dlaczego czyta z mojego dysku twardego ?
From: "Andy" <anok_at_nospam_ceti.com.pl>
Subject: Re: Dziwne zachowanie AT89C51. Bug?
Date: Sun, 23 May 1999 23:03:59 +0200
...
Zrobilem ten uklad.
Wszystko wyglada OK.
Dwie po bokach migaja a ta w srodku caly czas swieci.
LED'y prosto z pinow Atmela do masy.
Ledwo swieca - slaba wydajnosc '51 w stanie 1.
test na: ATMEL'u 89c51-20PC, 9729
--
Andrzej
anok_at_nospam_ceti.com.pl
anok_at_nospam_scorpius.elektro.agh.edu.pl