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



Teraz jest 20 gru 2024, o 15:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 6 maja 2015, o 09:34 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Witam!

Pisząc program, który docelowo ma wykorzystywać klika bramek logicznych, aby uruchomić wyjście, napotkałem na problem, którego na chwilę obecną nie jestem wstanie ominąć. Otóż wykorzystać bramkę pojedynczy przycisk udaje mi się zaprogramować. Gorzej gdy wchodzą tematy związane z wykorzystaniem bramek. Jak do tego się zabrać i zrobić, aby odczytywał stany na portach w czasie rzeczywistym i w zależności od ich stanu załączał reagował na logikę sterującą. Jeżeli byłaby taka możliwość prosiłbym o podesłanie przykładowego kodu z komentarzami.

Z góry dziękuję za pomoc w rozwiązaniu problemu.

Pozdrawiam
Łukasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 10:45 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

No właśnie, nawet tytuł wątku wpisałeś taki, że nie wiadomo o co chodzi.
W Eclipse, AVR Studio (jak i innych środowiskach programistycznych) nie ma bramek, przełączników, itp. :)
Do tego co masz na płytce możesz napisać kod nawet w notatniku i skompilować odpowiednim kompilatorem.
Port ustawiony jako wejście odczytujesz tak samo dla przycisków, jak i sygnałów podawanych z bramek zewnętrznych względem mikrokontrolera.
Jak nie wiesz, jak odczytać port, to musisz zacząć od lektury jakiejkolwiek książki o AVR dla początkujących.
W przypadku braku książki możesz przerobić podstawy w ramach ogólnie dostępnych zasobów sieciowych,
polecam na przykład kurs na stronce: http://kursc.forbot.pl
Filmiki Mirka są też bezcenne: mirekk36.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 14:25 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Już się poprawiam program piszę w C używając ECLIPSE i pytania są następujące:
1. Jak napisać kod aby wykorzystywał bramki logiczne (kilka jednocześnie) korzystając z instrukcji if
2. Czy 'polecenie' PINx odczytuje stany ze wszystkich portów czy tylko z wskazanych.
3. Jak napisać kod, sprawdzał stany portów w czasie rzeczywistym

[ tylko dlatego, że kolega jest nowy na forum nie dostanie WARNA, ale proszę czym prędzej zapoznać się z tym jak się wstawia listingi na forum, tu jest przepis: topic7402.html - i popraw to szybko ok? - mirekk36 ]

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


Wspomniane filmy oglądam. Na kurs trafiłem przypadkiem dziś rano. Pisząc wstępne programy wzorowałem się na tych z blue-booka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 15:57 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

PINx odczytuje stan całego portu, dlatego musisz używać maskowania, żeby odczytać stan konkretnego pinu.

Jeżeli się mylę, to niech mnie ktoś poprawi, ale nie masz możliwości sprawdzenia stanu wszystkich pinów w czasie rzeczywistym. Możesz wykorzystać przerwania zewnętrzne, ale taką opcję mają nieliczne piny. Sprawdzanie w pętli głównej będzie już związane z pewnym (niewielkim) opóźnieniem.

Z bramkami logicznymi to nie wiem co chcesz uzyskać.
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.


Nie musisz zerować rejestru DDRx, domyślnie ma przypisane 0 tak samo jak PORTx.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 16:16 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Może podam przykład z bramkami, ponieważ chyba źle przedstawiłem problem.

Mamy 4 przyciski monostabilne NO (I1, I2, I3 i I4)
Jednoczesne wciśnięcie przycisków (I1, I2) lub pojedyncze wciśnięcie przycisku I3 ma załączyć z podtrzymaniem wyjście Q1
I4 wyłącza wyjście.

Jeśli chodzi o odczyt stanów na porcie to czasowo nie jest to ograniczone. Myślałem nad użyciem tego w pętli while(1) w programie. Kod dodam później.

