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



Teraz jest 21 gru 2024, o 19:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 11 gru 2021, o 17:56 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Witam serdecznie. Jestem początkujący i wiem że pytanie jest pewnie banalne jednak proszę o pomoc. Napisałem w celach treningowo-edukacyjnych krotki kod ktory w pętli ma zaswiecac kolejno diodyod 1 do 8 podłączone do portu C Atmegi32. Wszystko działa chociaż pewnie dałoby się to lepiej zrobić. Chciałbym jednak żeby po zapaleniu ostatniej diody, diody zmieniły kierunek,to znaczy żeby "płynęły" od lewej do prawej i znów od prawej do lewej i tak w nieskonczonosc. Proszę o zerknąć na kod i podpowiedzieć mi jak to zrobić. Będę bardzo wdzięczny za pomoc i sugestie

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


chodzi mi żeby przesuniecie bitów na porcie C zadziałało w drugą stronę po zaleniu ostaniej 8 diody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2021, o 20:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Dodajesz zmienną kierunek. Jeśli kierunek ==0 to przesuwasz w lewo, jeśli 1 to w prawo.
I dodajesz dwa warunki zamiast tego, który masz. Jeżeli przesuniecie = 128, to kierunek = 1, jeśli przesuniecie = 0, to kierunek = 0 (albo warunki odwrotnie).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 10:02 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Bardzo dziękuję za podpowiedź, jednak nie za bardzo rozumiem jak ma to działać. Mógłbyś wkleić kawałek kodu jak powinno to wyglądać ? Z góry dziękuję

------------------------ [ Dodano po: 32 minutach ]

Zmieniłem warunek i teraz diody płyną od lewej do prawej po czym ostatnia dioda zapala się i tak zostaje. Kolejne diody nie zapalają się
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Niestety nie wiem jak uzyć zmiennej kierunek w tym przypadku



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 13:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Prawie dobrze :)
Tylko teraz tak: w każdym kroku przesuwasz w lewo (linijka 22). A jak przesuniecie będzie >128 dodatkowo w prawo :P
Linijki od 22 do 24 zamień na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i w dowolnym miejscu w pętli while:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Piszę z głowy, więc może trzeba będzie lekko zmienić ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 14:30 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Bardzo dziękuję....niby proste a jednak wymaga doświadczenia....kod wygląda teraz tak...lecz jeszcze są jeszcze 2 małe problemy

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


a mianowicie....
po załączeniu diody "płyną" od lewej do prawej lecz zaczynając od drugiej diody (pierwsza się nie zapala), a drugi problem że diody "płyną w lewo później w prawo i gasną a ja bym chciał żeby ta pętla pracowała w nieskonczoność ? Bardzo dziękuję koledze za poświęconą uwagę i czas (to w dzisiejszych czasach trudne do przecenienia)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 14:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Pierwszy problem rozwiążesz, jeśli najpierw wyślesz wartość na port, a później przesuniesz (czyli linijkę 30 przesuń przed 23).
A drugi... spróbuj w linijce 28 zmienić 0 na 1.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 18:06 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Teraz wszystko działa jak chciałem. Jeszcze raz bardzo dziękuję. Teraz spróbuję dodać obsługę przycisków. Wkleję później kod z moimi wypocinami



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2021, o 19:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Rób po kolei jak w blue booku. Na pewno ogarniesz :)
A co do pomagania... po to jest forum. Kiedyś ja potrzebowałem pomocy w podstawach, teraz sam mogę pomóc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2021, o 16:47 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Teraz postanowiłem wzbogacić mój program o obsługę 3 przycisków...Przycisk 1 ma ustawiać czas na 100ms drugi na 250 a trzeci na 500. Kod wygląda tak:

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


Niestety mam 3 błędy kompilacji:

main.c:(.text.startup.main+0x14): undefined reference to `klawisz_wcisniety'
main.c:(.text.startup.main+0x30): undefined reference to `klawisz_wcisniety'
main.c:(.text.startup.main+0x4c): undefined reference to `klawisz_wcisniety'

Co robię źle i jak ewentualnie to naprawić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2021, o 18:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Masz funkcję klawisz_wcisniety wewnątrz funkcji main.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2021, o 15:02 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Faktycznie pomogło. Wielkie dzięki. Teraz program działa jednak nie tak jak chciałem. To znaczy diody płyną co 100 ms jak nacisnę i trzymam przycisk 2 to zwalniają, jak naciśnę przycisk i trzymam to zwalniają jeszcze bardziej. Chciałem jednak osiągnąć efekt trwały, żebym nacisnieciem przycisku zmieniał czas i nie musiał go trzymać. Ale to chyba wyższa szkoła jazdy i nie zrealizuję tego w ten sposób. Jak można to najłatwiej rozwiązać ?
Oto obecny kod:

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: 14 gru 2021, o 18:44 
Offline
Nowy

Dołączył(a): 22 lis 2021
Posty: 7
Lokalizacja: Szwajcaria
Pomógł: 0

Myślałem żeby to zrobić za pomocą pętli do...while ale nie wiem czy to dobry pomysł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2021, o 18:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Napisz sobie swoją funkcję delay (Mirek gdzieś taką pokazał).
W funkcji wywołujesz _delay_ms(1) w pętli, a ilość obiegów pętli (czyli czas opóźnienia) podajesz jako argument tej funkcji.

Bo Twój program działa tak, jak jest napisany :P
Jeżeli nie naciskasz przycisku, to wywołujesz CZAS1.

Spróbuj sam, jak nie dasz rady, ktoś pomoże :)



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 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