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



Teraz jest 3 sty 2025, o 06:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 23 lut 2014, o 14:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Witam wszystkich

Aktualnie jestem na 263 stronie bluebook ;)
ale nie wytrzymałem i próbowałem napisać swój program oczywiście zacząłem od sterowania LED :)
Jest to dla mnie pierwsze starcie z C kiedyś programowałem w szkole trochę w BASCOM .

Poniżej wstawiam kod programu może trochę za szybko się rzuciłem na ADC ale próbowałem coś zmontować wzorując się na bluebook

i od razu pytanie jak sprawdzić kiedy przycisk jest rozłączony czyli typu NC normalnie rozwarty bo nie jestem pewien czy w programie dobrze to rozwiązałem

Prosił bym os sprawdzenie programu oraz korekty z komentarzem nie chodzi mi o to aby ktoś napisał za mnie program tylko żeby to zrozumieć

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



Ostatnio edytowano 23 lut 2014, o 18:03 przez Bedi, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 14:58 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 599
Lokalizacja: Lubin
Zbananowany użytkownik

Pomógł: 35

Pomiar powinien być w osobnej funkcji.
Dajesz return w głównej funkcji main.
daley_ms chyba zbyt duża wartość 60000?
To co zauważyłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 15:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Witam
wstaw kod pomiędzy znaczniki "syntax=c"
będzie czytelniejszy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 15:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2013
Posty: 381
Lokalizacja: Łowisko
Pomógł: 32

w definicjach chyba jest błąd na samym początku, przy przekaźnikach

_________________
невозможно ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

Więc tak żeby Ci pomóc to wg. mnie po 1 więcej danych co chcesz stworzyć
najlepiej schemat urządzenia co i jak ma być podłączone bo tak nie wiadomo co sprawdzać, co z czym połączone.
Kod daj w znacznikach syntax C żeby się łatwiej go czytało, pojawią się wtedy tez nr lini.
Wywal to co nie potrzebne i nie ma być używane by był czytelniejszy.

Widzę że chcesz opóźnienia programowe sięgające nawet i 15 minut zastosować niestety na "delay_ms" tego nie uzyskasz gdyż ma on ograniczenie i musisz użyć taimer.

Kiedyś robiłem coś podobnego może Cię to ukierunkuje jak w programie to zrobić, takie opóźnienie: http://forum.atnel.pl/topic4366.html

Dodatkowo zapoznałbym sie jeszcze z funkcjami drgania styków najpierw z 3 czesci bloga Mirka http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html
a potem uzupełnił wiedzę z bluebooka czytając o funkcji superdebuance.

Jeszcze dodam że warto uzupełnić swoją wiedzę z książki jeśli chodzi o ADC tymi poradnikami:

http://mirekk36.blogspot.com/2013/06/przetwornik-adc-w-avr-dla-poczatkujacych.html



Ostatnio edytowano 23 lut 2014, o 16:49 przez Intre, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 16:13 
Offline
Nowy

Dołączył(a): 23 lut 2014
Posty: 20
Lokalizacja: Szczecinek
Pomógł: 3

Ustawienia rejestrów ADC, wyciągnij z pętli while i umieść wyżej w funkcji głównej main. Definicje pomiaru, przestaw na sam dół, pod funkcje main i dodaj nawiasy klamrowe:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jednocześnie dodaj deklaracje tej funkcji przed funkcją główną.

Pomiaru adc dokonuje funkcja "pomiar", która zwraca wartość adc w postaci liczby uint_16. Czyli musisz sobie utworzyć zmienną która będzie przechowywać tę zwróconą wartość ( gdzieś na początku w funkcji main), a następnie wywołać funkcję pomiaru w pętli głównej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I dalej też w pętli głównej sprawdzasz czy "jakas_zmienna" rowna się np. 2000. Jeżeli tak to ustawiasz PRZEKAZNIK_ON.
Ten warunek na końcu, który napisałeś, nigdy się nie wykona ponieważ, pętla while(1) jest nieskończona a w jej środku niema instrukcji przerwania.
Przeczytaj jeszcze raz rozdział 3 z bluebooka.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 17:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Głownie mam problem jak odczytywać wartości z ADC i jak zrobić pewną tolerancje bo wiadomo idealnie potencjometrem nie ustawie wartości
chodzi oto żeby regulować potencjometrem czas załączenia przekaźnika od 1min do 15min powiedzmy z progiem co 1min nie koniecznie .
czas ustawiony potencjometrem dotyczy tylko gdy załączymy czujnikiem , przyciski są niezależne tak długo jak wciśnięte/rozwarte tak długo przekaźnik załączony .



Idę w dobrym kierunku? >>
Składnia: [ Pobierz ] [ Ukryj ]
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: 23 lut 2014, o 18:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Żeby wyznaczyć "widełki" dla jakieś wartości
to można to zrobić tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeśli masz jakiś przedział od "dolnaGranica" do "gornaGranica" w którym mieści się
akceptowalna wielkość to sprawdzamy w warunku
najpierw czy "wartosc" (np. odczytana z ADC) jest większa od dolnego zakresu
następnie czy "wartosc" jest mniejsza od górnego zakresu
i jeśli oba warunki są prawdziwe ( && ) wtedy wykona się funkcja
"wykonaj(cos_tam)"

Myślę ,że dość zrozumiale napisałem i nie pokręciłem niczego :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 19:06 
Offline
Nowy

Dołączył(a): 23 lut 2014
Posty: 20
Lokalizacja: Szczecinek
Pomógł: 3

ADC przyjmuje wartości od 0 do 1023. Musisz sobie założyć że przy wartości 0, któreś wyjście zmieni swój stan na 1 min, a przy wartości 1023 na 15 min. wartości pośrednie wyliczysz z proporcji. I teraz jeśli na którymś wejściu czujnika pojawi się stan wysoki lub niski (zależy jaki wybierzesz) to wykonujesz pomiar ADC, sprawdzasz "widełkami" jego wartość, załączasz wyjście dla przekaźnika, ustawiasz jakiś licznik który w przerwaniu, po osiągnięciu określonej wartości wyliczonej z proporcji, zmieni stan wyjścia dla przekaźnika.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2014, o 19:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Dodatkowo zmień :

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



na:


Składnia: [ Pobierz ] [ Ukryj ]
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO