Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[89C420] Problem ze stabilnością generatora

26 Cze 2008 08:44 1647 4
  • Poziom 16  
    Witam.
    Procesor pracuje na kwarcu 24MHz (bez żadnych wewnętrznych mnożników czy dzielników). Loader420 ma problemy z programowaniem jednak za pomocą MTKbeta (otwieram port na 9600) udaje się go zaprogramować i zweryfikować.

    Program testowy wysyła tekst na port szeregowy (w pęti) i miga diodką. Na tym kwarcu udało mi się uzyskać wewnętrzny baudrate na 9615 (taktowanie licznikiem T1). Niezgodność z 9600 w komputerze to tylko 1,5%.

    Po uruchomieniu dane są wysyłane poprawnie do komputera, ale tylko przez chwilę. Z czasem zaczynają się pojawiać pojedyncze śmieci aż wkońcu są tylko śmieci. Czasem też procesor się zawiesi (diodka przestaje migać). Po resecie znów przez chwilę działa prawidłowo, ale już krócej! Szybciej pojawiają się śmieci. Najdłuższa poprawna praca jest tylko zaraz po włączeniu zasilania, gdy wcześniej przez dłuższy czas nie było podłączone.
    W momencie gdy procesor wysyła śmieci, zamknięcie pętli RS (zwarcie TXD-RXD na procku) pokazuje, że sam MAX232 jest ok, bo dane wysyłane z komputera wtedy wracają bez przekłamań.


    Procesor to DS89C420-MNG wersja B5 (MAX CLOCK 25MHz). Kwarc 24MHz, kondensatory przy kwarcu 15pF. Przy procku i "MAXie" kondensatory 100nF na zasilaniu.

    Zmieniłem rezonator kwarcowy - nic to nie dało. Próbowałem na innym procesorze: DS89C420-MCL wersja A2 (MAX CLOCK 33MHz) - ten zawiesza się jeszcze szybciej - już po kilku sekundach.
  • Specjalista - oświetlenie sceniczne
    Ja stawiałem 33p i nie było problemów. Znaczy były, bo nie dało sie UARTA rozpędzić jak trzeba, nie mniej jednak nie było problemów ze stabilnością. Trzeba szukać przy kwarcu. Polecam wątki S8252, tam zdaje się pomogło doszczepienie opornika do kwarcu

    Przy DSie sobiście stawiam generator i z MTK bez problemu gada na 57600
  • Poziom 16  
    Wstawiłem 30p ale nadal to samo... Próbowałem z 1Mom równolegle do kwarcu. Próbowałem z trzema różnymi kwarcami (każdy po 24MHz). Może to generator w moim PC się rozjeżdża :P bo procek wieszać się już przestał, ale nadal śmieci z czasem wysyła na RS.
    Probowałem już teraz nawet 89C450 - to samo. Chyba trzeba będzie się "zakręcić" koło zasilania, a może te sample to są jakieś odrzuty z produkcji :D
  • Poziom 28  
    Może procek się resetuje, jeżeli robi to wystarczająco szybko to wygląda to tak jakby działał normalnie. Przy takich resetach z uwagi na to że Kwarc jest już "rozgrzany" to startuje bardzo szybko, jednak pojawiają się przekłamania na zegarze. Albo obejrzyj zegar na oscyloskopie z wyzwalaniem od długości impulsu albo daj kilkusekundową zwłokę czasową zaraz po resecie procka. Wtedy będziesz wiedział kiedy się zresetował.
  • Poziom 16  
    Procesor się nie resetuje (sprawdziłem przez podanie zwłoki na początku). Wymieniłem też stabilizator 5V.

    Położyłem na procesor mały wentylatorek z karty graficznej. Śmieci na terminalu zmieniły się po chwili na prawidłowe ciągi znaków. Zabrałem wentylator - znów mam śmieci na ekranie.

    Od początku zainteresowało mnie to, że grzeje się troszeczkę bardziej niż zwykły 51, ale nie zdziwiłem się bo przeciez jest znacznie szybszy. Nie jest to wysoka temperatura - zmierzyłem 42 stopnie.
    Przejrzałem czy któreś wyjście nie jest przypadkowo zwarte do masy czy zasilania - nie jest. Pobór pradu przez układ wynosi 117mA (nota katalogowa podaje 75 - 125mA dla 25MHz)
    Nie wyczytałem w nocie, że należy stosować na do niego chłodzenie :D - nie urządza mnie to.

    Podsumowując, sprawdziłem 5 egzemplarzy tych procesorów:
    - 89C420MCL (2 sztuki) - zawiesza się po sekundzie, chłodzenie nie pomaga;
    - 89C450NMG (2 sztuki) - działa, ale brak synchronizacji w transmisji, chłodzenie nie pomaga;
    - 89C420MNG (1 sztuka) - działa, bez chłodzenia traci synchronizację, z chłodzeniem działa prawidłowo.

    Zastanawia mnie jeszcze jedno. Wszystkie te procki łączą się bez problemu z loaderem, który otwiera port na 9600 i programują się oraz weryfikują bez żadnych przekłamań. Na tej samej prędkości otwieram potem port i dostaję śmieci...
    Używam MTK 2004 V2.4.04 do programowania.

    Kod programu chyba nie jest taki wymagający :)

    Code:

    #include <DS89C4xx.H>
    #include <stdio.h>

    sbit         led = P2^6;
    long          delay;
    unsigned char   int_count;

    void main(void)
    {
     //konfiguracja UART0
     SCON0=0x50;  //tryb 1 = taktowanie Timerem 1
     TMOD &= 0x0F; 
     TMOD |= 0x20; //timer 1 w trybie 8-bit auto reload
     PCON |= 0x80; //predkosc x 2
     TH1=0xF3;      //boudrate ustawione na   9614
     TR1=1;         //startuj generator
     TI_0=1;      //dla poprawnego startu pierwszego printfa
     

     //konfiguracja T2 dla przerwania migającego diodą
     T2CON=0x04;
     T2MOD=0xFC;
     RCAP2L=(unsigned char) -0xC350;
     RCAP2H=(unsigned char) (-0xC350>>8);

     ET2=1;
     EA=1;

     //czekaj sekunde
     delay=1000000;
     while(--delay);
     


     while(1)
     {
      RI_0=0;
      printf("Elektroda");
      //czekaj 100ms
      delay=100000;
      while(--delay);
     }
    }

    void t2przerw(void) interrupt 5
    {
     TF2=0;
     while(--int_count==0)
     {
      int_count=21;
      led^=1;   //miga diodą z okresem dokładnie 1s
     }
    }


    Dodano po 3 [godziny]:

    No i wszystko jasne! :D

    Nie napisałem jednej (okazuje się - ważnej) rzeczy. Program piszę w uVision3 V3.30a
    On do każdego projektu dodaje plik "rozruchowy" w ASM, kompilowany i potem uruchamiany w procesorze bezpośrednio po resecie. Zerowana jest tam pamięć, ustawiany stos, a w tym procesorze również konfiguracja.
    Skorzystałem z "Configuration Wizarda" który tworzy ustawienia w tym pliku - okazuje się, że zupełnie błedne. Wybierając "clock divide control" na "Direct mode (Crystal=clock)" w rzeczywistosci uzyskałem "x2 Mode". Nie tylko tu sa błędy, z tego co zauwazyłem to zamienione są też miejscami obszary inicjalizacji pamięci IDATA z XDATA. Nie szukałem dalej, "odptaszkowałem" wszystko w Wizardzie i ustawiłem konfigurację ręcznie w pliku.

    Moje procesory próbowały pracować przy częstotliwości 48MHz!!! Ponieważ zegar do taktowania liczników domyślnie brany jest sprzed mnożnika, ustawienia szybkości przerwań jak i transmisji szeregowej były jak dla zegara 24MHz - więc się zgadzało.
    Straciłem 3 dni, ale przynajmniej wiem jak się zachowują przetaktowane "Dallasy". DS89C420-MNG + wentylator działa normalnie z zegarem 48MHz :D Testowałem go przez ponad godzinę.

    P.S. Temperatura przy zegarze 24MHz spadła tylko o 3 stopnie.