logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

8051 (DS89C430) resetuje się, gdy ma wystawić 0 na P0.7

Sam Sung 18 Mar 2006 20:39 2091 5
REKLAMA
  • #1 2430074
    Sam Sung
    Poziom 33  
    Posty: 2006
    Pomógł: 227
    Ocena: 574
    Witam,

    robię sobie programator do AT89CX051 na dallasie DS89C430 (zgodny z 8051) - schemat w załączniku - i napotkałem niespodziewany problem.
    Gdy chcę wystawić 0 na pin P0.7 (i w efekcie podać 12 V na nóżkę RST/VPP Atmela - ale na razie odpalam układ bez atmela), procek się resetuje. To samo dzieje się, gdy podłączam na zewnątrz masę do pinu P0.7 (wtedy dioda zapala się, na kolektorze pojawia się 12V, ale procek się resetuje).
    Czasem, kiedy dość szybko po resecie znowu każę mu podać 0 na P0.7, to się udaje. Zazwyczaj jednak następuje reset, no i P0.7 wraca do stanu 1. O co chodzi?

    Polecenie zmiany stanu portu P0 przysyłam ręcznie z RS'a. W układzie ze scalaków są włożone tylko MAX232 i DS89C430.

    Aha, na schemacie jest odwrotnie podłączona dioda LED (w układzie mam dobrze).
    Załączniki:
    • 8051 (DS89C430) resetuje się, gdy ma wystawić 0 na P0.7 prog_at89cx051.png (27.39 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • Pomocny post
    #2 2434268
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Witam.

    Nie znam budowy DS89C430 ale z tego co widzę to nóżka RST wisi w powietrzu. Trzeba by z nią coś zrobić (albo do VCC albo do GND).
    Miałem podobny problem (zimny lut) i uP resetował się nawet wtedy jak zapalałem światło w pokoju :)
  • REKLAMA
  • Pomocny post
    #3 2434359
    morph13
    Poziom 25  
    Posty: 987
    Pomógł: 25
    Ocena: 32
    Pierwsza sprawa to kondensatory filtrujące zasilanie przy kazdym !!!! scalaku nawet programowany o pojemności 100nF. Końcówka RST do masy przez 10k i do +Vcc przez elektrolit 1uF i na nim podpinasz mikroswicha do resetu sewnętrznego. Co to za dziwne sterowanie tranzystorem z P0.7 albo dajesz npn lub pnp (tu sterowanie stanem 0) i dodatkowo zmieniasz podłączeni rezystorów, to co jest to jakaś dziwna kombinacja. Jeśli sterujesz npn-a to jego baze do masy przez 10k a na bazę sygnał przez 2,2 - 4,7k i sterujesz stanem 1, jak pnp-na to między E-B dajesz 6,4k a na baze 360-470 i sterujesz stanem 0. Sygnalizację obecności +12V (nap. programujące) daj normalnie przez LED-a i rezystor do masy. Tu nie dajesz żadnego kondensatora blokującego zasilanie (100nF). z kondensatorami przy MAX-ie tez namieszałeś, brakuje jednego do przetwornicy (wewnętrznej).
  • REKLAMA
  • #4 2434668
    Sam Sung
    Poziom 33  
    Posty: 2006
    Pomógł: 227
    Ocena: 574
    Dzięki za cenne uwagi :)

    markosik20 napisał:
    Nie znam budowy DS89C430 ale z tego co widzę to nóżka RST wisi w powietrzu. Trzeba by z nią coś zrobić (albo do VCC albo do GND).

    morph13 napisał:
    Pierwsza sprawa to kondensatory filtrujące zasilanie przy kazdym !!!! scalaku nawet programowany o pojemności 100nF.
    Końcówka RST do masy przez 10k i do +Vcc przez elektrolit 1uF i na nim podpinasz mikroswicha do resetu sewnętrznego.

    DS89C430 ma na RST wbudowany pull-down 50k i automatyczny reset po włączeniu, w innym układzie działa mi "na wisząco"... czy mimo to powinno się podłączać zewnętrzny pull-down i kondensator? Mam tam tylko podłączony wyłącznik do zewn. resetu.
    morph13 napisał:
    Co to za dziwne sterowanie tranzystorem z P0.7 albo dajesz npn lub pnp (tu sterowanie stanem 0) i dodatkowo zmieniasz podłączeni rezystorów, to co jest to jakaś dziwna kombinacja. Jeśli sterujesz npn-a to jego baze do masy przez 10k a na bazę sygnał przez 2,2 - 4,7k i sterujesz stanem 1, jak pnp-na to między E-B dajesz 6,4k a na baze 360-470 i sterujesz stanem 0. Sygnalizację obecności +12V (nap. programujące) daj normalnie przez LED-a i rezystor do masy.

    Czyli tam wystarczy 1 tranzystor PNP? A czy to nie grozi upaleniem portu P0.7? Nie wiem, czy dobrze zrozumiałem ten opis. Czy mógłbyś narysować schemat sterowania przez PNP? (wolałbym sterować zerem, żeby podczas resetu dallasa nie pojawiało się 12V na atmelu).
    morph13 napisał:
    Tu nie dajesz żadnego kondensatora blokującego zasilanie (100nF).

    "Tu" - czyli gdzie?
    morph13 napisał:
    z kondensatorami przy MAX-ie tez namieszałeś, brakuje jednego do przetwornicy (wewnętrznej).

    Tu akurat jest dobrze, na nóżkę V+ podaję bezpośrednio 12V (z zasilacza), więc odpadają 2 kondesatory dla podwajacza napięcia, a ten jeden z trzech przy MAX232 jest do filtracji zasilania (tak jak jest zalecane w pdf'ie do MAX232). Komunikacja po RS'ie działa bezproblemowo (dopóki nie zaczynam przełączać tego P0.7).

    Dzięki za pomoc, będę wdzięczny za dalsze sprecyzowanie odpowiedzi.
  • REKLAMA
  • #5 2435521
    morph13
    Poziom 25  
    Posty: 987
    Pomógł: 25
    Ocena: 32
    Zastosuj układ dodatkowy tak jak pisałem R+C, będziesz miał pewność jego działania a to jest najwarzniejsze, gdyby to był sterownik "inteligętny wentylatora łazienkowego" to można dać tylko kondensator, nawet poniżej 1uF ale tu musisz być pewny pracy układu resetu.

    Po resecie piny procesora maja stan 1, co oznacza przy zastosowaniu npn-a że pojawi sięnapięcie programujące +12V do momentu kiedy program nie skonfiguruje pinów portu. Niedopuszczalne !!!, niech raz na 100 pozostawisz uład w programatorze i już prawdopodobieństwo uszkodzenia. Jeśli jednak nie to w profesjonalnych rozwizaniach omija się takie ewentualności, Ty tez to zrób, widać wtedy, że konstruktor zna sięna rzeczy. Pin P0.7 bedzie sterował pnp-na (opis podłączenia wyżej) a ten z kolei pnp-em załączającym nap. prog (+12V, rezystory tak jak w sterującym) i na wyjściu Vprog nie dajesz 100nF !!!! (o to mi chodziło) na reszcie dajesz, nawet na Vcc dla układu programowanego (tylko 100nF, żaden elektrolit).

    Tu musze wspomnieć o procedurze podawania Vprog, skonfiguruj jedną komórkę tak by po wpisaniu do niej danej procedura wystawiała impuls PRG o długości np. komórka*1ms, to Ci się przyda na przyszłość gdy stwierdzisz, że zechcesz rozbudowac programator o prog AVR lub innych.

    Przed przystapeniem do procesu programowania, procedura (która stworzysz) powinna odczytać ID układu i go rozpoznać, w tabeli stałych bedziesz miał skonfigurowane już jakie czasy PRG, odstępy między impulsami i tp. Programator stanie się w pewien sposób "inteligętny".

    Teraz o wczytywaniu pliku do programowania. HEX lub BIN. HEX jest pewniejszy ale wolniejszy a BIN nie ma sprwdzania poprawności przesyłanych danych, pisze to bo sa programatory które automatycznie programja układ po przsłaniu im pliku bez dodatkowego softu sterujacego . Jeśli stosujesz dodatkowy program sterujący proramowaniemnp pod WIN lub LINUX-a (sam go piszesz) to bezwzględnie rób weryfikację zapisu komórki FLASH po każdym zapisie (bajt programu). To tez świadczy o profesjonalnym podejściu do zagadnienia i naprawdę się przydaje.

    Jeszcze o programi sterującym, jak go nie stosujesz to podłącz do układu LCD-ka, bedzie on wyświetlał typ i nazwę rozpoznawanego układu do programowania, naciskasz przyciska progrma przygotowuje scalak do programowani (erase) i czeka na plik..... z PC. Kilka klawiszy i proste MENU i juz możesz zmieniać czy ma programowac bity zabezpieczajace czy nie i tego typu bzdury. Chcesz więcej bajerów w programatorze to doadaj EEPROM zewnętrzny (widzę, że go masz) o większej pojemnosci. Ładujesz plik do programowania, proc zapisuje go do EE a ty wybierasz sobie w MENU, że zaproramujesz 10 kości bez konieczności przesyłania plików. Mozna tez zgromadzić kilka wsadów w EE i wybierać sobie który będzie "wstrzeliwany" do układu (praca serwisowa :-) w terenie bez PC). Propozycji jesy kupe. Głowny uP ma sporo FLASH-u to maszpole do popisu.

    Dobra rada w MAX-ie daj jednak kondensator i zasil go z +5V, nie kombinuj tu z "wynalazkami" jeden elektrolit Cię nie zbawi a da pewność pracy konwertera RS232<->uP, a o pewnośc działania tu przecież między innymi chodzi. Nie sztuka jest zrobić proga który zaprogramuje uład ale tylko raz bo po tej czynności układ nadaje się już do śmietnika.

    Udanej walki z PROGIEM :-)
    Kurde ale się rozpisałem, chyba przesadzilem z propozycjami.
    Piotr
  • #6 2445448
    Sam Sung
    Poziom 33  
    Posty: 2006
    Pomógł: 227
    Ocena: 574
    Po poradach morph'a 13 juz myślałem, że płytka, którą już zrobiłem, będzie do wyrzucenia. Na szczęście układ zaczął działać już po podłączeniu kondensatora 1 uF między RST dallasa a VCC :)
    A ten układ do przełączania +5 V / +12 V działa bez zarzutu, choć może i jest dziwny (sam go wymyśliłem ;) ) Oczywiście uwzględniłem fakt, że po resecie na portach są jedynki, i 12 V jest włączane zerem. Szkoda tylko, że nie przewidziałem możliwości programowego podania zera na RST atmela, bo teraz bo każdym wgraniu / zczytaniu zawartości pamięci lub sygnatur muszę ręcznie resetować procki.
    morph13 napisał:
    Teraz o wczytywaniu pliku do programowania. HEX lub BIN. HEX jest pewniejszy ale wolniejszy a BIN nie ma sprwdzania poprawności przesyłanych danych, pisze to bo sa programatory które automatycznie programja układ po przsłaniu im pliku bez dodatkowego softu sterujacego . Jeśli stosujesz dodatkowy program sterujący proramowaniemnp pod WIN lub LINUX-a (sam go piszesz) to bezwzględnie rób weryfikację zapisu komórki FLASH po każdym zapisie (bajt programu). To tez świadczy o profesjonalnym podejściu do zagadnienia i naprawdę się przydaje.

    Firmware napisałem tak, żeby był kompatybilny z boot-loaderem w DS89C430. Zrobiłem obsługę zrzutów pamięci i sygnatur (w formacie HEX), ładowanie hex'ów z weryfikacją i bez. Oprócz tego chcę dodać jeszcze programowanie eepromów AT24CXX (w analogiczny sposób).
    Pozostałe proponowane bajery nie są mi potrzebne, poza tym część sprzętowa jest już gotowa :)
    MAX232 jednak całkiem dobrze pracuje z podanym bezpośrednio +12 V, i na chłopski rozum wydaje mi się, że to jest nawet bardziej stabilne rozwiązanie niż podwajacz napięcia na kondensatorach. Gdybym miał -12 V, to też bym je wolał wykorzystać zamiast odwracać +12V...
REKLAMA