Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 cze 2025, o 12:16


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
    Autor Wiadomość
    PostNapisane: 20 lis 2012, o 12:12 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2011
    Posty: 82
    Lokalizacja: Gdańsk
    Pomógł: 0

    Witam,

    Chciałbym się o coś zapytać. Otóż jako, że program na multi LED jest bodajże na ATmega 32, a ja mam ATmega644p, zoptymalizowałem go na ten właśnie drugi procek, lecz nie wiem czy poprawine.
    Dlatego zamieszczam program, abyście mogli sprawdzić czy wszystko jest ok. Po wganiu programu, jest coś nie tak, czyli jak wgrywam program i naciskam RESET(wspomnę, że korzystam z wewnętrznego programatora z układu uruchomieniowego, eclipse i procek jest taktowany na 16Mhz) to przy kliknięciu raz migną dwie środkowe cyfry i nic więcej się nie dzieje.

    Przerwanie chyba działa, bo dioda LED miga. Jak dobrzę myślę to ta część kodu odpowiada za sprawdzenie czy przerwanie działa? Jeśli nie to poprawcie mnie :-):

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Sprawdziłem kilka razy program, lecz nie widzę w nim nic niepokojącego( może ktoś inny spojrzy na to innym kątem) :-)
    Próbowałem też pozamieniać połączenia anod wyświetlacza z pinami portu C( w moim przypadku ), tak jak Pan Mirek pisał w podobnych postach, lecz bez skutku.

    Oraz chciałbym poprosić o wytłumaczenie fragmentu kodu programu, którego nie do końca rozumiem( jeśli nie byłby to oczywiście problem :-)):

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Tak jak obiecałem zamieszczam program:

    1. main.c

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    2. d_led.c

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    3. d_led.h

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Pozdrawiam,
    Patryk :-)

    P.S. Jeśli czegoś nie napisałem co by mogło się przydać to piście.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 12:19 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    A ja bym polecał jednak przejrzeć czasem forum ;) bo mowa o tym była już nie raz

    post38.html?hilit=multipleksowanie%20led#p38

    co do programu o którego działanie pytasz - to po prostu wyświetlanie licznika, robijanie liczby na poszczególne cyfry i wyświetlanie ich na takim multipleksowanym wyświetlaczu. Napisz dokładniej czego w tym kodzie nie rozumiesz - to łatwiej będzie wytłumaczyć ok?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 12:27 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 gru 2011
    Posty: 449
    Pomógł: 4

    Tak na szybko wypatrzyłem dwa błędy:
    1. plik 2. d_led.c - linia 37 powinno być:
    ANODY_PORT |= ca1 | ca2 | ca3 | ca4; // wygaszenie wszystkich wyświetlaczy(anody)

    2. Program 1. main.c
    Program wykonuje non stop tą pętlę
    while(1)
    {
    PORTC ^= (1<<PC4);
    _delay_ms(1000);
    }

    i nie przechodzi dalej. Musisz to wywalić (zakomentuj na razie cały ten blok.)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 12:31 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2011
    Posty: 82
    Lokalizacja: Gdańsk
    Pomógł: 0

    To mi wystarczy co do zasady działania tego fragmentu kodu. :-)

    A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą "działać"( poprostu nie chcą się otworzyć).

    Przepraszam, że nie będę do wieczora odpisywał, ale mam autobus za 5 min. :-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 12:42 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Patryk55 napisał(a):
    A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą "działać"( poprostu nie chcą się otworzyć).


    to zmień przeglądarkę internetową na jakąś porządną np Chrome albo Firefox i wszystko będzie ci się otwierać. Ale ok zajrzyj do tego linku jeszcze raz - wgrałem te obrazki jeszcze inaczej ;)

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    a poza tym to o jakich ty dwóch obrazkach mówisz - w tym wątku z linku jest tylko jeden obrazek.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 17:57 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2011
    Posty: 82
    Lokalizacja: Gdańsk
    Pomógł: 0

    Ok, obrazek już działa. A co do dwóch obrazków, to po prostu był jeden tylko zbugowany. ;)
    Błędy sprawdzilem i znalazłem jeszcze jeden w pliku .h tam gdzie bity portu c( też poprawiłem).
    Lecz dalej gdy wgram program i nacisnę reset migną 4 cyfry i nic więcej się nie dzieje.
    Nie wiem co robię nie tak i to mnie nurtuje, albo czegoś nie widze co razi w oczy :?: :?:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2012, o 18:42 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Patryk55 napisał(a):
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Masz >> zamiast >

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2012, o 18:04 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2011
    Posty: 82
    Lokalizacja: Gdańsk
    Pomógł: 0

    Dzięki, za zauważenie błedu. ;)
    Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2012, o 22:01 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    Patryk55 napisał(a):
    Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?


    dlaczego akurat 60s i to w dół ?

    ot po prostu no wyobraź sobie - chciałem żeby jakiś byle koci licznik się kręcił na wszystkich cyfrach wyświetlacza

    dlatego jest wyświetlana liczba zwiększająca się od 0 do 5999, przy czym jak widzisz z kodu, zera nieznaczące są wygaszane - tzn nie zapala się NIC

    więc chodzi o to aby po kolei na wyświetlaczu pokazać cyfry np

    5 9 9 8 itd

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2012, o 15:40 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2011
    Posty: 82
    Lokalizacja: Gdańsk
    Pomógł: 0

    Acha, rozumiem. ;)
    Dzięki za pomoc, problem rozwiązany. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lip 2014, o 14:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 30 kwi 2013
    Posty: 105
    Lokalizacja: Warszawa
    Pomógł: 0

    Witam,

    Próbuję skonfigurować multipleksowanie na ATmega16. Anody chcę podłączyć pod port C, konkretnie piny PC2, PC3, PC4, PC5 lub PC4, PC5, PC6, PC7. Używam taśmy ATNEL więc muszę mieć te anody podłączone tylko do jednego portu i po kolei jeżeli chodzi o piny. Stąd dwie powyższe konfiguracje. Na PC1 i PC2 używam I2C więc odpadają. Do portu B mam podłączone katody, natomiast do portu A wyświetlacz LCD. Na porcie D używam UART. Nie wiem, czy jeżeli używam przerwania CTC Timer0 w bibliotece Pana Mirka do multipleksowania to pozostałe piny portu D też może odpadają. W każdym razie podłączając anody do portu C jak wyżej w dwóch konfiguracjach nie świecą prawidłowo wszystkie wyświetlacze. Jeżeli podłączę anody do PC7, Pc6, PC5, PC4, to żaden nie świeci. Jeżeli podłączę do PC2, PC3, PC4, PC5 to świecą tylko dwa. Sprawdziłem w nocie, że na porcie C jest JTAG. Jednak jest on wyłączony w moim uC - sprawdziłem w MkAVR kalkulatorze. Dla sprawdzenia poprawności kodu podłączyłem anody do portu D - piny PD0, PD1, PD2, PD3, wyłączając wcześniej UART. Świecą wszystkie wyświetlacze. O co chodzi z tymi pinami na porcie C?

    _________________
    Mój Serwer AVR - http://msavr.besaba.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lip 2014, o 16:31 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 30 kwi 2013
    Posty: 105
    Lokalizacja: Warszawa
    Pomógł: 0

    Problem rozwiązany. Maskowanie bitów w przerwaniu + zmiana wartości zmiennej licznik.

    Pozdrawiam

    _________________
    Mój Serwer AVR - http://msavr.besaba.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO