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.

ustawianie gpio w pic10f222

pirat_83 31 Sty 2010 00:25 1901 9
  • #1 31 Sty 2010 00:25
    pirat_83
    Poziom 11  

    Witam,
    mam następujący problem. Próbuję odpalić komunikację na kształt SPI na tym uC a procek nic nie wysyła.
    Jak podejżałem nóżkę MISO (uC pracuje jako Slave) to chaotycznie zmienia stan, tak jak by się resetował. Następnie wpadłem na pomysł, że wyłącze WDT, i dalej to samo.
    Niewiem zabardzo co zrobić, próbowałem pisać w asm, ale nieznam za dobrze MPLAB i teraz aby stworzyć projekt w asm a nie jak dotychczas w c kompilator wyrzuca mi błedy konfiguracji.
    Poniżej zamieszczam fragment kodu, z konfiguracją portu GPIO

    Code:

    #define SS   GP2      //   1
    #define SCK  GP1      //   1
    #define MISO GP0   //   0


    #define MISO_L GP0=0
    #define MISO_H GP0=1

    void Set(void)
    {
     OPTION = 0x88;
     ANS0 = 0;
     ANS1 = 0;
     temp = GPIO;
     TRISGPIO = 0x0e;
     GP0 = 0;

    }

    procedura Set jest wywoływana na początku do ustawień portu uC.
    Realizacja SPI jest przy pomocy innej procedury.
    Proszę o podpowiedź co może być przyczyną, że nic nie chce wysłać?
    Kod jest przeniesiony z grubsza z AVR, na którym wcześniej pracowałem.
    Sam rejestr przesuwny działa w stu procentach jak sobie tego życzę.
    W tej aplikacji SCLK ma około 16 kHz.
    Próbowałem nawet wymuszać MISO (wy) by przyjmowało taki stan jak SS (we), i w zasadzie na kilka uruchomień może raz poprawnie kopiował stan na linii SS a tak zazwyczaj MISO pozostaje w stanie wysokim.
    Za któtki daje mu czas na inicjalizacje? jest kilka ms, więc powinno spokojnie wystarczyć.
    Z góry dziękuję

    0 9
  • #2 31 Sty 2010 13:54
    adamwesola
    Poziom 24  

    Procesor jest slejwem, tak ? Co w takim razie jest masterem ?
    Czy slejw dostaje poprawne sygnaly (ss i clkock) do rozpoczecia transmisji ? Czy "umie" je rozpoznac ? Czy program w 10f220 prawidłowo wysyla dane ? od lsb/msb ? czy zgodnie z oczekiwaniem mastera ?
    Na avr-ku działało ? po co zmieniasz ?

    0
  • #3 31 Sty 2010 14:02
    pirat_83
    Poziom 11  

    Witam,
    Tak, jak najbardziej jestr slejwem. Masterem jest inne urządzenie.
    Układ współpracuje poprawnie z prototypem na avr, stąd po przeniesieniu kodu, pozostaje mi poprawne ustawieni portu (kierunków) do komunikacji. CO może by przyczyną, że on tak szaleje?
    Oczywiście linia CS,SCLK,MISO,Vd,GND jest właściwie podłączone i przyporządkowane w kodzie.
    Wejścia anologowe zamieniłem na cyfrowe ANxx = 0.

    Dodano po 1 [minuty]:

    PS: zmieniam, ze względu na chęć poznania nowej rodziny i gabaryt(sot23)
    Pozdrawiam

    0
  • #4 31 Sty 2010 17:31
    adamwesola
    Poziom 24  

    Czy mclr jest wyłączony lub podpiety pod vcc ? bo będzie się resetował, waczdog na pewno wyłączony ? W asemblerze jest to widoczne " __CONFIG _MCLRE_OFF&_CP_OFF&_WDT_OFF".
    Twoja konfiguracja gpio jest w porządku, a takie wariowanie będzie (jest) widoczne tylko i wyłacznie na pinie pracującym jako wyjscie - także z pewnościa jest on wyjsciem. Czy nie zagłebiasz gdzieś więcej niż 2 skoków do podprogramów ? Stos jest tu tylko 2 poziomowy. Na razie tyle przychodzi mi do głowy.

    0
  • #5 31 Sty 2010 17:43
    pirat_83
    Poziom 11  

    Cześć,
    udało mi się rozwiązać problem dokładając jeszcze kilka rzeczy do procedury Set();
    MCLR nie jest podpięty do niczego, łoczdoga wyłączyłem. Nie wiesza się, ale wyszła jedna ciekawa zależność.
    To co w avr nie było problemem, tutaj jest dość sporym, mianowicie, bardzo dużo czasu pochłania mu realizacja rejestru przesuwnego wraz z wystawieniem odpowiedniego MISO. Przez to kod nie działał prawidłowo. Dopiero na oscyloszkopie zobaczyłem, że samo przesunięcie fazy (tak to nazwijmy) przy kopiowaniu przez MISO stanu SCLK wynosi około 10 us. to bardzo dużo.
    Tam, gdzie mogłem, zrezygnowałem z pętli while(...). Z moich spostrzerzeń małe attiny jest dużo szybsze od nich. Może to kwestia kiepskiego kompilatora, fakt, bo tylko w asm można by obliczyć czasy poszczególnych pętli.
    Dzięki za zainteresowanie.
    Pozdrawiam

    0
  • #6 31 Sty 2010 18:10
    adamwesola
    Poziom 24  

    Przy zegarze 4MHz jedna instrukcja trwa 1us (niektóre, nieliczne 2us), mam procedurki w asm , wysłanie 1 bajta trwa 66us - to chyba niezły wynik ?

    0
  • #7 31 Sty 2010 18:24
    528649
    Użytkownik usunął konto  
  • #8 31 Sty 2010 18:30
    pirat_83
    Poziom 11  

    ten ma zegar 8MHz;
    Macie racje Panowie, są prostsze i tyle, ale przyznaje, że są całkiem niezłe. W dodatku w cale nie jest tak łatwo je uszkodzić, ani zablokować. Póki co mi się to nie udało.

    0
  • #9 31 Sty 2010 18:43
    528649
    Użytkownik usunął konto  
  • #10 26 Cze 2010 20:17
    pirat_83
    Poziom 11  

    Problem rozwiązany.
    W ustawieniach konfiguracji wybrałem podciągnięcie wewnętrzne do Vcc, i właściwy wybór kompilatora co by nie wyrzucał mi błędów :)
    Dziękuję i pozdrawiam[/code]

    0