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

Poblem z ATMEga32 - nie podciaga wyjść pod VCC

galczys 28 Wrz 2009 20:34 1335 14
  • #1 7068228
    galczys
    Poziom 12  
    Witam.
    Jestem nowym użytkownikiem forum, a także nowicjuszem jeśli chodzi o programowanie mikrokontrolerów.

    Mój problem polega na tym że napisałem prosty program:

    #include <avr/io.h>

    int main(void)
    {
    /* Wszystkie linie portu D będą wyjściami */
    DDRD = 0xFF;

    /* Linie portu B będą wejściami z podciągnięciem do VCC */
    DDRB = 0x00;
    PORTB = 0xFF;

    /* Początek nieskończonej pętli */
    for(;;)
    {
    /* Przepisanie zawartości PINB do PORTD */
    PORTD = PINB;
    }
    }

    I wciąż wynik uzyskuję:
    PORTD = 0xF7

    I nie wiem czemu tak się dzieje. Dla różnych portów otrzymuję rożne wyniki. Dodamy tylko że sprawdzam to na diodach na zestawie Kamami ZL3AVR.

    Jak podłącze np przycisk pod port B3 to program w ogóle na nie go nie reaguje.

    Mam przed sobą 2 ATMEgi i obie reagują tak samo.

    Był bym wdzięczny o wyjaśnienie mi tego.
  • #2 7068660
    r06ert
    Poziom 25  
    W menu project/konfiguration options wybrałeś właściwą atmegę? Rozumiem ze atmege programujesz. ;)
    Pozdrawiam.
  • #3 7069046
    tmf
    VIP Zasłużony dla elektroda
    To zmierz potencjal na PB3 i PD3 kiedy procek jest w resecie (powinno plywac). Jesli masz ustalony poziom niski to znaczy, ze gdzies jest zwarcie.
  • #4 7069256
    galczys
    Poziom 12  
    Tak, na pewno wybrałem właściwą atmege, dla pewności sprawdziłem. Do pisania programów używam AVR Studio, świeżo pobrane ze strony producenta.

    co do napięć. to przy normalnej pracy tego programu na porcie PB4 ( bo o ten port pierowotnie rozchodzi się, w poprzednim poście pomyliłem się ) jest stan niski (około 1.5V ) gdy na innych portach B jest wysoki (ok 5,7V). Tak wiec i na PD$ jest niski.
    Co do tego pływania, to nie wiem dokładnie o co chodzi, ponieważ jak wcisnę reset to na wszystkich portach jest stan ustalony. CO ciekawe na niektórych niski, a na niektórych wysoki ( jak np na PD0). Taka sytuacja jest na obu atmegach.
  • #5 7069522
    r06ert
    Poziom 25  
    a jakim napięciem ją zasilasz?
  • #6 7069538
    galczys
    Poziom 12  
    Cała płyta zasilana jest przez uniwersalny zasilacz stabilizowany ustawiony na 9V. A dziewięć V, ponieważ taka wartość jest podana przez producenta płyty.
  • #7 7069654
    _Robak_
    Poziom 33  
    No prosze, a myslalem ze sezon na grilla sie skonczyl :) Domyslam sie ze na procka napiecie nie idzie ze stabilizatora bo
    Cytat:

    gdy na innych portach B jest wysoki (ok 5,7V)

    Ale nie martw sie, mi sie dopiero udalo uszkodzic atmege przy 33V (az pekla w polowie), wszystkie inne pomylki (m.in. z 12V) atmegi przezyly :)
  • #8 7071737
    galczys
    Poziom 12  
    Mam nadzieje że to nie będzie naruszenie regulaminu jak wrzucę ten link.
    http://www.kamami.pl/?id_prod=1826500
    Z tego właśnie zestawu korzystam. W karcie płyty pisze by zasilać ją napięciem 9V. A wiec stabilizator znajduje się na niej. Tylko przy zasilaniu 9V wychodzi z niego napięcie na mikrokontroler około 5,7V.
    Zasililem tą płytkę z programatora który daje na procek 4.9V i efekt jest ten sam co przy zasilaniu standardowym. Nie mam pojęcia jak zmusić to wszystko do działania :(
  • #9 7071958
    Krauser
    Poziom 26  
    Schemat dużo wyjaśnia. Czy założyłeś zworką JP3 ? Bez tego nic tu nie będzie działać. Proponuję też spróbować wpisać coś co ustawi wyjścia portu np.
     PORTD = 0xAA; 
    a później zająć się klawiaturą.
  • #10 7072622
    galczys
    Poziom 12  
    zworka na JP3 była założona. Zaczyna mnie denerwować ta płyta. Poprzedni problem ni z tego ni z owego sam się rozwiązał, nawet nie mam pojęcia jak.
    Nie wiem czy ze mnie taki kiepski programista czy co ale wykryłem kolejny.

    Otórz dla takiego kodu:

    
    #include <avr/io.h>
    
    int main(void)
    {
    
    	DDRC  = 0xFF;
    	PORTC = 0xFF;
    
        DDRB  = 0x00;
        PORTB = 0xFF; 
    
        
        for(;;)
        {
    		// gdy na wejsci PB pojawi się stan niski zgaśdiody
    		if(PINB != 0xFF)
    		{
    			PORTC = 0x00;
    		}
    		else
    		{
    			PORTC = 0xFF;
    		}
        }
    	
    	
    }
    


    Wyjścia od PC2 - PC5 zachowują się dziwnie. Niby są ustawione jako wyjścia i stan wysoki. Mierze napięcia na nich to są takie jak powinny być. Ale jak tylko podłacze pod nie diody z rezystorami napięcia spadają do 2,5V lub do 0,5V( w przypadku PC4 ). A do tego jak podłączam to pod przyciski, które mają gasić wszystkie diody, to oddziaływanie nie widać właśnie w przypadku tych 4 portów.
    Naprawdę zaczyna mnie denerwować ta płyta, ponieważ nie wiem czy z nią jest coś nie tak, czy moje umiejętności programistyczne są do niczego ( albo po prostu czegoś nie wiem o tej atmedze - dopiero zaczynam sie uczyć ).

    Najlepiej by chyba było jak bym kupił sobie płytkę montażową i resztę komponentów i sprawdziła na niej tą atmege.
  • #12 7073990
    galczys
    Poziom 12  
    a jak moge wyłączyć JTAG
  • #13 7074033
    wojtek_84
    Poziom 13  
    Fusebit JTAGEN.
  • #14 7075066
    galczys
    Poziom 12  
    a mogę prosić konkretniej??
REKLAMA