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



Teraz jest 31 sty 2025, o 14:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 30 cze 2012, o 00:04 
Offline
Użytkownik
Avatar użytkownika

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

Zmodyfikowałem kod z lekcji 2 z pierwszej książki Mirka, aby osiągnąć analogiczny efekt z buzzerem. Jednak naciśnięcie klawisza odpowiedzialnego za włączenie/zmianę stanu powoduje tylko krótkie piknięcie buzzerem. Co może być nie tak?

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

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Ostatnio edytowano 30 cze 2012, o 11:17 przez Ledes, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 00:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ponieważ buzzer to taki głośnik ( oczywista oczywistość) , a głośnik odtwarza dźwiek, a dźwięk to napięcie o zmiennej amplitudzie, więc zostaw na razie buzzer i przerób lekcje z pwm a wtedy będzie można coś pokombinować z nim ;)
Bo przy takim podłączeniu to może ci z czegoś dymek póść ............



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 01:14 
Offline
Użytkownik
Avatar użytkownika

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

Przecież ten buzzer jest sterowany zero-jedynkowo...
Dymek? Co, z czego?

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 07:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Różnice między buzerem a buzerem z wbudowanym generatorem są znaczące a kolega Malutki opisał Ci działanie buzera bez wbudowanego generatora.
Z Twojego postu nie wynikało że zastosowałeś buzer z generatorem :)

Druga sprawa, czy buzerem sterujesz bezpośrednio z procka czy przez tranzystor?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 08:00 
Offline
Moderator
Avatar użytkownika

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

Dlatego na forum, zawsze jest dobrze przypomnieć przy zakładaniu tematu, że posiadamy np zestaw uruchomieniowy ATB rev:1.0x albo że jakiś inny zestaw YYY albo że płytkę stykową i podłączamy coś tam - np buzzer w taki czy inny sposób.

Nie każdy zawsze pamięta z innych postów że pytający działa na takiej czy innej platformie sprzętowej.

Ja zdaje się pamiętam, że kolega ledes posiada zestaw ATB rev:1.03

więc mogę podpowiedzieć, że oczywiście w każdym zestawie ATB jest zainstalowany Buzzer z wbudowanym generatorem i w najnowszych zestawach jest on sterowany przez tranzystor.

Dlatego śmiało można się w ten sposób bawić i używać buzzera do woli... po to on jest w zestawie. Nie ma żadnych ograniczeń ... co zaś się tyczy samego kodu...

-- dodano 30 cze 2012, o 07:10 --

To wszystko w tym kodzie działa jak należy ;) ... tylko

Spróbuj sobie dużo krócej kliknąć palcem w ten klawisz który ma zmienić jego stan - wtedy okaże się że buzzer zmieni swój stan i będzie ładnie raz brzęczał a raz cicho

jeśli zaś palca trzymasz za długo na przycisku to buzzer albo tylko piśnie krótko albo jeśli będziesz go cały czas trzymał ten klawisz to buzzer będzie cyklicznie piszczał - no właśnie i co ile czasu ? - co 80ms tyle ile masz ustawione niby tego _delay'a do eliminacji drgań styków

Zaznaczam i przypominam, że to są początki i tylko takie hmmm super mega uproszczone wersje posługiwania się klawiszami. To nawet nie chodzi o drgania styków co niedługo wyjaśnię w mam nadzieję fajnym artykule na blogu , ale o te problemy - co by się działo gdybyś w ogóle wywalił z tamtej funkcji _delay_ms(80); ... sprawdź sam wtedy przełączenie kliknięciem byłoby jakąś losową grą ;) .... tyle że niektórzy straszą na swoich blogach - że to te straszne dragania styków ;) ... ale to po prostu brak czasu oczekiwania

_________________
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 cze 2012, o 10:07 
Offline
Użytkownik
Avatar użytkownika

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

mirekk36 napisał(a):
Dlatego na forum, zawsze jest dobrze przypomnieć przy zakładaniu tematu, że posiadamy np zestaw uruchomieniowy ATB rev:1.0x albo że jakiś inny zestaw YYY albo że płytkę stykową i podłączamy coś tam - np buzzer w taki czy inny sposób.

Nie każdy zawsze pamięta z innych postów że pytający działa na takiej czy innej platformie sprzętowej.

Ja zdaje się pamiętam, że kolega ledes posiada zestaw ATB rev:1.03

Zgadza się, moje niedopatrzenie. Już dodałem to w podpisie aby za każdym razem tego nie pisać a jeszcze pewnie nie jeden temat założę. :)

-- dodano 30 cze 2012, o 11:20 --

mirekk36 napisał(a):
To wszystko w tym kodzie działa jak należy ;) ... tylko

Spróbuj sobie dużo krócej kliknąć palcem w ten klawisz który ma zmienić jego stan - wtedy okaże się że buzzer zmieni swój stan i będzie ładnie raz brzęczał a raz cicho

jeśli zaś palca trzymasz za długo na przycisku to buzzer albo tylko piśnie krótko albo jeśli będziesz go cały czas trzymał ten klawisz to buzzer będzie cyklicznie piszczał - no właśnie i co ile czasu ? - co 80ms tyle ile masz ustawione niby tego _delay'a do eliminacji drgań styków

Zaznaczam i przypominam, że to są początki i tylko takie hmmm super mega uproszczone wersje posługiwania się klawiszami. To nawet nie chodzi o drgania styków co niedługo wyjaśnię w mam nadzieję fajnym artykule na blogu , ale o te problemy - co by się działo gdybyś w ogóle wywalił z tamtej funkcji _delay_ms(80); ... sprawdź sam wtedy przełączenie kliknięciem byłoby jakąś losową grą ;) .... tyle że niektórzy straszą na swoich blogach - że to te straszne dragania styków ;) ... ale to po prostu brak czasu oczekiwania

Potem podłączę płytkę i sprawdzę. Ale interesuje mnie, dlaczego buzzer nie piszczy cały czas gdy podam mu jedynkę (w kodzie są uwzględnione drgania styków)? Bo jakoś nadal nie kumam.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 10:26 
Offline
Moderator
Avatar użytkownika

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

Nie no pewnie, że buzzer musi brzęczeć gdy mu podasz jedynkę - tak jak dioda ;) napisz który konkretnie fragment programu załącza ci tą jedynkę niby - a nie działa

_________________
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 cze 2012, o 10:27 
Offline
Użytkownik
Avatar użytkownika

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

Zauważyłem, że jak w programie była obsługa jednego przycisku to wszystko było ok, i buzzer piszczał cały czas (chyba, albo mi się z diodą myli) albo wcale. Dopiero przy trzech przyciskach coś jest nie halo i często nie reagują przyciski, trzeba kilka razy naciskać aby zareagował. Czym to jest spowodowane? Chciałbym to zrozumieć, zanim zabiorę się za trudniejsze rzeczy.

-- dodano 30 cze 2012, o 11:28 --

mirekk36 napisał(a):
Nie no pewnie, że buzzer musi brzęczeć gdy mu podasz jedynkę - tak jak dioda ;) napisz który konkretnie fragment programu załącza ci tą jedynkę niby - a nie działa

if(klawisz_wcisniety(KEY3_PIN)) BUZ_ON;

toggle też źle działa.

wciskam klawisz KEY3 i buzzer daje krótkie piknięcie tylko, powinien piszczeć cały czas...

-- dodano 30 cze 2012, o 11:33 --

Cytuj:
Spróbuj sobie dużo krócej kliknąć palcem w ten klawisz który ma zmienić jego stan - wtedy okaże się że buzzer zmieni swój stan i będzie ładnie raz brzęczał a raz cicho

Właśnie ten klawisz powoduje, że z każdym razem buzzer krótko pika. Tak samo, jak klawisz włączający buzzer.

-- dodano 30 cze 2012, o 11:35 --

