Dziwne zachowanie AT89C51. Bug?



Masz problem? Zapytaj na forum elektroda.pl z bramką pl.misc.elektronika!

Poprzedni Następny
Wiadomoœć
spis treści
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

Poprzedni Następny
Wiadomoœć
spis treści
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
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




Poprzedni Następny
Wiadomoœć
spis treści
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




Poprzedni Następny
Wiadomoœć
spis treści
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



Poprzedni Następny
Wiadomoœć
spis treści
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

Poprzedni Następny
Wiadomoœć
spis treści
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




Poprzedni Następny
Wiadomoœć
spis treści
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



Poprzedni Następny
Wiadomoœć
spis treści
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




Poprzedni Następny
Wiadomoœć
spis treści
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




Poprzedni Następny
Wiadomoœć
spis treści
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




Poprzedni Następny
Wiadomoœć
spis treści
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 ?

Poprzedni Następny
Wiadomoœć
spis treści
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



Poprzedni Następny
Wiadomoœć
spis treści
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 ?

Poprzedni Następny
Wiadomoœć
spis treści
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

Poprzedni Następny
Wiadomoœć
spis treści
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

Poprzedni Następny
Wiadomoœć
spis treści
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 ?

Poprzedni Następny
Wiadomoœć
spis treści
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