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



Teraz jest 23 kwi 2024, o 12:32


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 ]
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 ]
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: 408
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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
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 ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
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 0 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