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

Atxmega i stanu przycisku podłączonego do portu

22 Maj 2011 20:18 3129 16
  • Poziom 18  
    Witam wszystkich.
    Zaczynam programować uc XMEGA w języku C.
    Kiedyś programowałem atmegi, więc coś tam z programowania odrobinę wiem. Na początek chciałem sobie zestawić standardowo klawisz i diodę ale nie mogę sobie poradzić z wejściami.
    W atmega ustawiało się tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    ale w xmega nie mogę sobie z tym poradzić, robię tak
    Kod: c
    Zaloguj się, aby zobaczyć kod

    ale ciągle na pinie przycisku mam stan 0 i układ nie działa jak powinien.
    Czytałem nawet trochę o pull up i robiłem też tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i nadal jest 0 na tym pinie..
  • AM TechnologiesAM Technologies
  • Pomocny post
    Specjalista - Mikrokontrolery
    Dajesz najprościej jak można czyli:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    gdzie zamiast x w drugiej linii dajesz cyfrę od 0 do 7 odpowiadającą numerowi bitu (wejścia).
  • Poziom 18  
    Dzięki, pomogło.
  • AM TechnologiesAM Technologies
  • Poziom 26  
    A co jeśli stan przycisków "pływa" niezależnie od ustawień? Tzn podłączam pin do plusa i jest stan ustalony, ale jak puszczę i pin z niczym nie kontaktuje to wariuje. Nie wiem co z tym zrobić. Co może być przyczyną??
  • Poziom 26  
    No to oczywiste że włączyłem pullup, ale okazało się że blaszki obudowy przycisków
    sieją, jak je uziemiłem to się poprawiło, ale nadal nie jest idealnie, jak zbliżę palec do któregoś to skacze.
  • Moderator Mikrokontrolery Projektowanie
    jacynka84 napisał:
    No to oczywiste że włączyłem pullup, ale okazało się że blaszki obudowy przycisków sieją, jak je uziemiłem to się poprawiło, ale nadal nie jest idealnie, jak zbliżę palec do któregoś to skacze.

    Bo to nie wina przycisku, tylko zapewne złego podłączenia mikrokontrolera i/lub nie zaprogramowanych "antenek".
    Pokaż schemat Twojego projektu.

    "Uziemianie przycisku" - fajne - bez urazy :)
    Choć oczywiście w specyficznych warunkach, dużo zakłóceń w otoczeniu, długich przewodów ...
  • Poziom 26  
    Pomyliłem coś, otóż piny i obudowy przycisków są na +, piny uP załączam więc do VCC 3.3V, kabelki do przycisków nieco długie mogą się wydawać, 6-7cm.
    Może odnóża xmegi są jakieś wrażliwsze cy coś?
    A schemat jaki może niby być - przyciski na kabelkach do pinów i już.
    Do tego mam lcd i już. lcd z kabelkami do przycisków się nie przeplatają. Dotknięcie kabli przycisków powoduje właśnie skakanie stanu przycisków, ale takie same macanie kabli lcd nic nie powoduje. Między xmegę która jest pod lcd włożyłem blaszkę uziemioną, też jakby delikatnie pomogło na przyciski.
    Zasilanie nieźle filtrowane.
    Teraz bardziej mam problem jak poustawiać ADCA żeby mi mierzył cokolwiek, bo widzę pływający offset wielkości 19-22 , przy single ended i 8bit, port A4.
    Nie reaguje na przykładane napięcie, te ok 21 jest na każdym kanale porta.
  • Moderator Mikrokontrolery Projektowanie
    Skoro nie masz schematu, to pokaż dobre zdjęcia Twojego układu.
    Jeżeli zależy Ci na szybkim rozwiązaniu problemu, to sugeruję jednak schemat zrobić i pokazać.
    Tu można tyle prostych błędów popełnić (nawet przez przypadek) - naprawdę warto schemat mieć.

    No i zlikwidować "antenki", czyli ustawić jakiś stan na niewykorzystanych pinach.
  • Poziom 26  
    Atxmega i stanu przycisku podłączonego do portu

    Pomogło to ustawianie nieużywanych pinów, nie jest idealnie, ale jak nie będę macał samych przycisków tylko dam klawisze powinno być ok.
    Sami widzicie że to na żywca bez schematu lutowane.
    Docelowo ma być prosty oscyloskop, do moich amatorskich zastosowań :)
    Code:

    $regfile = "xm128a1def.dat"
    $crystal = 42000000                                         '44MHz max dla LCD T6963
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014

      Config Osc = Enabled
      Osc_pllctrl = &B00_0_10101                                'PLL 21x RC2Mhz internal
      Do
      Loop Until Osc_status.0 = 1
      Set Osc_ctrl.4                                            'PLL
      Config Sysclock = Pll                                     'PLL

    $hwstack = 64
    $swstack = 64
    $framesize = 64

    Config Graphlcd = 240 * 128 , Dataport = Porth , Controlport = Portj , Ce = 4 , Cd = 3 , Wr = 7 , Rd = 5 , Reset = 2 , Fs = 6 , Mode = 6

    Font Alias Portj.6
    Set Font

    Config Adca = Free , Convmode = Unsigned , Resolution = 8bit , Dma = Off , Reference = Intvcc , Event_mode = None , Prescaler = 8 , Ch0_gain = 1 , Ch3_inp = Single_ended , Mux0 = 4

    Cpu_ccp = &B11011000

    Dim Batt As Word

    Config Portf = Input
    Config Porta = Input
    Portb = &B11111111
    Portc = &B11111111
    Portd = &B11111111
    Porte = &B11111111
    Portf = &B11111111
    Portk = &B11111111
    Portq = &B11111111
    Do

    Cls : Cursor Off

    Batt = Getadc(adca , 4)

    Locate 1 , 4
    Lcd Batt , ""

    Locate 4 , 6
    Lcd Pinf.0 , ""
    Locate 4 , 5
    Lcd Pinf.1 , ""
    Locate 4 , 4
    Lcd Pinf.2 , ""
    Locate 4 , 3
    Lcd Pinf.4 , ""
    Locate 4 , 2
    Lcd Pinf.5 , ""
    Locate 4 , 1
    Lcd Pinf.6 , ""
    Waitms 1
    Loop
     

    A to kod, wiesz może jak ustawić ten adca? bo jakiś dziwny jest, nie reaguje, ma 0.28V podane, stan baterii, ale nie robi mu to nic różnicy, na porcie A4.
    pozdrawiam.
  • Moderator Mikrokontrolery Projektowanie
    Niestety na Xmega nie pracowałem, ale zapewne ktoś zaraz Ci pomoże.
    Dodatkowo BASCOM mnie nie lubi :)

    Co do zdjęcia szkoda, że jest nie ostre ... mówi się trudno :)
    Piszesz, że filtrowanie masz porządne, ale z tego co widzę chyba jednak nie masz kondensatorów bezpośrednio przy pinach mikrokontrolera. Opisz jak rozwiązałeś to filtrowanie.

    Co znajduje się w tych magicznych pudełkach klejonych taśmą?
    Jakieś źródło zakłóceń? Akumulatory?
  • Poziom 26  
    Przecież widzisz filtrowanie napięcia, ta płytka z kądziołkami 3ma, choć zbędne bo aku które właśnie widzisz te czerwone, prawie tego nie wymaga.
  • Moderator Mikrokontrolery Projektowanie
    jacynka84 napisał:
    Przecież widzisz filtrowanie napięcia, ta płytka z kądziołkami 3ma, choć zbędne bo aku które właśnie widzisz te czerwone, prawie tego nie wymaga.

    I to niestety właśnie jest przyczyna Twoich problemów. Brak wiedzy na temat zakłóceń, nie czytanie datasheet i błędne przeświadczenie, że mikrokontroler zasilany z baterii nie wymaga filtrowania zasilania. Jeżeli chcesz rozwiązać, swój problem szybko i skutecznie, przeczytaj powoli i dokładnie prawie wszystkie tematy z działu:

    Zasilanie i zakłócenia

    A później spójrz na swój projekt i zastosuj się do tej wiedzy.
    Jeżeli zrobisz to "po łebkach" to nadal będziesz miał problem i w Piekle Początkujących siedział :)

    I zrób schemat - to naprawdę pomaga - gdybyś go wrzucił przy pierwszym poście, już dawno ktoś wskazałby Ci przyczyny problemów.
  • Poziom 26  
    Tylko że całe zasilanie jest jak w tych poradach które zalinkowałeś, ale pewnie lepiej byłoby zrobić to na normalnym PCB, ale mi się nie chciało...
    Na pająka szybciej, teraz jakby się uspokoiło delikatnie, ale nadal nie wiem jak poustawiać adc, może przełożę nieco kodu z C.
    Dzięki za podpowiedzi.
  • Poziom 26  
    Kable od przycisków nieco za długie, łapią wszystkie zbliżenia rąk. Już naprawione, otóż jak zwykle poknociłem ustawienia pullup i output input, do tego załączyłem piny do GND i zadziałało prawidłowo, zero zakłóceń przycisków :)

    Ustawiłem
    Nieużywane piny i F tak i zadziałało:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Teraz jeszcze "tylko" ADC...
    Pozdrawiam i dzięki.