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 w 2025? 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 7 kwi 2025, o 09:40


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 104 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4
    Autor Wiadomość
    PostNapisane: 25 paź 2020, o 00:13 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Trochę mnie nie było, ale tak jak u kolegi.
    AndreB1 napisał(a):
    Ostatnio brak czasu.
    miki53 napisał(a):
    Z jednej strony to by było ciekawe doświadczenie takie wspólne pisanie kodu na forum
    jak najbardziej, tylko trzeba ustalic jakś porządek, bu iść w jedną stronę, a nie każdy po swojemu. Dlatego proponuje, by zmiany wprowadzać w ostatniej wersji kodu.
    miki53 napisał(a):
    Z potencjometrami będzie gorzej myślę że trzeba będzie przerobić ten cały kod i wywalić
    delay i zamienić je ne przerwania
    W brew pozorom nie będzie to aż taki problem.
    Złożyłem sobie płytkę testową i odpaliłem kod kolegi miki53. Kod w zasadzie działa, ale mam takie uwagi
    *W linii 20 jest załączenie wewnętrznego podciągania wejścia PD0 do Vcc, a na płytce (jeśli dobrze widzę) jest zrobione pociągniecie za pomocą rezystorów. Ja u siebie mam także podciągniecie za pomocą rezystorów, "udające" dzielnik napięcia. I przy załączonym podciągnięciu z Atmegi program mi nie działa. Działa dopiero po usunięciu tej linii.
    Należałoby ustalić, czy podciągniecie PD0 ma być wewnętrzne czy zewnętrzne (za pomocą rezystorów).
    *Jeżeli dłużej przytrzymamy przycisk, to palą się wszystkie diody, bo są od nowa zapalane, mimo iż już się palą. Można by tak na szybko dodać gaszenie diod na końcu warunku if
    *Przycisk nie działa za każdym razem. Jest to spowodowane delayem w części else. Po prostu delay musi odczekać swoje, by znowu było sprawdzanie wejścia. To są uroki delay'ów i ogólnie blokującego charakteru programu.

    To co bym proponował teraz, to "opakowanie" w funkcje naszego efektu i umieszczenie deklaracji w pliku nagłówkowym.
    I tak, jak na poczatku proponowałem zamiast używać zapisu np.: PORTC &= ~( 1 << PC1 ); użyjmy zapisu LED3_OFF. Do tego celu w pliku nagłówkowym (main.h) umieśćmy deklaracje #define LED3_OFF.... która zamieni nam w programie każde pojawienie się LED3_OFF, odpowiednia komendą PORTC&=.... . I tak dla każdej diody.
    U mnie plik main.h wygląda następująco
    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.

    W programie trzeba dodać #include "main.h", by korzystac z pliku main.h. Teraz, jak ktoś będzie miał inny układ diod, to zmienia tylko w pliku main.h, a nie musi szukać po całym programie.
    Po tej zmianie plik main.c będzie wyglądał następująco:
    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.

    U mnie to działa.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 paź 2020, o 11:43 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2017
    Posty: 428
    Lokalizacja: Puck
    Pomógł: 7

    Ten kod pisałem, a właściwie zmieniałem kod podany
    przez AndreB1 i nie chciałem wstawiać żadnych funkcji
    Dlatego aby był dla kolegi AndreB1 jak najbardziej
    zrozumiały

    Ten kod jak kolega sam zauważy ma wiele wad, blokuje
    itd.
    Następny wersja tego kodu myślę zrobić na tablicach i przerwaniach
    będzie o wiele łatwiej dostawić potencjometry



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 paź 2020, o 17:33 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    A i tak jestem pod wrażeniem zastosowanej sztuczki, by podzielić efekt na dwie części, jedną uruchamianą narastającym zboczem, drugą opadającym.
    Tak więc przy maksymalnej prostocie efekt zaczyna przypominać to co ma być.

    Następny krok, to stworzymy funkcję led_out, która jako argument przyjmie liczbę 16bit i w zależności od jej wartości zapali/zgasi odpowiednie diody.
    Z 16 bitów wykorzystamy tylko 12, bo tyle mamy diod. I tak 0 bit naszej liczby/argumentu funkcji value będzie odpowiadał diodzie nr 1, bit 1 diodzie 2 itd.
    kod będzie wyglądał następująco:

    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.


    w linii 7 dołożono deklaracje nowej funkcji, zamieniono zapisy LED1_ON/LED1_OFF na wywołanie funkcji led_out z odpowiednim argumentem, a na końcu programu dodano definicje funkcji.
    Celowo podaje wartość argumentu funkcji led_out w postaci bitowej, by było widać bezpośrednie odniesie wartości poszczególnych bitów tej liczby poszczególnym diodom.
    Co się zmieniło - nie zapalmy kolejnej diody, ale zapalamy/gasimy wszystkie. Co więcej, zamieniamy liczbę na kombinacje zapalonych/zgaszonych diod. A jak mamy liczby, to możemy je umieścić w tablicy i po kolei odczytywać z tablicy i zapalać.gasić diody.

    ------------------------ [ Dodano po: 8 minutach ]

    Czas uruchomić przetwornik ADC. Korzystając z tego, że mamy linijkę diod możemy je wykorzystać jako wskaźnik napięcia.
    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.

    plik main.h pozostaje bez zmian

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 paź 2020, o 19:04 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Wszystko do kupy
    main.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.

    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.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 paź 2020, o 20:20 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Wrzucam schemat trochę poprawiony (piny po kolei).

    Obrazek

    Alef2 napisał(a):
    Wszystko do kupy

    Jak te kody połączyć ???

    Alef2 napisał(a):
    DDRD = 0xff; // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek
    PORTD = 0x00; // ustawiamy wyjścia całego portu D w stan zero ( bo masz diody katodami do GND (masy)


    Port D ma być jako wejście (sygnał z kierunkowskazu stan wysoki)

    Alef2 napisał(a):
    adc_PC5 = get_adc(5);


    Czy nie powinno wyglądać to tak adc_PC5 = get_adc(PC5); ???

    Alef2 napisał(a):
    Z 16 bitów wykorzystamy tylko 12,


    Czyli można podłączyć 16 ledów ???
    Myślałem że tylko 12 jak wynika ze schematu.
    Jeśli tak to niech zostanie 12 żeby nie komplikować.

    miki53 napisał(a):
    AndreB1 przetestuj ten kod i daj znać jak działa

    Przetestowałem i działa tak jak pisał Alef2 (Przycisk nie działa za każdym razem).

    Elwood napisał(a):
    jesteś w stanie coś pomóc w temacie ?

    Kolego Elwood niestety nie pomogę Ci w tym temacie. Pracuję przy ciężarówkach .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 paź 2020, o 22:45 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Alef2 napisał(a):
    Złożyłem sobie płytkę testową i odpaliłem kod kolegi miki53.

    Kolego Alef2 wrzucisz jakieś foto tej płytki. Czy zbudowałeś według mojego schematu ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 paź 2020, o 10:02 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Bardzo dobrze, że pytasz. Dla mnie pewne rzeczy są oczywiste, ale dla innych mogą nie być. Poza tym, jak każdy się mylę.
    AndreB1 napisał(a):
    Jak te kody połączyć ???

    W katalogu głównym programu muszą być oba pliki. Można pisać cały program w jednym pliku, ale przy dłuższych programach analiza takiego długiego pliku jest trudna.
    Dlatego lepiej duży plik rozbić na kilka mniejszych. W pliku nagłówkowym - tym z rozszerzeniem .h (od header) są umieszczone deklaracje. W pliku z nieposzerzeniem .c reszta programu. Poleceniem #include "main.h" wstawiamy całą zwartość pliku main.h w miejscu polecenia #include.
    AndreB1 napisał(a):
    Port D ma być jako wejście (sygnał z kierunkowskazu stan wysoki)
    Zgoda. W następnych liniach wybrane piny, tj PD0 (DDRD &= ~KEY1; ) ustawiam jako wejście.
    Ja wykorzystałem niewykorzystane piny portu D, do celów diagnostycznych i podpiąłem tam extra ledy.
    AndreB1 napisał(a):
    Czy nie powinno wyglądać to tak adc_PC5 = get_adc(PC5); ???
    Jeden i drugi zapis da dokładnie taki sam kod wynikowy. Dzięki polecdniu #include <avr/io.h>, możemy używać nazw symbolicznych np. PC5, a kompilator (a dokładnie preprocesor) zamieni je na odpowiednie wartości.
    AndreB1 napisał(a):
    Czyli można podłączyć 16 ledów ???
    Można użyć 16 ledów, oczywiście pod warunkiem, że wystarczy pinów procesora. A jak zabraknie można użyć rozszerzeń i jeszcze wielokrotnie powiększyć.
    16 bitów, to 2 bajty, a procesor operuje na całych bajtach. Mamy więc 4 bity niewykorzystane. Nie jest to powodem do zmartwienia, bo wykorzystujemy tylko drobny ułamek zasobów procesora.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 paź 2020, o 11:26 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Witaj Alef2.
    Mam kolejne pytanie.
    Kod napisany przez Ciebie trochę nie współpracuje z moim schematem (inna kolejność diód) czy mogę pozmieniać w pliku "h" kolejność pod mój schemat czy trzeba większej ingeręcji ? Mam wrażenie że przycisk nie działa za każdym razem, czy w tym kodzie jest sterowany stanem wysokim czy niskim ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 paź 2020, o 08:57 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    No tak, miałem to napisać, ale zapomniałem. Pomyliłem sie w podłączaniu diod w mojej płytce testowej i łatwiej było mi zmienić makro niż płytkę. Oczywiście możesz w pliku .h zmienić przypisania diod. Chyba w pierwszej wersji pliku .h było przypisanie tak jak na twoim schemacie.
    Przycisk działa na stan wysoki. To, że nie działa za każdym razem wynika z blokującego charakteru programu. Idea (pomysł) działania tego programu jest taka, że rozpoczęcie działania efektu jest inicjowane wysokim stanem na wejściu. Efekt musi się skończyć przed następnym pojawieniem się na wejściu stanu wysokiego.
    Podłubie w programie, by nawet w czasie trwania efektu, pojawienie się stanu wysokiego (narastającego zbocza) na wejściu rozpoczynało od nowa efekt.
    Oraz myślę, że wykorzystam niewykorzystany bit w argumencie funkcji led_out, jako znacznik początku/końca efektu, a niewykorzystane piny Atmegi wykorzystam do zmiany rodzaju efektu. W przyszłości można by się pokusić też o jakiś efekt świateł dziennych (np. zapalają się diody po kolei), ale to wymaga ingerencji w układ.
    A wracając do mojej płytki, to nie ma co pokazywać - jest to płyka uniwesalna z pinami połączonymi kynarem.
    Tymczasem zacząłem projektowanie PCB. Masz jakieś sugestie jak by PCB miało wyglądać? Np światła dzienne mają miećjakiś tranzystor, czy po prostuma to być wyjście?

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 paź 2020, o 11:29 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Witaj Alef2.
    Widzę że mocno się zaangażowałeś , z płytką myślę że sobie poradzę i tak mi dużo pompgłeś. Wyjście światła dziennego steruje przekaźnikiem przez tranzystor . Jak by udało się ten przycisk przerobić to by było fajnie. Tak się zapytam nieśmiało czy Ty aby tak do końca robisz to bezinteresownie ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lis 2020, o 21:41 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Niestety, z przyczyn osobistych jak i zawodowych byłem nieobecny.
    AndreB1 napisał(a):
    czy Ty aby tak do końca robisz to bezinteresownie ?

    nie oczekuje żadnych profitów, ale bardzo chętnie zobaczyłbym działające urządzenie. Dla mnie to trochę ambicjonalna sprawa, a satysfakcja, ze uczestniczyło sie w przedsięwzięciu doprowadzonym do końca - bezcenna.

    Obecna wersja programu jest nieblokująca i rozpoczęcie efektu możliwe jest w trakcie jego trwania.
    plik .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.

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

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2020, o 21:20 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Alef2 napisał(a):
    bardzo chętnie zobaczyłbym działające urządzenie.


    Witam po długiej nieobecności.
    Oczywiście , zrobię parę fotek i wrzucę tutaj. Jestem na etapie trawienia płytek. Trochę długo mi to szło (brak czasu) ale zaprojektowałem i wytrawiam płytki sam.
    Alef2 mam problem z Twoim ostatnim kodem , za cholerę mi nie działa :cry: (światło dzienne świeci cały czas, po podaniu kierunkowskazu nie ma żadnych zmian , nie zapalają się żadne diody tylko cały czas świeci dzienne). Zbudowałem dwie płytki prototypowe bo myślałem że zrobiłem jakiś błąd ale wychodzi na to że nie ponieważ mój prosty kod działa na obydwóch.

    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.

    Masz jakiś pomysł :?: :?: :?:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 sty 2021, o 01:25 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Witam ponownie.
    Przez dłuższy czas byłem nie obecny ponieważ przygotowywałem się do tego projektu od strony technicznej, mianowicie zbudowałem
    sobie wiertarkę do PCB oraz uczyłem się wytrawiać płytki. No i pierwszy sukces, udało mi się zaprojektować oraz wykonać płytkę
    potrzebną do tego projektu.

    Po drugie to chciałem przeprosić kolegę Alef2 za ten cytat który pisałem wcześniej
    AndreB1 napisał(a):
    Alef2 mam problem z Twoim ostatnim kodem , za cholerę mi nie działa


    Twój kod działa, problem leżał po mojej stronie popełniłem kilka błędów przy budowie płytki prototypowej lecz postanowiłem zacząć
    od miejsca którego powinienem zacząć od samego początku, kupiłem książkę Pana Mirka (BB) - Panie Mirku WIELKIE DZIĘKI. Dzięki temu krok po kroku zbudowałem płytkę od nowa według porad Pana Mirka i zaczęło działać jak należy.

    Wracając do kodu to czy mogę mieć małą prośbę do Ciebie kolego Alef2, mianowicie pierwsza sprawa to czy dało by się coś zrobić z sygnałem na światło dzienne żeby się utrzymywało trochę dłużej po zakończonym cyklu kierunkowskazu gdyż teraz gaśnie praktycznie po zakończonym cyklu kierunku i jest znikoma jego regulacja, regulacja prędkości zapalania cyklu jest super. Druga sprawa to taka że
    blokuje się procesor w momencie kiedy przytrzymam przycisk do momentu zakończenia cyklu . Czy jest możliwe zrobić tak że w momencie kiedy trzymam przycisk wykonuje się cykl i świecą wszystkie diody ale gaśnie dopiero kiedy przycisk zostanie puszczony. Chodzi o to żeby procek się nie blokował kiedy przycisk jest dłużej wduszony, teraz przy krótkim naciskaniu przycisku działa dobrze, do puki nie przytrzymam go dłużej.

    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.

    Z góry dziękuję i pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lut 2021, o 20:45 
    Offline
    Użytkownik

    Dołączył(a): 25 wrz 2020
    Posty: 52
    Lokalizacja: Milicz
    Pomógł: 0

    Pomoże ktoś ogarnąć ten projekt do końca, utknęło w martwym puncie. :cry:



    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: 104 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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