Cytuj:
jeśli zaś palca trzymasz za długo na przycisku to buzzer albo tylko piśnie krótko albo jeśli będziesz go cały czas trzymał ten klawisz to buzzer będzie cyklicznie piszczał - no właśnie i co ile czasu ? - co 80ms tyle ile masz ustawione niby tego _delay'a do eliminacji drgań styków

No tak, jak przytrzymam to cyklicznie piszczy. Błąd w moim rozumowaniu jest taki, że wg programu jak nacisnę odpowiedni przycisk, to buzzer powinien stale piszczeć albo zmienić swój stan a jest, jak opisałem. :/

-- dodano 30 cze 2012, o 11:40 --

Cytuj:
Spróbuj sobie dużo krócej kliknąć palcem w ten klawisz który ma zmienić jego stan - wtedy okaże się że buzzer zmieni swój stan i będzie ładnie raz brzęczał a raz cicho

Zgadza się, ale nadal nie rozumiem, dlaczego tak się dzieje.

-- dodano 30 cze 2012, o 11:43 --

Ehh to co wyżej napisałem (z tym krótkim naciśnięciem) najpierw działało a teraz nie... Magia...

-- dodano 30 cze 2012, o 12:02 --

Tak, potwierdzam, z jednym przyciskiem to działa jak należy, dopiero przy 2+ przyciskach na raz w programie coś się krzaczy. Ktoś mi to wytłumaczy?

-- dodano 30 cze 2012, o 12:05 --

Jak zakomentowałem if(klawisz_wcisniety(KEY2_PIN)) BUZ_OFF; to działa ok

-- dodano 30 cze 2012, o 12:11 --

Jak zakomentuję 34 linię to działa ok, dlaczego?

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 11:30 
Offline
Moderator
Avatar użytkownika

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

Kurczę no musiałem na prawdę nieźle patrzeć w ten kod jak sroka w gnat żeby dostrzec gdzieś pan babola popełnił ;) eeeeh

no ale dobrze - ja straciłem trochę czasu a ty za to raz na zawsze zapamiętasz co to znaczy, gdy się linii wejściowej klawisza nie podciągnie do VCC i co to oznacza że na wejściu w stanie trzecim czyli HiZ napięcie pływa - stąd te czary, że raz ci coś działa a raz nie, raz działa tak a raz inaczej ;) normalnie masakra ;)

wystarczyło zakomentować linię w której miałeś BUZ_OFF żeby zacząć się domyślać, że to właśnie ten IF co jakiś czas w tajemniczy sposób się SPEŁNIA ;) ... no bo rzeczywiście tak jest .... skoro twoje podciąganie pinów klawiszy do VCC wygląda tak:

PORTC &= ~(KEY1_PIN | KEY1_PIN | KEY3_PIN);

trzeba uważać na to COPY & PASTE ;)

teraz jaśniej ? gdy BUG wyrwany z korzeniami ?

_________________
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 cze 2012, o 11:32 
Offline
Użytkownik
Avatar użytkownika

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

Dobra, działa. Przynajmniej na razie. Znalazłem jeszcze kilka błędów w kodzie.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 11:33 
Offline
Moderator
Avatar użytkownika

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

Ledes napisał(a):
.... Znalazłem jeszcze kilka błędów w kodzie.


I o to chodzi ;)

_________________
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 cze 2012, o 11:34 
Offline
Użytkownik
Avatar użytkownika

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

Właśnie ten sam błąd znalazłem. Po jego naprawieniu działa lepiej. Dzięki.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 11:38 
Offline
Moderator
Avatar użytkownika

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

Tak tak był jeszcze przy linii z ustawianiem kierunku

Cytuj:
DDRC &= ~(KEY1_PIN | KEY1_PIN | KEY3_PIN);


ale tu cię rozczaruję, to nie miało żadnego wpływu na działanie tego kodu - dlaczego? To też warto żebyś wiedział.

