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

pic 16f877a nie startuje - dlaczego?

poorchava 22 Lip 2010 01:21 3608 25
  • #1 22 Lip 2010 01:21
    poorchava
    Poziom 18  

    Udało mi się załadować program do mikrokontrolera, ale nie chce sie on wykonać. 16f877a nie ma wewnętrznego iscylatora, więc jest potrzebny zewnetrzny. Próbowalem już chyba wszystkich opcji możliwych ale pic za nic na świecie nie chce ruszyć. Próbowałem kryształów 4 i 16 Mhz z kondensatorami i bez, ukladu RC (10k i 100nF) i nie program dalej nie rusza. Zasilanie jest podłączone do obydwu par pinów zasilających. MCLR programatora odlaczyłem i próbowałem podciągać do Vdd rezystorem 10k ale to nic nie daje. Układ po prostu nie chce ruszyć za cholerę.

    Program jest banalny:


    Code:

    void main (void)
    {
         TRISA=0;
         PORTA=0;
         
         while(1)
         {
                 PORTA=~PORTA;
                 delay_ms(500);
         }
    }


    korzystam z kompilatora MikroC.


    Jest jakis kruczek, o którym nie wiem?

    0 25
  • #3 22 Lip 2010 06:49
    Doktor_UC
    Poziom 9  

    Kolega SP8JZ słusznie prawi: podłączając kryształ 16 MHz radzę się upewnić, że jest zaznaczony bit HS w fuse bitach, a układ WDT jest wyłączony, czyli bit WDTEN odkliknięty.

    0
  • #4 22 Lip 2010 10:01
    poorchava
    Poziom 18  

    W ic-progu jest odznaczony czyli chyba wyłączony. Próbowałem podłączać z kondensatorami 15 i 27 pF oraz bez kondensatorów ale klapa. Oscylator ustawiony na HS, fusebity wszystkie wyłączone (odznaczone) poza BODEN i PWRT. Czy kryształy do stosowania z picami muszą być jakieś szczególne? Bo staram się użyć tych samych co do AVR-ów.

    0
  • #5 22 Lip 2010 16:02
    mkaczor
    Poziom 15  

    Domyslnie PORTA i PORTE sa wejsciami analogowymi przetwornika A/D. Nalezy wpisac 0x06 do ADCON1 aby przestawic PORTA na cyfrowy (EXAMPLE 3-1 w nocie Microchipa).

    0
  • #6 22 Lip 2010 17:40
    SP8JZ
    Poziom 33  

    Kolego od dawna używasz icproga? Jaki masz programator? Kiedyś użyłem kilka razy tego programu i wychodziły mi cuda na drutach również przy picach

    PS. właśnie zrobiłem test odczytałem pica w icprogu i nie odczytał mi fusebitów po prostu wszystkie są odfajczone, a na pewno mam ustawiony FOSC1 i WDT na ON. Być może nie umiem tego zrobić, ale program robił mi kiedyś dziwne rzeczy i radzę go nie używać. Ustaw sobie po prostu FOSC1 (HS crystal) wg poniższego linku z użyciem ponyprog i kwarc powinien ruszyć. Zakładka "security and conf. bits". Fajka oznacza bit=0
    Do sondy oscyloskopu/częstościomierza podłącz jakieś kilkadziesiąt pF, aby nie obciążać oscylatora

    https://www.elektroda.pl/rtvforum/viewtopic.php?t=1700087&highlight=fosc1&sid=#8221078

    0
  • #7 22 Lip 2010 23:41
    Doktor_UC
    Poziom 9  

    Ciekawe, czy dowiemy się, co w końcu było nie tak, i czy program ruszył. Jeśli to wina rezonatora, to może pomóc także wstawienie rezystora na OSC2. Ale prawdę mówi też kolega mkaczor, że kiepski port wybrałeś do prób, poorchava.

    0
  • #8 23 Lip 2010 03:26
    poorchava
    Poziom 18  

    Wreszcie zjawiłem sie w domu, poeksperymentowalem i tak:
    dodanie linijki ADCON1=0x06; nic nie dało, tak samo jak zmiana na port B, c czy D.
    Po odłączeniu MCLR programatora i podciągnięciu pinu 1 do vdd a następnie dotknięciu obudowy kryształu palcem dioda się zapala, ale nic więcej. Program i fusebity są wgrane w porządku: sprawdzałem w ic-progu i picpgm i jest dokładnie tak samo. Rezystor 270R wstawiałem na osc2 ale to nic nie dało.

    0
  • #9 23 Lip 2010 03:38
    SP8JZ
    Poziom 33  

    Bo to ma być rezystor rzędu kilku mega. Ale Ty kolego masz wogóle jak zmierzyć ten oscylator, bo już się pogubiłem?

    0
  • #10 23 Lip 2010 03:54
    poorchava
    Poziom 18  

    Niebardzo mam jak zmierzyć ten oscylator. A co do rezystora, to nigdzie nie było napisane jaki on mna być, tylko że może być konieczne podłączenie.

    edit:
    sprawdziłem, podlączyłem 2x 500k szeregowo między osc2 a kryształ i zmieniło sie tyle, że bardzo rzadko wzbudza się przy dotknieciu palcem.

    0
  • #11 23 Lip 2010 06:51
    SP8JZ
    Poziom 33  

    Qrde weź sobie najpierw uruchom baseboard, a dopiero potem pisz ten kod. Oscylator ma działać nawet jak nie ma kodu w środku czaisz. PORTB, kwarc HS. Skompliowałem sprawdziłem i działa. Wrzuć to do pica, podciągnij se diodę przez 1kΩ do Vcc dioda miga znaczy jest OK.

    Code:
    void main()
    
            {
            TRISB = 0 ;
            for(;;)
                    {
                    PORTB = 0xff ;
                    Delay_ms(500) ;
                    PORTB = 0 ;
                    Delay_ms(500) ;
                    }
            }

    0
  • #12 23 Lip 2010 06:57
    Doktor_UC
    Poziom 9  

    Czyli wszystko wskazuje na to, że coś jest nie tak w połączeniach układu. Oczywiście teraz powinny nastąpić prośby o schemat poorchavy, ale aby nie marnować czasu zamieszczam dla porównania schemat najprostszego układu, jaki ze studentami budujemy na pierwszych zajęciach z programowania mikrokontrolerów.

    pic 16f877a nie startuje - dlaczego?

    Oczywiście linię MCLR można, jak to stosuje poorchava, bezpośrednio podłączyć do VDD. No i najprostszy program dla tego układu (kompilator mikroC).

    Code:

    void main (void)
    {
         TRISD=0;
         PORTD=0;

         while(1)
         {
                 PORTD=~PORTD;
                 Delay_ms(500);
         }
    }

    Brak mi pomysłów. To po prostu musi działać. Chyba, że jak sugeruje SP8JZ, coś jest nie tak z programem ładującym. Nie znam icproga, ja stosuję PICkita lub WinPic800.

    0
  • #13 23 Lip 2010 07:10
    SP8JZ
    Poziom 33  

    Może jeszcze poszukać harmonicznych z oscylatora na radiu UKF :D
    Odkąd icprog wyczyścił mi mikrowire przy odczycie nie chcę mi się o nim gadać

    0
  • #15 24 Lip 2010 03:15
    SP8JZ
    Poziom 33  

    Jest to sprzętowy RESET Link. TPrzecież napisałeś, że podciągnąłeś go do Vdd.
    Twój pierwszy kod działa na PIC16F84, z tym że ten procek nie ma rejestru ADCON a jedynie TRISA i PORTA, w 16F877 domyślnie wyjścia cyfrowe są od RA4. Aby ustawić PORTA cyfrowy trzeba dodatkowo wyłączyć komparatory:

    Code:

    ADCON 1 = 0x06;
    CMCON   = 0x07; //wyłącza analogowe komparatory
    TRISA   = 0x00;

    0
  • #16 24 Lip 2010 07:55
    Doktor_UC
    Poziom 9  

    Tak, to prawda, układ przy MCLR daje czas na wystartowanie mikrokontrolera. Dodatkowym atutem tak podwieszonej linii MCLR - dla mnie najważniejszym - jest to, że nie trzeba jej odłączać na czas programowania procesora. Podwieszenie MCLR tylko poprzez rezystor PICkit2 czasem akceptuje, a czasem się złości, i wtedy trzeba linię odłączać. Ale, jak już pisałem, MCLR można bezpośrednio podłączyć do VDD. Pochwal się, poorchava, czy w końcu układ Ci ruszył?

    0
  • #18 24 Lip 2010 10:32
    dioda1000
    Poziom 27  

    W ten sposób jak opisujesz możesz bawić się i kilka lat.
    Podstawa to co zapiszesz to samo masz odczytać. /100 na 100/
    Jeśli jest inaczej zmień programator.
    poz.dioda

    0
  • #19 24 Lip 2010 16:17
    kemot55
    Poziom 30  

    Sugestia: zamontuj na programatorze, pomiędzy GND a linią zegara (programatora) kondensator do 50pF (blisko procesora). Jeżeli masz przekłamanie odczytu typu procesora (raz jes taki a raz inny) to na 99% problemem jest przewód łączący programator z Twoim procesorem - kilka razy to już widziałem.

    0
  • #20 25 Lip 2010 01:09
    poorchava
    Poziom 18  

    Jako 16f87A rozpoznaje go PICpgm i WxPIC, icprog nie ma tej funkcji. Generalnie przy pomocy ic-proga odczytuję to samo co zapisałem, ale juz przy pomocy pic-pgm nie mogę zrobić porawnie nic poza odczytem (błąd weryfikacji).

    Myslałem, że to wina kompilatora, ale programy wygenerowane innymi kompilatorami też nie działają. Wymieniałem kość z 7407 w programatorze, ale nic to nie dało. Programator to schaer+ przerobiony tak, że podaje stałe zasilanie (jak było sterowane z komputera, to w ogóle nie chciał działać).

    Jak będę miał trochę czasu, to spróbuję zmajstrować któryś z programatorów na port szeregowy i opiszę skutki. Aktualny programator jest zbudowany na płytce drukowanej, aczkolwiek zaprojektowanej przeze mnie, nie tej ze strony autora. Zakładam, że kabel z portu lpt do programatora o dł. ~0.5m nie stanowi problemu. Pic siedzi w płytce stykowej, co również chyba nie ma znaczenia (tak sądzę... układom atmela to zupelnie nie przeszkadzało)

    Generalnie uszkodzenie układu wykluczam, bo wymieniałem łącznie 3 egzemplarze i nic sie nie zmienia.

    0
  • #21 25 Lip 2010 01:52
    SP8JZ
    Poziom 33  

    Zmierz napięcie kluczowania MCLR, jeśli odbiega od 13V też mogą wychodzić dziwne rzeczy.
    Looknij Tutaj jest podobny przypadek. Pytałem na początku jaki masz programator.

    0
  • #23 25 Lip 2010 02:27
    SP8JZ
    Poziom 33  

    Zobacz czy nie opada przy komunikacji, 13,2 jest OK. Mi w ten sposób JDM pamięć OTP w kosmos posłał

    poorchava z tym wszystkim już byś 100 razy tą diodą zamrugał

    0
  • #24 26 Lip 2010 21:45
    poorchava
    Poziom 18  

    chwilowo zawieszam próby na kilka dni, a potem zmontuje jakiś inny programator (JDM, com84 albo cos podobnego) a przy jego pomocy pickita. No chyba że będzie przypływ $$$ to wtedy może gotowego pickita zakupię. W każdym razie jak coś nowego wyniknie, to dam znać. Spróbuję też pożyczyć oscyloskop i poobserwować przebiegi sygnalów.

    0
  • #25 26 Lip 2010 22:34
    Urgon
    Poziom 36  

    AVE...

    Moja rada: kup sobie lepiej gotowy programator, albo poproś kogoś o zaprogramowanie Twojego PICa do klona PICKita(to drugie mogę Ci zrobić od ręki, jeśli tylko podeślesz mi odpowiedniego PICa i plik źródłowy). Ja wolałem zainwestować w PICKita 3 niż się denerwować, gdy programator nie chciał działać z winy sprzętu, oprogramowania i błędów montażu...

    0
  • #26 30 Wrz 2010 19:52
    bednyk
    Poziom 12  

    Wracając jeszcze do PIC Kita 3, jakiego używasz kompilatora C do programowanie dsPIC? Czy ma on jakieś ograniczenia co do ilości linijek kodu?

    0