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.

ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa

urban07 22 Lis 2013 17:07 1854 10
  • #1 22 Lis 2013 17:07
    urban07
    Poziom 6  

    Witam.
    Dopiero zaczynam przygodę z mikrokontrolerami(konkretnie ATmega8), więc problemy na moim stopniu zaawansowania to pewnie normalka :)

    Problemem jest to, że ze zdefiniowanych portów(PB1, PB2 i wszystkie PD) działają tylko PB1 i 2. Na zdjęciach podpiety jest tylko PB2, ale to nie ma znaczenia. Poniżej zdjęcia mojej płytki stykowej i kod programu(w C)

    Użyte rezystory mają rezystancję 200Ohm. Programator, oraz zasilanie procesora są podpięte prawidłowo.
    ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jak widać w powyższym kodzie piny powinny włączać się w kolejności:
    1.PB1
    2.PB2
    3.Nieparzyste PD
    4.Parzyste PD

    W rzeczywistości wygląda to tak:
    PB1 przez sekundę
    PB2 przez sekundę
    [sekunda przerwy]
    [sekunda przerwy]

    Pewnie coś zepsułem w programie, ale nie mam pojęcia, co. Próbowałem różnymi kombinacjami, ale nie wychodziło.

    0 10
  • #2 22 Lis 2013 17:15
    dondu
    Moderator Mikrokontrolery Projektowanie

    Witaj.

    1. Dodaj rezystor 10k na pinie RESETdo Vcc.

    2. DDRB ustala kierunek - wyjśćie /wejście. Jeżeli ustawisz pin jako wyjjście, to wtedy dopiero zmiana w PORTx stanu pinu oznacza 1 lub zero na wyjściu. Dlatego DDR ustaw przed pętlą, a w pętli operuj tylko PORT.

    3. to DDRB = (0<<PB1) nie zeruje tylko pin PB1 - patrz punkt 1.5: http://mikrokontrolery.blogspot.com/2011/04/problemy-c-ustawianie-i-zerowanie-bitow.html
    To zeruje cały DDR. Poćwicz w CManiaku operatory bitowe: http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html

    4. W przyszłości nie definiuj F_CPU w kodzie, z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    A tak generalnie to całkiem nieźle i porządek na płytce :)

    0
  • #3 22 Lis 2013 18:12
    urban07
    Poziom 6  

    Dzięki za odpowiedź!
    Więc tak:
    -Nie miałem 10k więc użyłem 2x 4.7k 10%
    -Usunąłem F_CPU z kodu
    -zastosowałem się do poleceń 2 i 3

    Ale dalej nie działa tak jak powinno.
    piny PB 1 i 2 działają prawie bez problemu, ale PD wciąż milczą.

    Program teraz wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wiem, że dużo tych zamknięć portów, ale to na wszelki wypadek.


    EDIT:
    Ciekawe, jak zmieniłem w programie PD6 i 7 na 1 i 2, to na pinach PD1 i 2 jest napięcie i wszystko działa...

    EDIT2:
    Dodałem PD0 i już wszystko się psuje:



    I oczywiście nowy, zmodyfikowany kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 22 Lis 2013 23:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Twój uC działa z 1MHz (wewnętrzny generator RC), więc tego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    nie zauważysz okiem.

    Zacznij może od jednej diody, by uprościć program.

    urban07 napisał:
    -Usunąłem F_CPU z kodu

    Ale wstawiłeś w opcjach?

    0
  • #6 23 Lis 2013 08:06
    urban07
    Poziom 6  

    No to tak:
    @Tomq
    -Skoro PD6 i 7 domyślnie służą do obsługi kwarcu, to zapewne dalej tak jest, bo nic w fuse bitach nie zmieniałem;
    -Katoda do VCC, anoda do portu;

    @dondu
    -Wiem,że tego nie zauważę okiem, po prostu na początku pętli chciałem mieć pewność, że te 3 porty są wyłączone(PD0, PD1, PD2);
    -Jeśli chodzi ci o ustawienia procesora, to tak, w ustawieniach mam taktowanie na 1MHz

    A oto i schemat:
    ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa

    W CAD-zie nie umiałem znaleźć symbolu diody świecącej i procesora, więc wygląda jak wygląda...


    EDIT:
    Wywaliłem wyłączanie tych 3 pinów przed pętlę. Teraz program wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Tylko, że włączają się 2 piny naraz:
    ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa

    Przez lampę błyskową trochę słabo widać, ale da się zauważyć, że świecą się 2 diody naraz.

    0
  • #7 23 Lis 2013 08:45
    Wojtek75
    Poziom 23  

    urban07 napisał:
    -Katoda do VCC, anoda do portu;

    Gdyby to była prawda to nigdy byś tych diod nie odpalił...

    urban07 napisał:
    W CAD-zie nie umiałem znaleźć symbolu diody świecącej i procesora, więc wygląda jak wygląda...

    Na elektrodzie masz prosty edytor schematów. Przykład:


    ATmega8 - Problem z portami d - Po zaprogramowaniu układ nie działa



    Edytuj

    A w sieci masz darmowe narzędzia do rysowania schematów np. kicad, eagle itp....
    Wystarczy się z nimi zapoznać.

    Chyba prościej będzie jak napiszesz jaki efekt działania tego kodu chcesz uzyskać.

    0
  • Pomocny post
    #8 23 Lis 2013 09:15
    dondu
    Moderator Mikrokontrolery Projektowanie

    urban07 napisał:
    Wywaliłem wyłączanie tych 3 pinów przed pętlę.

    Masz wyświetlacz ze wspólną anodą, stąd włączenie diody następuje w przypadku podania zera na pin wyjściowy, do którego podłączony jest dany segment.

    Szkoda, że nie piszesz w komentarzach do instrukcji co według Ciebie ona wykonuje.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i teraz prześledź działanie programu.

    No i zadbaj o filtrację zasilania: http://mikrokontrolery.blogspot.com/2011/04/zasilanie-mikrokontrolera.html

    0
  • #9 23 Lis 2013 10:04
    urban07
    Poziom 6  

    @Wojtek75
    Przepraszam, ciągle mi się myli...
    Oczywiście anoda do VCC a katody do pinów PD0, 1, 2
    I dzięki za link do tego edytora schematów. Przyda się:)

    @dondu
    Dzięki, zaraz pokombinuję z tym kodem.
    A co do filtracji zasilania, to oczywiście zamierzam sobie załatwić odpowiednie kondensatory, ale niestety najbliższy sklep elektroniczny jest daleko od mojego miejsca zamieszkania, a że jestem uzależniony od publicznych środków transportu, to zaglądam tam "od święta".

    Dodano po 16 [minuty]:

    Dzięki wielkie @dondu.
    teraz program wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Leci "pomógł":)

    P.S.Nie chcę się czepiać, ale chyba popełniłeś błąd w
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Powinno być na odwrót. Dopiero jak poprawiłem, to zadziałało:)

    0
  • #11 23 Lis 2013 10:57
    urban07
    Poziom 6  

    OK, postaram się.

    0