Po resecie wszystkie rejestry no może nie wszystkie w całym procku (trzeba sprawdzać to w nocie dla każdego rejestru) ale na pewno rejestry portów są WYZEROWANE czyli dlatego domyślnie wszystkie piny są WEJŚCIAMI.

Dlatego tą linijkę można sobie nawet pominąć - żeby nie zabierała miejsca w pamięci Flash w kodzie - no ale dla przejrzystości warto ją pisać. Nie mniej jednak gdy zbliżamy się do końca pamięci Flash to wtedy będziesz pamiętał że takie linijki można pousuwać ;)

_________________
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 cze 2012, o 11:46 
Offline
Użytkownik
Avatar użytkownika

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

Tak, o tym samym było w książce. Jednak muszę nabrać nieco wprawy w tych wszystkich rejestrach, bo z początku to nie wiadomo co z czym i do czego. ;)
Fajny rysunek widziałem ostatnio na stronie Atnela/blogu Twoim. O różnicach między PORT/PIN i jakimi instrukcjami to obsługiwać. Szkoda, że nie znalazło się to w książce. ;)

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 11:58 
Offline
Moderator
Avatar użytkownika

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

Ledes napisał(a):
Tak, o tym samym było w książce. Jednak muszę nabrać nieco wprawy w tych wszystkich rejestrach, bo z początku to nie wiadomo co z czym i do czego. ;)
Fajny rysunek widziałem ostatnio na stronie Atnela/blogu Twoim. O różnicach między PORT/PIN i jakimi instrukcjami to obsługiwać. Szkoda, że nie znalazło się to w książce. ;)


No właśnie - sam nie wiem jak mogło mi to wylecieć z głowy podczas jej pisania - ale dlatego jest na blogu - no i może jeśli się pojawi kiedyś drugie oficjalne i poprawione wydanie to pewnie to dodam.

-- dodano 30 cze 2012, o 11:03 --

aha i jeszcze jedno - na prawdę nie przyzwyczajaj się do takiej obsługi klawiszy - to tylko wstęp i jakieś tam podstawy podstaw. Ja widzę, zresztą że lecisz z materiałem jak burza - no ale nie ma co się dziwić wspominałeś że znasz z PC'ta języki typu C++ ..... Generalnie jak dojdziesz do dalszych rozdziałów i poczytasz sobie rozdział "Wstęp do systemów czasu rzeczywistego albo jeszcze o funkcji SuperDebounce .... to wtedy będziesz miał komplet informacji co i jak - i zobaczysz, że do obsługi klawiszy nie potrzeba ani jednej instrukcji _delay_ms()

_________________
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 cze 2012, o 19:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 cze 2012
Posty: 135
Pomógł: 1

Witam, ja bym jeszcze za pomocą flagi delikatnie zmodyfikował kod zabezpieczając się właśnie
przed wielokrotnym wywołaniem buzera przy dłuższym naciśnięciu przycisku
Kod:
...
uint8_t key=0;
...
while(1)
 {
  if ( (klawisz_wcisniety(KEY3_PIN)) && (~key) ) BUZ_ON;
  if ( (klawisz_wcisniety(KEY2_PIN)) && (~key) ) BUZ_OFF;
  if ( (klawisz_wcisniety(KEY1_PIN)) && (~key) ) BUZ_TOG;
  key = ( (klawisz_wcisniety(KEY3_PIN)) || (klawisz_wcisniety(KEY2_PIN)) || (klawisz_wcisniety(KEY1_PIN)) ) ? 1 : 0;
 }



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 19:38 
Offline
Użytkownik
Avatar użytkownika

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

To nie zadziała. Zastosowałeś negację bitową (tylda) zamiast logicznej (wykrzyknik). Negacja bitowa od 1 da 0xFE więc wartość niezerową. Ja bym dał key jako zmienną boolowską i negacje logiczne zamiast bitowych.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2012, o 21:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 cze 2012
Posty: 135
Pomógł: 1

Ledes masz rację, należy tyldy zastąpić wykrzyknikami, idea jednak jest w porządku.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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