Jest poprawa, ale ma mankamenty (mogę już włączać przyciski bez wyłączania zasilania, ale nie reaguje na to kiedy je puszczę. Poniżej zamieszczam kod (wyżej nic nie modyfikowałem)

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: 6 maja 2015, o 17:20 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

O ile dobrze zrozumiałem jak mają działać przyciski, to można to zapisać tak:

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: 6 maja 2015, o 19:19 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Zastosowana kombinacja przycisków jest ok. Nie myślałem, że i tu można wykorzystać "flagę". Dość często z niej korzystamy na zajęciach z programowania sterowników PLC w szkole i na praktykach. Cóż niewiedza początkującego wyłazi. Dzięki jeszcze raz za pomoc.
Dziś i jutro będę pisał kod do projektu. W razie wątpliwości będę pytał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 maja 2015, o 22:51 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Witam ponownie!

Sprawdzenie czy jest załączony przycisk bez sprawdzania za pomocą przerwań, dokonujemy w makrodefinicji (fajnie opisane w bluebook'u). Oprócz przeczytania tego rozdziału warto porównać (sekcję definicji) pierwszy kod który wstawiłem z użytkownika karol901 (post wyżej).

Jeżeli chodzi o bramki logiczne (kombinacja załączająca wyjście złożona z kilku bramek) najprostszą metodą jaką wypróbowałem (Jeszcze raz dziękuję użytkownikowi karol901 za podany kod) jest przypisywanie ich do tzw. flag. Pisząc w C przypisuję do zmiennej 2 wyjścia, a gdy w grę wchodzą kombinacje rozbudowane typu (przykład) "Jednoczesne wciśnięcie przycisków I1, I2, I3, I4 ma załączyć wyjście Q1." I1 i I2 przypisuję do flaga_1 (wykorzystując bramkę AND) I3 i I4 do flaga_2 (bramka ta sama wynika to z treści) i dopiero teraz łączę te 2 flagi w jedną (tu akurat będzie AND - patrz treść zadania) po czym wykorzystuję ją w if.
Ważne jest, aby stosować komentarze (najlepiej rozdzielić tą część gwiazdkami) i na samym początku napisać jaka ma być kombinacja. Później (przy rozbudowanej bramce tak jak w opisanym przykładzie gdzie flag było już kilka) należy stosować krótkie komentarze z zapisem, która to bramka. Przykład podam jak tylko będę miał programator

Mam takowe pytanko (jeżeli trzeba będzie założyć nowy "wpis" na forum prosiłbym o informację. Z góry przepraszam)
Czy do uC Atmega 88 (lub podobne z tego typoszeregu) są dostępne symulatory? Padł mi programator (nowy będzie na wtorek), a niestety urządzenie na konkurs musi być gotowe już w czwartek. W piątek rano wyjeżdżamy z kolegą i urządzeniem na drugi koniec Polski (przynajmniej w planach). Szukam w interku na razie zero.
Strasznie gryzie mnie to i głupio przyznać i pytać, ale gdyby z symulatorem wyszła "lipa", czy ktoś podjąłby się napisania programu (treść zadania z rozpiską tabelą przyporządkowania, jakie czujniki, wyjścia, logikę w LOGO SOFT COMFORT pisaną w LAD lub FBD będzie podane, jestem wstanie wysłać "od ręki"-szykowałem pod siebie) :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2015, o 06:33 
Offline
Moderator
Avatar użytkownika

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

Masz symulator za free w Atmel Studio

_________________
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: 27 maja 2015, o 22:44 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Mam problem, którego nie jestem wstanie obejść.
Korzystam z makrodefinicji (sprawdzenie stanu na wejściach). Następnie (tu się problem zaczyna) muszę zrobić coś w rodzaju przerzutnika RS. Przycisk 0 ma załączać układ (flaga "a" = 1) i wyłączyć, gdy zostanie naciśnięty przycisk 1.
Gdy zostanie załączona flaga 'a' po 3 sekundach następuje załączenie wyjścia 1 (wózek do góry), pod warunkiem, że nie jest wciśnięty przycisk 3 (górna krańcówka); przycisk 2 (dolna krańcówka)
Powrót ma następować po otrzymaniu sygnału z przycisku 5 (przed tarczą obrotową) i wyłączyć się gdy zadziała przycisk 2. Dodam tylko, że wszystkie przyciski są no i mają przed portem zewnętrzny rezystor 10k.
Jeżeli była by możliwość prosiłbym o podesłanie przykładowego kodu, bo mój mimo, że z komentarzami, ale niestety gubię się w warunkach


Pozdrawiam
Łukasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2015, o 08:22 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Pokaż najpierw swój kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2015, o 18:50 
Offline
Nowy

Dołączył(a): 05 maja 2015
Posty: 7
Pomógł: 0

Kod na RS'a znalazłem w sieci http://mikrokontrolery.net/avr_c_01.htm
Po drobnych zmianach zaczęło 'gadać' tak jak powinno przynajmniej częściowo.
Jako że teraz jestem na wyjeździe i z dostępem do komputera z po instalowanymi programami do transmsji (lub nawet symulacji) i programowania avr jest ciężko.
Zacząłem się zastanawiać jakby zareagowała Atmega, gdy by zadać jej program w stylu:

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


1.Czy przypadkiem nie będzie tak, że zapętli się na RS 1 dopóki nie otrzyma 'return 0;'
2.Jeśli nie będzie się zapętlać to czy będzie sprawdzać te warunki rs 1, 2 'ciągle' czy tylko sprawdzi raz i leci dalej (wg mnie powinna, ponieważ jest pętla while)

Kod wrzucę jak przyjadę (poniedziałek lub wtorek).

Pozdrawiam
Łukasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2015, o 15:55 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

IMO bez sensu to co próbujesz robić. Zrób flagę dla każdego przerzutnika RS, sprawdzaj czy flaga jest ustawiona, jeżeli tak to wykonuj jakiś 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: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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