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

PIC16F84A - brak reakcji po wgraniu programu, wybór oscylatora dla kwarcu 4 MHz

Pocieszny 03 Cze 2004 12:49 2615 14
REKLAMA
  • #1 673381
    Pocieszny
    Poziom 38  
    Posty: 5220
    Pomógł: 229
    Ocena: 261
    Właśnie zacząłem bawić się w mikrokontrolery. Na początek postanowiłem użyć pic16f84 bo programator jest banalnie prosty a poza tym u mnie trudno jest kupić coś innego:)

    I mam problem. Wgrałem do niego przykładowy programik który powoduje miganie diod led na porcie b a drugi to taki który tylko ma je zaświecać. Użyłem programu MPLAB z nakładką o nazwie SourceBoost(konwertuje kod napisany w pascalu albo c na asemblera MPLAB).
    Ale niestety sprzęt nawet się nie odzywa.
    Kwarc ma 4 MHz (może jutro dołączę schemat układu).
    Jeszcze jedno pytanie. Podczas programowania wybieram rodzaj oscylatora. Jest LP RC XT i HS. Tylko nigdzie nie znalazłem opisu który jest do czego. Czy dla kwarcu należy wybrać XT?
  • REKLAMA
  • #2 673505
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Na stronie piclist.com znajdziesz programy dla początkujących w asemblerze. Z MPLABa możesz zaprogramować PICa tylko programatorami firmowymi.
  • #3 673859
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    zenobeusz napisał:
    Podczas programowania wybieram rodzaj oscylatora. Jest LP RC XT i HS. Tylko nigdzie nie znalazłem opisu który jest do czego. Czy dla kwarcu należy wybrać XT?
    Opisane jest w specyfikacji, dla 4MHz XP powinno być ok. Sprawdz jeszcze czy nie masz włączonego WatchDoga oraz czy napewno dobrze programujesz procesor.
  • REKLAMA
  • #4 675151
    Pocieszny
    Poziom 38  
    Posty: 5220
    Pomógł: 229
    Ocena: 261
    Juz wszystko ok. Okazało się że ten program SourceBoost robił sobie projekt, zapisywał a potem kiedy juz coś zmieniłem nie potrafił nadpisać plików tylko zostawiał stare hexy, które w tym wypadku nie działały.
    A te rezonatory - poszukałem w opisach po angielsku i znalazłem. Nie wiem jak wcześniej szukałem ale chyba to przegapiłem.

    Czy da się podłączyć do tego samego portu (np b) jednocześnie guziki i diody led?

    A co do strony www - Nie ma czegoś po polsku?
  • #5 676929
    gummis
    Poziom 15  
    Posty: 162
    Pomógł: 4
    Ocena: 1
    zenobeusz napisał:
    Juz wszystko ok. Okazało się że ten program SourceBoost robił sobie projekt, zapisywał a potem kiedy juz coś zmieniłem nie potrafił nadpisać plików tylko zostawiał stare hexy, które w tym wypadku nie działały.
    A te rezonatory - poszukałem w opisach po angielsku i znalazłem. Nie wiem jak wcześniej szukałem ale chyba to przegapiłem.

    Czy da się podłączyć do tego samego portu (np b) jednocześnie guziki i diody led?

    A co do strony www - Nie ma czegoś po polsku?

    Pewnie ze sie da.Przeciez kazda linie portu mozesz skonfigurowac niezaleznie jako wyjscie lub wejscie za pomoca rejestru TRISB.Uwazaj tylko na jedna sprawe na ktora duzo ludzi sie daje zlapac.Przy zapisie do portu wartosci robione jest tak, odczytuje stany z nozek przetwarza daną i zapisuje.Czyli jak zrobisz ustawienie lub wyzerowanie jedneje lini np. bcf PORTB,0 to po wykonaniu tej czynnosci moze sie okazac ze stan rejestru PORTB zmienil sie nie tylko na tym bicie.
  • #6 680121
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    :arrow: Gummis
    Domyślam się, że mówisz o instrukcjach typu RMW, do których bcf ani bsf nie należą.
    Pracuję przy PICach już dość długo a opisywana przez Ciebie sytuacja mnie nigdy nie dotknęła. Mógłbyś nam nieco przybliżyć ten problem i jakoś uzasadnić w oparciu o budowę wewnątrzną pinów portu ?

    Marmur99
  • REKLAMA
  • #8 680273
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Aaaa, no to chodzi o ten szczególny przypadek gdy po zabawie ze stanami na pinach, zmieniony zostanie kierunek portu.
    Pewnie dlatego nigdy się z tym nie spotkałem bo zazwyczaj zaraz po nieoczekiwanej* zmianie kierunku portu zawsze ustawiam na nim konkretną wartość. Jak to mówią - przezorny zawsze zabezpieczony :D

    *nieoczkiwana zmiana kierunku to dla mnie zmiana kierunku w środku programu.

    Pozdrawiam,

    Marmur99
  • REKLAMA
  • #9 680542
    gummis
    Poziom 15  
    Posty: 162
    Pomógł: 4
    Ocena: 1
    Ello! Tak zgadza sie!! Ale bcf i bsf jest instrukcja RMW. Przy ustawianiu bitu procesor odczytuje caly port ustawia odpowiedni bit i zapisuje caly port.Co do tego ze nie masz problemow z przelaczeniem tlo sie zgadzam ale pomysl co sie
  • #10 680569
    gummis
    Poziom 15  
    Posty: 162
    Pomógł: 4
    Ocena: 1
    Ja pisze o takiej sytuacji:
    ustawiam np. na jednej lini zero, i poprzez ustawienie lub wyzerowanie odpowiedniego bitu TRISx ustawiam stan na wyjsciu (linia podpieta rezystorem).Stan tris normalnie jest 1 co daje jedynke na wyjsciu.Gdy jednak ustawiam lub zeruje inna linie w tym samym porcie wtedy stan z lini podpietej rezystorem odczytany zostaje jako 1 i potem wpisany jako jeden.w ten sposob na wyjsciu pojawi sie mocne 1.Co jest nieprawidlowe bo ma byc zero w bicie rejestru PORTx.
    Piszesz ze ustawiasz ponownie zero.ok.ale ja jeszcze wylaczam system przerwan miedzy wyzerowniem bitu PORTx a odczytam stanu lub zapisem poprzez zmine bitu TRISx. Bo przeciez przerwanie tez moze ci sie wtracic.

    A tak swoja droga to my sie chyba spotkalismy osobiscie?Cos mi sie kojarzy twoj nick.
  • #11 680575
    gummis
    Poziom 15  
    Posty: 162
    Pomógł: 4
    Ocena: 1
    troche nie rozumiem jedne rzeczy.Kiedy moze wystapic nieoczekiwana zmiana kierunku? Nieoczekiwana zmiana PORTx,y to rozumiem ale kierunku???
  • #12 680870
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    gummis napisał:
    poprzez ustawienie lub wyzerowanie odpowiedniego bitu TRISx ustawiam stan na wyjsciu (linia podpieta rezystorem).


    Chyba wiesz, że rejestr TRIS nie służy do ustawiania stanów na wyjściu tylko do określania kierunku przesyłania danych. W sytuacji, którą opisujesz faktycznie tak będzie, ale to jest raczej niestandardowe wykorzystanie rejestrów bo to rejestrem TRIS ustawionym na 0 ustawiasz pin jako wyjście a dopiero potem do rejetstru PORT wpisujesz pożądaną wartość.

    gummis napisał:

    Stan tris normalnie jest 1 co daje jedynke na wyjsciu.


    I znowu tylko w tym przypadku bo zazwyczaj TRIS=1 daje na wyjściu stan wysokiej impedancji. Faktycznie, gdy podłączysz rezystor to masz jedynkę jak znalazł.

    gummis napisał:

    w ten sposob na wyjsciu pojawi się mocne 1.


    Drogi Sylwku, nie pojawi się mocne 1 bo Ty nadal masz ustawiony port jako wejście (TRIS=1) czyli stan wysokiej ignorancji. A w tym stanie rejestr portu jest odłączony za pomocą bramki trójstanowej. Faktycznie w rejestrze portu pojawi się inna wartość, ale Tobie przecież to nie przeszkadza bo przy następnym odczycie portu wartość ta się zaktualizuje.
    Opisywany w dokumentacji problem dotyczy tylko tej sytuacji, w której przełączysz nagle potem port na tryb wyjściowy i pojawi się na nim nie ta dana, której oczekiwałeś. I dlatego pisałem, że zawsze po takiej operacji ustawiam stan na nóżce.


    Marmur99
  • #13 703646
    Pocieszny
    Poziom 38  
    Posty: 5220
    Pomógł: 229
    Ocena: 261
    Jeszcze jedno pytanie jak podłączyć klawiaturkę 10 -12 klawiszy do portu b w picu?
    Wymyśliłem taki system że mam trzy wyjścia(abc) i cztery wejścia(ABCD). Jest taka matryca. Kiedy naciskam guzik zwiera się jedno wejście z jednym wyjściem( na przykład aA Cd itp). Pic podaje na kolejne wyjścia stan 0. Jeśli guzik jest zwolniony, to jest na wej stan 1. A jeśli jest wciśnięty, to stan 0 z wyj przpisuje na wej. Kiedy więc trafi na wciśnięty guzik, przepisze stan zero z wyzerowanego wyprowadzenia na konkretne wejście. W prosty sposób przycisk da sie namierzyć.

    Chyba nieco zamotałem, ale może ktoś wie o co chodzi.
    I zrobiłem to i się spierniczył pic.
    Co było nie tak? Nie mam kasy żeby tak ciągle eksperymentować i fajczyć układy...
  • #14 703657
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Jak na mój gust to pic (czy jaki kolwiek inny procesor) powinien się smażyć zdrowo jak naciśniesz 2 klawisze z tej samej kolumny (procesor ustawia stany "rzędami", dzieje się tak dlatego że na jednym pinie jest 0 a na drugim 1, jeśli nacisniesz 2 klawisze to poprzez połączenie kolmny płynie prąd, a obwód się zamyka poprzez dwa tranzystory na wyjściu pinów. Ja bym spróbował wystawiać jedynke logiczną na jednym rzędzie a na pozostałych rzędach stan wysokiej impedancji.
  • #15 703888
    gummis
    Poziom 15  
    Posty: 162
    Pomógł: 4
    Ocena: 1
    Nie kazdy procesor tylko ten ktory ma porty typu bi-directional.W 80C51 to by dzilalalo.Natomiast wiekszosc portow w PICU ma charakter bi-directional.Wtedy mozesz zrobic tak jak napisal elektryk choc ja wole inne rozwiazanie gdyz wszedzie tam gdzie moge unikam przelaczania kierunkow portow.Wiec doloz po jednej diodce szeregowo z portem wyjsciowym (katoda do pinu)co spowoduje ze tylko masa bedzie wymuszna z tej strony.Nastepnie tam gdzie sa wejscia musza byc rezystory podpinajace do Vcc(PORTB ma wbudowane).

Podsumowanie tematu

✨ Rozpoczęcie pracy z mikrokontrolerem PIC16F84A napotkało problem braku reakcji po wgraniu programu migającego diodami LED. Użyto kwarcu 4 MHz oraz programatora i oprogramowania MPLAB z nakładką SourceBoost, która generowała pliki hex, lecz nie nadpisywała ich poprawnie, co powodowało błędy w działaniu. Wybór oscylatora dla kwarcu 4 MHz powinien paść na tryb XT zgodnie ze specyfikacją. Poruszono także kwestie konfiguracji portu B, gdzie można jednocześnie podłączyć diody LED i przyciski, jednak należy uważać na sposób zapisu i odczytu stanów portu, zwłaszcza przy użyciu instrukcji RMW (bcf, bsf), które odczytują i zapisują cały port, co może prowadzić do nieoczekiwanych zmian stanu. Dyskutowano o problemach z ustawianiem kierunku portu (rejestr TRIS) i wpływie na odczytywane wartości, podkreślając, że TRIS służy do określania kierunku (wejście/wyjście), a nie do ustawiania stanów logicznych. W przypadku podłączania klawiatury matrycowej do portu B zaproponowano system skanowania macierzy z trzema liniami wyjściowymi i czterema wejściowymi, jednak zwrócono uwagę na ryzyko zwarć przy jednoczesnym naciśnięciu wielu klawiszy i konieczność stosowania stanów wysokiej impedancji oraz rezystorów podciągających. Zalecane jest unikanie częstego przełączania kierunku portów i stosowanie diod szeregowych w celu ochrony układu.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA