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



Teraz jest 5 kwi 2026, o 05:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 4 kwi 2013, o 08:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 gru 2012
Posty: 146
Lokalizacja: Racibórz
Zbananowany użytkownik

Pomógł: 0

Musze sprawdzać stan logiczny na kilku pinach ustawionych jako wejście. Znalazłem coś takiego
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ale chciałbym to zrobić jako uniwersalną funkcję najlepiej w osobnym pliku i jakoś nie potrafię się z tym uporać. Coś mi się wydaje że kilka miesięcy temu jak zacząłem naukę C to mi się to udało - niestety upadek dysku spowodował utratę sporej ilości danych ( nie wszystko udało sie odzyskać). A może jest inny sposób na sprawdzanie stanu logicznego na pinach wejściowych ? .
Dopiero się uczę C - dotychczas pisałem w Bascomie - teraz usiłuję aktualnie potrzebny program "przetłumaczyć" z Bascoma na C.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 08:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

Antystatyczny napisał(a):
#define PIN_PROCKA4 (PINB &(1<<PB4) Spróbuj stworzyć takie makro, a potem..

if(!PIN_PROCKA4)
{
//twoja reakcja na stan niski na PB4
}
else
{
//twoja reakcja na stan wysoki na PB4
}


Antyk jednak dobrze :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 08:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 gru 2012
Posty: 146
Lokalizacja: Racibórz
Zbananowany użytkownik

Pomógł: 0

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


Odwrotny kierunek muszę poprawić bo nie działa - ale to mniej istotne. Pierwszy działa prawidłowo. Mnie interesuje prowadzanie stanu na pinach wejścia ale jako funkcja uniwersalna wywoływana z portem i pinem. Chodzi o to że przy większej ilości pinów do sprawdzenia było by to chyba lepsze niż lepsze makra .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 11:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Jedna uwaga - z całego serca odradzam nazewnictwo zmiennych, makr, funkcji, no czegokolwiek w kodzie w stylu AA, AB, CA, zwa, zwb,zwc, IA... Takie "kocie" oznaczenia nic nie mówią ani programiście (spróbuj za miesiąc na to spojrzeć) ani osobie, której dasz to do przeczytania/dopisania czegoś/poprawienia. Szanujmy się i używajmy dobrych nazw. W dobrym smaku jest używanie możliwie angielskich nazw (skrótowych) z konsekwentnym używaniem jednej składni, np, camel. Czyli np. timerCnt, bufReg, blackRect. Ja osobiście tak piszę z wyjątkiem stałych, #define i makr - te piszę WIELKIMI literami z podkreśleniem, np. TIMER_CNT.

Czemu dobry kod nie musi mieć wielu komentarzy? Bo sam się komentuje. :)

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 12:32 
Offline
Moderator
Avatar użytkownika

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

Ja bym nawet dodał do tego co napisał (i bardzo słusznie Ledes), że tworzenie tego typu nazw krótkich dwu- trzy-literowych jest wręcz ZABRONIONE ;) w C ... troszkę z przymrużeniem oka to "zabronione" ..... ale mam nadzieję, że po tych poradach kolega stachn - jak najszybciej sobie to poprawi .... Powiem wprost - tego typu nazewnictwo w dość szybkim czasie doprowadza programistę do obłędu i na skraj rozpaczy, szczególnie gdy zaczyna się błędów w kodzie szukać ;) dlatego to taka słuszna uwaga wyżej.

_________________
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: 4 kwi 2013, o 13:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 gru 2012
Posty: 146
Lokalizacja: Racibórz
Zbananowany użytkownik

Pomógł: 0

Nazewnictwo wzięte z oryginalnego kodu Bascoma tzn. mojego który działa. Tak się jakoś złożyło że od dawna takiego używam i się do tego przywykłem. A że tutaj "tłumaczę" program Bascoma na C ucząc sie zarazem C to już nie chcę mieszać nazw. Dopiero miałbym mętlik w głowie. Ale jak juz fragment kodu ruszy to zmieniam nazwy, próbuję to zmodernizować itp bacznie obserwując prace atmelka :D .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2014, o 15:26 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie - trochę odgrzebię temat, ale mam bardzo podobny temat i niby prosty, ale nie mam pewności.
jeżeli PB0 ustawimy jako wejście
a PB1 jako wyjście to czy zapytania tak dajemy
(
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: 9 kwi 2014, o 15:44 
Offline
Moderator
Avatar użytkownika

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

iwi napisał(a):
if (PINB & (1<<PB1) { tutaj np funkcja}; // w przypadku zarówno LED jak i klawiszy


może rozwiniesz co ty masz tutaj na myśli ? bo ja nie mogę zrozumieć ?

ale w razie czego zajrzyj tutaj i przeczytaj to dokładnie

http://mirekk36.blogspot.com/2012/01/av ... stawy.html

_________________
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: 9 kwi 2014, o 15:52 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziękuję Mirku, ale tam byłem i niestety nic nie doczytałem.

Chodzi mi o to, że komendą
if (!(PINB & (1<<PB0)) sprawdzamy czy przycisk na PB0 został naciśnięty czy nie.

teraz załóżmy że to sprawdzenie zapala nam diodę podłączoną do PB1
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jakim zapytaniem teraz sprawdzić czy dioda się świeci czy nie?
czy if ((PORTB & (1<<PB1)) czy if ((PINB & (1<<PB1))
z analogii wychodziłoby że tym pierwszym (ale to nie działa), funkcja jest długa i na końcu sprawdzamy czy dioda na PB1 świeci czy nie? Jeśli świeci to funkcja1 a jeśli nie to funkcja 2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2014, o 16:10 
Offline
Moderator
Avatar użytkownika

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

squeez napisał(a):
Jeśli PB1 jest wyjściem to sprawdzasz pin PB1 rejestru PORTB wówczas będziesz wiedział czy masz tam 1 czy 0 a czy dioda będzie świecić to zależy czy jest podłączona katodą czy anodą do pinu.


Dokładnie, a w uzupełnieniu - niezależnie nawet czy dioda podłączona jest katodą czy anodą to warunkiem

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


sprawdzasz nie to czy ona świeci czy nie świeci .... bo tego nie sprawdzisz niczym innym jak okiem własnym na przykład ;)

tym warunkiem sprawdzać możesz czy na PORTB.1 masz stan wysoki czy niski - ot tyle .... a dalej to już tak jak pisał wyżej squeez

_________________
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: 9 kwi 2014, o 19:15 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziękuję koledzy. Chciałem się upewnić, bo gdzieś mam błąd i ten if wykonuje się cały czas niezależnie od stanu PORTB. Więc w takim razie błąd jest gdzieś indziej. No nic - szukam dalej.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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