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



Teraz jest 18 sty 2025, o 02:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 13 mar 2014, o 18:21 
Offline
Nowy

Dołączył(a): 13 mar 2014
Posty: 5
Pomógł: 0

Witam!
Na wstępie chciałbym z góry zaznaczyć, że jeszcze mistrzem w temacie nie jestem.
Chcę stworzyć układ w którym wciskając micro-switcha wywołuję miganie diodą - kod właściwie żywcem przepisuję z książki Pana Mirka, ale problem jest od strony elektronicznej. Z tego co wyczytałem muszę podłączyć switcha w taki sposób :

Obrazek

Kod wygląda następująco:

Kod:
#define LED_PIN (1<<PC4)
#define LED_ON PORTC |= LED_PIN
#define LED_OFF PORTC &= ~LED_PIN
#define LED_TOG PORTC ^=LED_PIN
#define KEY_PIN (1<<PB0)
#define KEY_DOWN !(PORTB & KEY_PIN)
#include<avr/io.h>
#include<util/delay.h>
int main(void)
{
   DDRC |= LED_PIN;
   PORTC |=LED_PIN;
   DDRB &= ~KEY_PIN;
   PORTB |= KEY_PIN;
      while(1)
      {
         if(KEY_DOWN)
         {
               _delay_ms(80);
               if(KEY_DOWN)
               {
               LED_TOG;
               _delay_ms(200);
               }
         }




      }
}


Coś jest jednak nie halo. Przyciśnięcie przycisku zwiera przeciwległe (po przekątnej) nóżki. Nie rozumiem jednak jak to dokładnie ma działać... Jeśli chodzi o elektronikę to jestem naprawdę noga - motywacją do zgłębienia tematu avr jest m.in właśnie poznanie tego tematu i nabycie pewnch umiejętności praktycznych. Szukam w internecie jakiejś pomocy, ale 90% ludzi na forach po prostu to wszystko już wie i nie umiem znaleźć jakiegoś wyjaśnienia jak to ma działać. Jeśli wkurza Cię, że ktoś znów zadaje trywialne pytania - przewiń temat, wybacz początkującemu :) Jeśli znajdziesz chwilę, by przybliżyć mi jak to ma działać - z góry dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 18:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2012
Posty: 174
Lokalizacja: Gliwice
Pomógł: 19

Przycisk podłącza się przeważnie tak jak na zdjęciu:


Obrazek


Ty w zasadzie nie podłączyłeś przycisku do procesora. Tam gdzie masz rezystor wychodzący ze switcha ( po co Ci ten rezystor? - jest niepotrzebny) powinien być kabel który idzie bezpośrednio do odpowiedniego pinu procesora.


Działa to mniej więcej tak że jeżeli naciśniesz przycisk to zewrzesz nóżkę procesora do masy i zacznie płynąć przez nią prąd ( o ile programowo podciągniesz do niej wewnętrzny rezystor podciągający poprzez "PORTB |= KEY_PIN;" oraz ustawisz ją jako wejście "DDRB &= ~KEY_PIN;") . Ty w pętli głównej sprawdzasz poprzez tą linijkę czy płynie ten prąd :

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



jeżeli tak to wykonujesz jakąś konkretną operację ( w tym przypadku zmieniasz stan nóżki na porcie PC4 na przeciwny).


ps. masz mały błąd w kodzie:

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


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



ps2. przeważnie do projektu dołączamy pliki na samym początku programu więc przenieś wszystkie #include na samą górę programu


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 18:56 
Offline
Użytkownik
Avatar użytkownika

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

Kod:
#define KEY_DOWN !(PORTB & KEY_PIN)

błąd powinno być
Kod:
#define KEY_DOWN !(PINB & KEY_PIN)


W BB na płycie jest errata tam masz wyjaśnione, że
PINx jest to rejestr wejściowy
PORTx jest to rejestr wyjściowy


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 19:47 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 27 sty 2013
Posty: 2
Pomógł: 2

Tak w ogóle to przycisk fizycznie nie jest połączony z procesorem.
Obrazek
Strzałkami zaznaczylem ze są na dwóch oddzielnych szynach na płytce prototypowej.


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 22:07 
Offline
Nowy

Dołączył(a): 13 mar 2014
Posty: 5
Pomógł: 0

Działa! Bardzo Wam dziękuję. Znalazłem właśnie taki opis podłączenia switcha "gdzieś w necie"...
Dzięki bardzo!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 22:12 
Offline
Moderator
Avatar użytkownika

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

henio napisał(a):
Znalazłem właśnie taki opis podłączenia switcha "gdzieś w necie"...


opis słicza to masz dobry .... tylko zauważ że go źle w stykówce podłączasz ....

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO