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



Teraz jest 21 lut 2025, o 18:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 30 sie 2016, o 11:12 
Offline
Nowy

Dołączył(a): 30 sie 2016
Posty: 7
Pomógł: 0

Witam
Jest to mój pierwszy post na tym forum i zapowiada się, że nie ostatni.Witam wszystkich Forumowiczów :). Jestem totalnym początkującym także już z góry przepraszam za moje przyszłe pytania.
Pare dni temu nabyłem BB, przeczytałem już część teoretyczną i zabrałem się za ćwiczenia praktyczne. Oprócz tych zawartych w książce robiłem różne kombinacje aby lepiej zrozumieć temat operacji bitowych i przypisywania do portów. Problem dotyczy programu do mrugania diodą przy użyciu 3 przycisków. Jednak nie podłączałem 3 przycisków do 1 portu tylko jeden do portu B a dwa do portu C. Musiałem lekko zmienić warunek if aby program zadziałał. Jednak po wgraniu programu oraz przy podłączniu napiecia do układu dioda LED przez kilka sekund mruga tak jakby przycisk LED_TOG był wciśniety. Po tych kilku sekundach dioda gasnie i program działa normalnie. Co może być przyczyną? mam jeszcze jedno pytanie czy warunek if(!(PINC & klawisz) ^ !(PINB & klawisz)) jest prawidłowo skonstruowany?(dokładnie chodzi o uzycie operatora XOR). Zauważyłem, że przy usunieciu członu PINB... z warunku if mruganie nie wystepuje(i oczywiscie jeden przycisk nie działa). Dodam jeszcze że pracuje na atmega8L 8MHz.

Z góry dziękuje za pomoc

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: 30 sie 2016, o 11:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Ddrc i portc key-pin1 brak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2016, o 12:22 
Offline
Nowy

Dołączył(a): 30 sie 2016
Posty: 7
Pomógł: 0

KEY1_PIN jest przydzielony do portu B. Automatycznie jest ustawiany jak wejście i juz tego nie pisałem i jest podsprzegniety do vcc w 18 linijce. Przez moją niedbałość fragment kodu jest mało czytelny.
Po zamianie 17 i 18 linijki kodu na poniższe staje się bardziej czytelne. Przy zrobieniu tego zadania z 3 przyciskami na PORTC wszystko działa jak należy. A przy tym wariancie nie moge dojść dlaczego ta dioda miga przez pare sekund.
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: 30 sie 2016, o 12:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Faktycznie,
Pozostaje zrobić maly delay przed pętlą while żeby dać czas na podciagniecie pinu do vcc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2016, o 13:25 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Dziwne, że kompilator tego nie podkreśla jako błąd, bo przecież w warunku logicznym złożonym
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

stosujesz operator bitowy ^. Tam może być tylko operator logiczny: &&, ||, !.
Chyba nie ma w języku C operatora logicznego ExOR.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2016, o 13:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Tak, kolega janusz17 ma rację.to jest operator bitowy.
Jezeli to ma reagować na obia śladowe to powinno być || .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2016, o 14:25 
Offline
Moderator
Avatar użytkownika

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

Jazio napisał(a):
W If() jak tez w innych warunkach może być używany operator bitowy. Przecież w wyniku działania operatorem bitowym dostajemy jakąś wartość liczbową, którą sprawdzamy czy jest zerem czy nie.


Musisz jednak zrozumieć czym różnią się operatory bitowe od logicznych. Owszem można używać operatora bitowego w warnku IF ale!... ale na zmiennych/liczbach a nie jako operatora koniunkcji.

_________________
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: 30 sie 2016, o 16:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Kolego "maju"
Przeanalizuj może ten sposób.?
Co prawda przy tym sposobie nadal będzie szybko zmieniał stan na LEDzie trzeci klawisz.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Informacyjnie- odnośnie Twojego poprzedniego kodu.
Pomijając ^, w funkcji próbowałeś sprawdzać PINC oraz PIND - Czy zauważyłeś że wciskając kl PC4 lub PC5,
Sprawdzałeś to także ze stanem PINU PB4 i PB5. a tam jest MISO i SCK . Ponieważ PC4 to 4, PC5 to 5, a PB2 to 2.
Tak więc wciskajac klawisz na PB2 funkcja sprawdzała stan także na uwaga! PINC PC2, czytając klawisz jako 2.
Niestety trzeba pilnować co funkcja może sprawdzać przypadkowo. A i niestety nie dopatrzyłem się w kodzie DDRB &= KEY1_PIN. <___ ok. jest zero od początku , ja zawsze wstawiam mimo wszystko. ;)
Pozdrawiam ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2016, o 17:45 
Offline
Nowy

Dołączył(a): 30 sie 2016
Posty: 7
Pomógł: 0

Bardzo Dziękuje Daro69 :)
Przeczytałem pare razy, przeanalizowałem, z 20min mi to zajeło :P i juz wiem o co chodzi :) Teraz jeszcze pobawie się w blokowanie 3 klawisza aby działał: 'jedno kliknięcie jedno przełączenie' i zabieram się za dalsze ćwiczenia :)
Pozdrawiam



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

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