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

PIC18LF14K50 - PC nie wykrywa mikrokontrolera przez USB

Piotrush 31 Paź 2012 23:49 1323 9
  • #1 31 Paź 2012 23:49
    Piotrush
    Poziom 7  

    Hej. Mam za zadanie uruchomić komunikację pomiędzy uC (używam do tego celu PIC18LF14K50) a pecetem. Analizowałem przykłady Microchipa, próbowałem też uruchomić programy z internetu. Niestety te pierwsze są bardzo zagmatwane a tych drugich na mój model uC nie ma prawie w ogóle, więc postanowiłem przerobić ten http://www.waitingforfriday.com/index.php/Ope...c_HID_devices_based_on_the_PIC18F_and_Windows dobrze opisany framework oparty na bibliotekach Microchipa tak, aby działał na moim mikrokontrolerze. Po kilku dniach pracy i przewertowanych forach, wciąż jednak celu nie dopiąłem. Urządzenie nie jest wykrywane przez komputer. Wiem, że ciężko zlokalizować źródło problemu po tak krótkim opisie, ale być może są jakieś "typowe" błędy popełniane przy pierwszych krokach z protokołem USB i uC, które moglibyście przytoczyć. Jeśli nie, to prezentuję pierwszy aspekt, co do którego poprawności nie jestem przekonany - fusy:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    (podłączony kwarc jest 20MHz-owy).
    Z góry dziękuję za pomoc.

    0 9
  • CControls
  • #2 01 Lis 2012 08:57
    94075
    Użytkownik usunął konto  
  • CControls
  • #3 01 Lis 2012 09:29
    Piotrush
    Poziom 7  

    Dzięki, tak też próbowałem robić, jak pisałeś. Ponieważ jednak nie szło mi to najlepiej, przez poziom skomplikowania tych przykładów dostarczonych przez MCHP (muszę się wytłumaczyć, że nigdy wcześniej tak opornie mi nie szło :p), musiałem zmienić strategię ze względu na goniący termin ukończenia zadania. Nie wiem czy coś mi umknęło, ale te przykłady wyglądają na stworzone stricte pod ich płytki rozwojowe a ja ciągnę na własnym układzie z breadborda.

    Tak więc, proszę jednak o pomoc - być może źle ustawiłem wymienione wyżej fusy? Jeśli wg Was problem może tkwić gdzie indziej, oczywiście prześlę kod.

    0
  • #4 01 Lis 2012 11:13
    63404
    Użytkownik usunął konto  
  • #5 02 Lis 2012 00:48
    Piotrush
    Poziom 7  

    Co do dostosowywania, wykonałem poniższe czynności:
    - rejestry TRIS oraz PORT są poprawnie ustawione w kontekście wejść/wyjść (sprawdziłem programowo),
    - na zmienne globalne odpowiedzialne za dane wysłane i odebrane przez USB przydzieliłem odpowiednie miejsce w RAMie, zgodnie z ds mojego pica (konkretnie o adresie 0x280),
    - linker wziąłem z przykładów microchipa - ma nazwę modelu mojego uC więc chyba jest poprawny :)

    Jest jeszcze parę spraw, których nie jestem pewien a być może to one stoją na drodze do celu:
    - kondensator (470nF) podłączony do pinu VUSB jest foliowy, nie ceramiczny, jak zalecał ds - czy to może mieć w tym przypadku znaczenie?
    - w pliku HardwareProfile.h, dostarczonym przez microchipa, mam możliwość odkomentowania takich dyrektyw, jak: #define USE_SELF_POWER_SENSE_IO czy #define USE_USB_BUS_SENSE_IO, ale tego nie robię, ponieważ stwierdziłem że nie jest to potrzebne. (kodu póki co nie zamieszczam - biblioteki microchipa są tak skonstruowane, że jedna dyrektywa pociąga za sobą kilka bądź kilkanaście ifdef'ów w różnych plikach, więc kod zajmuje dużo miejsca. jeśli jednak ktoś stwierdzi że się przyda, to oczywiście wkleję). Wspomniane dyrektywy wiążą się oczywiście z metodą zasilania układu, ale próbowałem tak z zewnętrznym zasilaniem, jak i z usb - nic :(

    0
  • #6 02 Lis 2012 18:17
    Nagus
    Poziom 25  

    A jak ustawiłeś zegar pod ten kwarc 20MHz? W projektach Microchipa, w plikach HardwareProfile masz zdefiniowaną stałą CLOCK_FREQ na 48MHz, czyli pod kwarc 12MHz z PLL x4.
    Oczywiście wiesz, że zasilanie PIC18LF to max 3,6V?

    0
  • #7 02 Lis 2012 18:46
    Piotrush
    Poziom 7  

    O właśnie, może o to chodzi - CLOCK_FREQ mam ustawione na 48MHz, a PLL (zgodnie z wyżej wklejonymi fusami) mam uruchomiony. Z HardwareProfile.h:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    Mówisz, że to pod kwarc 12MHz - co w takim razie muszę zmienić? W 18LF14K50 nie mam wyboru mnożnika PLL, jak zatem zrobić z 20MHz 48MHz?

    (Co do zasilania - tak, mam stabilne 3,3V)

    0
  • #8 02 Lis 2012 19:18
    94075
    Użytkownik usunął konto  
  • #9 02 Lis 2012 19:25
    Nagus
    Poziom 25  

    Jak się nie da ustawieniami dzielnika i PLL ustawić żądanej częstotliwości to kwarc trzeba zmienić...
    Polecam rozdział 2.11 w DS.
    Seria 18Fxx50 i 18FxxK50 to dwie różne generacje i jest parę różnic w konfiguracji. To że 18F2550 dało się ustawić pod kwarc 20MHz, nie oznacza że w 18FxxK50 będzie to możliwe.

    0
  • #10 05 Lis 2012 17:19
    Piotrush
    Poziom 7  

    To jest to Panowie! Wielkie dzięki. Problemem był rzeczywiście kwarc. Z początku wydawało mi się, że coś jest nie tak, skoro mogę dobrać tylko PLLx4 a 4x20 to nie 48 :p Ale z drugiej strony nie miałem pod ręką 12MHz i przeważyło moje przeświadczenie, że dziwnym jest aby ten pic ograniczał kwarc zewnętrzny do 12MHz.. Nowe doświadczenie zebrane. Wszystko działa. Dzięki :)

    0