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 12 lip 2025, o 05:49


    Strefa czasowa: UTC + 1





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

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Witam

    Próbowałem przerobić to ćw tak żeby chodziło na attiny 2313 ale chyba jestem jeszcze za cienki w te klocki ;-) mogę jedynie powiedzieć że od strony podłączeniowej jest wszystko ok bo jak wystawiam na wszystkie bazy tranzystorów npn satn niski (anody wyświetlacza) i stan niski na wszystkie segmenty to wszystkie segmenty 4 cyfr. wyświetlacza się palą.

    Także problem tkwi w programie- może używam złych rejestrów lub nazw w przeraniach.
    Dobrze by było żeby jakiś fachowiec rzucił na to okiem;-)
    z góry dzięki za pomoc!!

    Przypomne jeszcze ze zadanie w tym ćw. polega na tym aby w oparciu o przerwania cyklicznie załączały się kolejne cyfry tak aby płynnie wyświetlały się cyfry 1495

    oto kod:

    plik main.c

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


    plik 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.




    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.



    Ostatnio edytowano 20 lip 2014, o 11:02 przez Mac, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 lip 2014, o 11:54 
    Offline
    Moderator
    Avatar użytkownika

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

    A sprawdzałeś w ogóle jedną diodą LED czy działa ci przerwanie multipleksowania ? bo coś mi pachnie że nie za bardzo ....

    obejrzyj sobie to:

    http://mirekk36.blogspot.com/2014/04/pu ... ednej.html

    a potem zastanów się - jak już sprawdzisz że ci nie działa to przerwanie - coś tu w kodzie zrobił:

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


    Autor postu otrzymał pochwałę

    _________________
    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: 12 lip 2014, o 14:27 
    Offline
    Użytkownik

    Dołączył(a): 28 mar 2014
    Posty: 30
    Pomógł: 3

    Jest błąd w ustawieniu timera - dwa razy wpisujesz do rejestru TCCR0A, ten drugi powinien być TCCR0B , a tak zamazujesz wartość w TCCR0A i zamiast nadać mu wartość 2 nadajesz 5.
    W obsłudze przerwania gasisz wyświetlacze, ale ich nie zapalasz - zmienna licznik nie zmienia wartości ANODY_PORT.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lip 2014, o 20:33 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Dzięki alef i mierek za pomoc wyświetlacz już śmiga na attiny 2313, przy okazji wyszło jeszcze że źle wybrałem piny dla anod powinny być od PD0-3 a miałem od PD1-4 ;-)

    Ale już nabrałem chęci żeby zrobić pierwszy mój termometr, także przeskoczę od razu do ćw. 1 wire
    szkoda że jest to oparte na wyświetlaczu LCD ale jakos sobie chyba to przerobie.
    pozdrawiam.

    ------------------------ [ Dodano po: 4 minutach ]

    Jeszcze chciałem dodać ze to jest super sposób na znalezienie błędu w programie za pomocą diody i petli while , poradniki mirka są genialne.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lip 2014, o 21:11 
    Offline
    Użytkownik

    Dołączył(a): 28 mar 2014
    Posty: 30
    Pomógł: 3

    Przerabiałem problem wyświetlacza LED i 1wire na 2313 i chętnie służę pomocą.
    Do obsługi 1wire napisałem (może to za dużo powiedziane) funkcje, które zawierają jedynie niezbędne elementy.
    Dlatego radzę, by kontynuować temat wyświetlacza LED i wzbogacić go o pomiar temperatury.

    Dodam jeszcze, że w przypadku, gdy program nie działa warto skorzystać z symulatora. To naprawdę znakomite narzędzie i warto zawrzeć z nim bliższą znajomość.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2014, o 08:28 
    Offline
    Użytkownik

    Dołączył(a): 19 sty 2013
    Posty: 322
    Pomógł: 22

    Witam

    Gdybyś miał problem to możesz się wzorować na:
    http://forum.atnel.pl/topic7783.html

    Pozdrawiam
    Elektronik



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 08:23 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Witam ponownie

    Tak zastanawiam się nad tym termometrem i dochodze do wniosku ze to wcale nie jest taka prosta
    sprawa;-) , ale chyba to będzie polegało na tym że

    1. musze dodać do procedury przerwania z cw. multiplex.. led procedurę z 1 wire gdzie znajduje się timer programowy.
    2 zmodyfikować funkcje display_temp tak jak to zrobił jari17 w podanym przez elektronika linku


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


    tylko zastanawiam się dlaczego cy4 = 12 gdzie 12oznacza tutaj spacje tak jak to ma miejsce przy subzero , a powinna zostać wyświetlona jakaś konkretna wartość po kropce
    czy nie powinno być cy4= cel_fract_bits ?

    pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 10:45 
    Offline
    Użytkownik

    Dołączył(a): 19 sty 2013
    Posty: 322
    Pomógł: 22

    Ten program wyświetla tylko części całkowite temperatury ale jeżeli wpiszesz cy4= cel_fract_bits to będziesz miał temperaturę wyświetlaną z dokładnością 1/10 stopnia. Ciekawe jak sobie poradzisz z wyświetleniem kropki na wyświetlaczu, bo ja mam z tym problem. Usuń biblioteki nie wolno ich publikować na forum.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 11:14 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    sorry za biblioteki - czy tu chodzi o jakies prawa autorskie ?
    nad kropką myślałem i chyba najlepiej będzie dodać do przerwania z cw. muliplex.. led dodatkową "cy(x)" i dodać kropkę do tablicy i dołączyć ją do cy3 tzn gdy:
    else if( licznik==4) LED_DATA = pgm_read_byte ( &cyfry[cy3][cy(x)])

    mysle ze cos w tym kierunku będę kombinował



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 11:27 
    Offline
    Użytkownik

    Dołączył(a): 19 sty 2013
    Posty: 322
    Pomógł: 22

    Mac napisał(a):
    sorry za biblioteki - czy tu chodzi o jakieś prawa autorskie ?



    Tak chodzi o prawa autorskie pliki main.c możesz publikować ale biblioteki już nie tylko części zmienione.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 11:34 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    a co myślisz o kropce - w dobry kierunku idę?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 12:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Ja wyświetlanie kropek rozwiązałem w taki sposób topic7744.html#p87600

    Jeśli potrzebujesz tylko jedną kropkę to nie musisz tworzyć czterech zmiennych kropkaX. Wystarczy jedna. No i w przerwaniu wystarczy zmodyfikować tylko tą część kodu odpowiedzialną za wyświetlanie cyfr na tym wyświetlaczu na którym ma się też wyświetlać kropka.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 21:14 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Spróbowałem napisac program i jak zwykle eclipse zaczął krzyczeć tyle ze ja zabardzo już nie wiem co go boli;-)


    main.c:(.text+0x3a): undefined reference to `display_temp'
    main.c:(.text+0x8a): undefined reference to `display_temp'
    make: *** [Term11.elf] Error 1

    a to kod 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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 21:49 
    Offline
    Użytkownik

    Dołączył(a): 29 mar 2012
    Posty: 595
    Lokalizacja: Jaworzno
    Pomógł: 39

    Przenieś ciało funkcji display_temp poza funkcję main i powinno być OK.


    Autor postu otrzymał pochwałę

    _________________
    Pozdrawiam
    PP



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lip 2014, o 22:53 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Uprzejmie donoszę że termometr już działa.
    Piekne uczucie jak coś w końcu zaczyna działać tak jak chcesz.

    Piotrek tak jak pisałeś przeniesienie ciała tej f. poza f. main rozwiązało problem
    jeszcze tylko nie wiem czemu musi ono być poza f. main, ale to zostawię sobie na jutro ( ide spać)

    Chciałem podziekowac wszystkim za pomoc w moich zmaganiach z programowaniem.
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lip 2014, o 10:38 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    No tak tylko hmm... yyyy... kiedy mówimy o zagnieżdżeniu ( co to jest to niedozwolone zagnieżdżenie)?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lip 2014, o 11:05 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Acha to o to chodzi - dzięki - mi tak czasem trzeba coś wiecie jak dziecku.
    pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lip 2014, o 22:47 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Witam
    chciałbym się jeszcze dowiedzieć paru rzeczy w związku z tym programem

    Pierwsza sprawa dotyczy petli while gdzie instrukcja if sprawdza (s1_flag) i jeśli ona się pojawi to są wykonywane zadania. Ta flaga pojawia się co sekundę ale pytanie jaka jest częstotliwośc sprawdzania czy ta flaga już się pojawiła, czy dyktuje to czestotliwośc taktowania procesora podzielona przez preskaler czy tez inny mechanizm jest tutaj zastosowany?

    Druga sprawa dotyczy samych flag - pierwszy raz się z nimi spotkałem właśnie w tym ćw. na razie sobie to tłmacze że to jest jakiś ustalony przezemnie znacznik który się pojawia gdy jakiś warunek w timerze jest spełniony i za pomocą niego w głownym programie można wykonywać jakies zadania. Ma ktoś jakiś link do jakiegoś wyjaśnienia jak i z czym to się je, albo jakiś własny opis wyjaśniający zasady rządzące flagami.

    z góry dzięki

    Pozdrawiam; Mac



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lip 2014, o 23:11 
    Offline
    Moderator
    Avatar użytkownika

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

    Mac napisał(a):
    Ta flaga pojawia się co sekundę ale pytanie jaka jest częstotliwośc sprawdzania czy ta flaga już się pojawiła


    Częstotliwość sprawdzania to ilość obiegów pętli while i nikomu ten czas tak z grubsza rzecz biorąc nie jest potrzebny bo jest on BARDZO zmienny .... od czego zależy? od tego ile rzeczy napiszesz do wykonania w tejże pętli głównej i ile czasu każda z tych rzeczy będzie się wykonywać ...

    Generalnie podejdź do tego w ten sposób - że jeśli masz dobrze pisany program, bez żadnych delayów czyli w sposób nieblokujący to pętla główna obraca się wiele tysięcy razy w ciągu sekundy w zależności oczywiście od taktowania procka. To jest ASYNCHRONICZNE sprawdzanie stanu flagi ...

    Mac napisał(a):
    Druga sprawa dotyczy samych flag - pierwszy raz się z nimi spotkałem właśnie w tym ćw. na razie sobie to tłmacze że to jest jakiś ustalony przezemnie znacznik który się pojawia gdy jakiś warunek w timerze jest spełniony i za pomocą niego w głownym programie można wykonywać jakies zadania


    No i dokładnie o tym piszę w książce ... tak jest z podstawowym zrozumieniem flag programowych ... nie inaczej.

    Mac napisał(a):
    Ma ktoś jakiś link do jakiegoś wyjaśnienia jak i z czym to się je, albo jakiś własny opis wyjaśniający zasady rządzące flagami.


    Nie ma żadnego sprecyzowanego opisu zarządzania flagami - jak rozumiesz o co chodzi - a widać po opisie że rozumiesz - to ty sam ten mechanizm możesz już dalej wykorzystywać na setki miliony sposobów i do czego zechcesz. Inaczej jest z flagami sprzętowymi - bo takie też są - i zwykle są one opisane w bitach w rejestrach konfiguracyjnych różnych modułów procka. A działają na podobnej zasadzie. Gdy coś się w danym module wydarzy to procek ustawia flagę na JEDEN, dzięki czemu może się albo wykonać przerwanie jeśli tego chcemy, albo równie dobrze możemy nie wywoływać przerwania tylko sprawdzać warunkiem IF taką sprzętową flagę ...

    _________________
    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: 7 sie 2014, o 21:02 
    Offline
    Użytkownik

    Dołączył(a): 10 kwi 2014
    Posty: 141
    Lokalizacja: 3-miasto
    Pomógł: 0

    Witam

    Przedstawiam końcowy efekt zmagań w tym temacie ;-)
    Obrazek

    ------------------------ [ Dodano po: 20 minutach ]

    Dziekuje P.Mirku za wyjaśnienie zagadnienia związanego z flagami.
    No i jeszcze chciałbym dodać że mając takie zaplecze jakie Pan stworzył( poradniki video, książki, to forum) to dla mnie jest to wspaniała przygoda z nauką programowania i kursem eagle.
    Sam jestem mechanikiem okrętowym i wcześniej hobbystycznie interesowałem się elektronika, no a teraz mikrokontrolery i możliwości jakie one daja w sterowaniu roznych urządzeń fascynuje mnie.
    Oby tylko czasu starczyło na to hobby;-)
    Pozdrawiam.



    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: 20 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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