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

ATMega8 - Nieprawidłowy odczyt z PINC5, możliwy konflikt z ADC?

mikmas 05 Sie 2014 18:37 1674 15
  • #1 13853557
    mikmas
    Poziom 18  
    W kontrolerach trochę już siedzę i aż wstyd mieć taki problem. Ogólnie wszystko działa poza odczytem z PINC1 i PINC5 (omówię tu problem z tym drugim). Zachowanie na pierwszy rzut oka wskazuje, że port "wisi" (nie jest podciągnięty opornikiem do +/-). Mój jest (sprawdzałem ohmomierzem) i pomiędzy PINC5 a masą mam 8kΩ. Na razie nic nie jest podłączone poza tym, więc nie ma nawet skąd łapać impulsów. Czy to wina tego, że portc wykorzystywany jest przez ADC?

    Oto kod [procedura przerwania timera]:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    ... kilka linijek niżej:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Oczywiście inicjalizacja DDRC jest:
    DDRC&=~((1<<DDRC5)|(1<<DDRC1));
    Jako, że odczyt jest wykorzystywany do dosyć pracochłonnych zadań reszta znajduje się w pętli głównej programu, jednak nie ma tam nic, co by zmieniało użyte powyżej zmienne.

    EDIT!
    Napisalem "Na razie nic nie jest podłączone poza tym [opornikiem], więc nie ma nawet skąd łapać impulsów." ale moderator widze mimo to wymaga schematu, wiec ok:
    ATMega8 - Nieprawidłowy odczyt z PINC5, możliwy konflikt z ADC?
  • #3 13853642
    mikmas
    Poziom 18  
    Jest podciągnięty zewnętrznie via opornik 8kΩ
  • #4 13853699
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie ma takich oporników. Jak jest podłączony przycisk i rezystor? Pokaż schemat.
  • #5 13854280
    mikmas
    Poziom 18  
    Nie ma przycisku. Jak wcześniej wspomniałem "na razie nie ma nic podłączone poza tym [opornikiem]". "Kostka" jest niepodłączona i tak samo wariuje PINC5 jak i PINC1 - oba podłączone opornikiem do masy

    EDIT!
    O PINC1 nie mówię, bo dodatkowo jest tam dioda zenera i opornik, bo wejście z założenia tam ma być 12v. Co nie zmienia faktu, że to nie jest podłączone pod jakiekolwiek impulsy
  • #6 13854645
    Konto nie istnieje
    Poziom 1  
  • #8 13855095
    mikmas
    Poziom 18  
    Cytat:
    Nieszczęsna Atmega8 może widzieć świat zewnętrzny tylko wtedy, gdy ustawisz kierunek (DDRx) jako wejście (0), PORTx jako 1 lub podłączysz zewnętrzny rezystor pull-up, czyli do zasilania, a nie do masy.

    Oj oj oj. Dlaczego nie do masy? Gdyby można było tylko do + to jak byś wykrył, że ktoś nacisnął mikrowyłącznik w takim układzie:
    ATMega8 - Nieprawidłowy odczyt z PINC5, możliwy konflikt z ADC?
    Ofcozz zamiast dolnego +5v mogę dać masę, jednak nie zawsze jest to możliwe.
    Cytat:
    Co zmierzyłeś jako 8k?

    połączenie PINC5-opornik-masa także z wypiętym kontrolerem, żeby sprawdzić opornik.
    Cytat:
    Ciekawi mnie jeszcze schemat z tą zenerką, co ma działać na 12V. Z doświadczenia mogę powiedzieć, że to nie jest dobry pomysł. Lepiej dać tranzystor (logiczny) w układzie OE.

    kwadratowy impuls z czujnika na wale korbowym silnika daje 12v. Daję zenerkę, żeby zbić go do 5v, to idzie do kontrolera. Dlatego też jakby było możliwe użycie jedynie opornika pull-up to bez tranzystora nie przeszłoby wykrycie tego impulsu.
    Jak będę w domu to faktycznie sprawdzę z tym pull-up-em, bo może faktycznie ten port jest jakiś specyficzny, ale zawsze dawałem pull-down (nawet w tym układzie dałem mikrowyłącznik dający +5v po wciśnięciu. Różnica, że na porcie B) i działało.
    Cytat:
    Podstawowe pytanie, czy zasiliłeś AVCC ?

    ARef i AVCC jest podpięcie do VCC
  • #10 13855714
    mikmas
    Poziom 18  
    Dlaczego? Wg dokumentacji
    Cytat:
    The minimum value represents GND and the maximum value represents the voltage on
    the AREF pin minus 1 LSB.

    Z tego co zrozumialem konwerter A/D da 10b liczbe reprezentujaca napiecie od 0 do AREF. W moim przypadku - 0v-5v. Chyba, ze cos zle zrozumialem?

    Sry za brak ogonkow polskich, ale cos mi sie zrobilo nagle z klawiatura i alt nie dziala.
  • #11 13855932
    piotrva
    VIP Zasłużony dla elektroda
    Dlatego, że AREF można "połączyć" z AVCC wewnętrznie (co nie jest problemem), ale można też połączyć go wewnętrznie z niższym napięciem odniesienia (2,56V lub 1,1V - nie pamiętam co jest dostępne w ATMega8) - wtedy mamy problem i zwarcie, a wystarczy tylko źle ustawić coś w konfiguracji ADC.
    Pin AREF powinien być "połączony" przez kondensator 100nF z masą przy wyborze napięcia odniesienia jako AVCC.
  • #12 13856351
    Mad Bekon
    Poziom 23  
    A tak z ciekawości, jak podepniesz woltomierz między GND a ten pin przez masę do GND to co Ci wykaże?
    Nie ma cudów, jeśli masz tylko taki prosty kod, nigdzie nie ustawiasz ADC ani I2C, musi działać.
    Może to i głupie, ale spróbuj też sprawdzić konfiguracje kompilatora czy to pod ten procesor kompilujesz.
  • #13 13865971
    mikmas
    Poziom 18  
    AREF odłączyłem całkowicie. Cały czas mam ten problem. Już serio nie wiem, co jest. Z innymi portami takiego problemu nie mam
  • #14 13867094
    kicajbas
    Poziom 32  
    Witam
    Pozostaje jeszcze możliwość częściowego "ubicia" ATmegi.
    Jeśli to nie dużo pracy to napisz jakiś kod wykorzystujący ten PIN jako wyjście do mrugania diodą, potem jako klawisz do czegoś tam; po prostu programowo przetestuj ten/te PIN(y).

    Pozdr.
  • #15 13867179
    piotrva
    VIP Zasłużony dla elektroda
    To może pomóc ale tylko w połączeniu z pomiarem napięć.
    Raz tak uszkodził mi się uC, że działał ale dawał 0,8 i 4,1 V na wyjściu:-)
  • #16 13872187
    mikmas
    Poziom 18  
    Zmierzyłem napięcie na tym pinie i jest ono w okolicy 2.3v. Nie mam pojęcia skąd, skoro jest tam opornik pull-down.

    Zrobiłem jak polecił kicajbas. Piny zachowują się poprawnie jak ustawię je jako wyjście i dam impuls.

    Po ustawieniu
    DDRC&=~((1<<DDRC5)|(1<<DDRC1));
    dałem również
    PORTC=~((1<<PORTC5)|(1<<PORTC1));

    port się "uspokoił", jednak jak dotknę palcem pina procesor zaczyna... niestabilnie pracować (!). Oprócz tego, że ma nawał odczytów to zaczyna się resetować oraz wchodzić w inne fragmenty kodu niż powinien.

    Pytanie - skąd te 2.3v? Dlaczego po dotknięciu palcem on odczytuje jakiekolwiek impulsy, skoro jest tam opornik? Może powinien on być mniejszy? Może port c jest przystosowany tylko do pull-up-ów?

    EDIT!
    MEA CULPA! Zimny lut był w drugim końcu płytki na podłączeniu tych oporników do masy. Miernik tego nie wyłapał. Dopiero jak zacząłem ruszać okazało się, co jest przyczyną
REKLAMA