Skocz do zawartości

Bascom program led


eryks

Pomocna odpowiedź

Witam

Dopiero co sie uczę nigdzie nie mogę tego znaleźć

program na 1 diode led + 2 przyciski bardzo proste wszystko dziala ale nie wiem jak uwzględnić to w moim programie :

mam wduszony przycisk pierwszy jednocześnie wduszam przycisk drugi "gaszenie diody" co zrobic aby dioda zgasla i mikrokontroler zignorowal sygnal caly czas wduszonego przycisku pierwszego

                                    $regfile "m48def.dat"
$crystal = 1000000

Config Pind.0 = Output
Led Alias Portd.0
Led = 0




Config Portb.0 = Input
Portb.0 = 1
P1 Alias Pinb.0

Config Portb.1 = Input
Portb.1 = 1
P2 Alias Pinb.1







Do



If P1 = 0 Then
Led = 1
Bitwait P2 , Reset
End If

If P2 = 0 Then
Led = 0
Bitwait P1 , Reset
End If

Loop
End                       
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

matty, Chumanista, ciekawe - muszę sprawdzić. Jednak przyznacie chyba, że nawet dla średnio zaawansowanego użytkownika takie opóźnienie będzie nawet nie zauważalne...

Tak czy inaczej, nie róbmy zamieszania w temacie kolegi eryks i poczekajmy na jego odpowiedź, bo wszystko będzie lepsze od Bascoma 😉

Link do komentarza
Share on other sites

Nie wiem od czego zacząć. Od bascom czy od C? Co jest łatwiejsze na początek? Wydawało mi sie ze bascom będzie mi łatwiej ogarnąć

Jest ktoś wstanie mi pomoc z moim programem jak rozwiązać ten problem? "mam wduszony przycisk pierwszy jednocześnie wduszam przycisk drugi (gaszenie diody) co zrobic aby dioda zgasla i mikrokontroler zignorowal sygnal caly czas wduszonego przycisku pierwszego

"

Link do komentarza
Share on other sites

Jak chodzi o porównywanie C z Arduino, to pamiętajcie, że to niewielka różnica. W rzeczywistości Arduino to nic więcej jak zwykłe C++ z dołączonymi bibliotekami. Akurat funkcja digitalWrite() jest napisana bez użycia obiektowości, więc nie ma w niej nic innego niż w typowym C.

Mniejsza prędkość działania wynika z kilku powodów. Po pierwsze jest to funkcja, więc samo wywołanie zajmuje czas. Po drugie ta funkcja robi trochę więcej niż prosty zapis do rejestru - np. wyłącza przerwania, wyłącza PWM jeśli był włączony.

Natomiast tym co zajmuje najwięcej czasu jest "niezależność od platformy". W kodzie tej funkcji znajdziemy wywołanie pgm_read_word, które skutecznie zmniejsza prędkość działania.

Jednak to nadal jest C (no może C++), tylko funkcja jest mało optymalna. Jeśli komuś zależy na wydajności może napisać makro, które wykona tą samą czynność z pełną prędkością.

Moim zdaniem Arduino jest idealne do nauki. Natomiast później można szybko i łatwo pozbyć się bibliotek , czy moim zdaniem paskudnego Sketch-a i zacząć programować w czystym C albo C++.

Link do komentarza
Share on other sites

eryks, wybór języka zależy od tego jakie masz plany na później. Bascom to droga dość zamknięta. Jeśli dopiero zaczynasz, to polecam Arduino, później przejście na C będzie bardzo łatwe 🙂

Aby rozwiązać Twój problem najlepiej byłoby wykorzystać zmienną pomocniczą i na niej sprawdzać warunki. Wiesz jak to zrobić?

Link do komentarza
Share on other sites

eryks, problem z Twoim programem polega na tym, że gdy naciśniesz oba przyciski jednocześnie, program wchodzi do obu if-ów oraz nie czeka na bitwait-ach - przecież stan odczytany jest zero. Oznacza to że dioda ciągle zapala się i gaśnie. Jeśli chcesz żeby program działał inaczej, musisz dodać oczekiwanie na zwolnienie przycisku. Przykładowo:

If P1 = 0 Then 
Led = 1 
Bitwait P2 , Reset 
Led = 0 
Bitwait P1 , Set 
End If 
  • Lubię! 1
Link do komentarza
Share on other sites

Jest jeszcze inny sposób, dzięki któremu przy naciskaniu obydwóch przycisków dioda led nie zaświeca się wcale (w oryginalnym programie kolegi eryks'a dioda na przemian zaświeca się i gaśnie szybko, co wygląda jakby się świeciła cały czas). W tm celu wystarczy zmodyfikować pierwszy If w głównym programie na następujące:

If P1 = 0 Then

If P2 = 1 Then

Led = 1

End If

Bitwait P2 , Reset

End If

Link do komentarza
Share on other sites

Sam uczyłem się na bascomie i faktycznie na początku jest łatwy do opanowania schody zaczynają się zaraz za początkiem bo program przypomina tasiemca w którym trudno się połapać więc tak jak Chumanista polecam od razu czyste C. Proponuje olac bascoma i arduino i zainstalowac WinAvr jeśli masz stary komputer albo Atmel Studio na nowszym. Nie trać czasu na bascoma i arduino, ucz się od razu programować nie kopiować. Powodzenia.

Rzecz jasna płytki od arduino można programować w czystym C za pomocą np. WinAvr. Płytki są tanie i mają niewielkie rozmiary więc da się je wlutować w każdy niemal własny projekt bez kłopotu.

Jakiego procka używasz?

Polecam 2 książki na początek:

Williams E. - Programowanie układów AVR dla praktyków.pdf

Tomasz Francuz - Język C dla mikrokontrolerów AVR.pdf

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.