Skocz do zawartości

Bascom program led


Pomocna odpowiedź

Napisano

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                       

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 😉

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

"

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

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

Jak narazie to planow żadnych nie mam z tym związanych robie to tylko żeby sie czegoś więcej nauczyć, nie mam pojecia jak wykorzystać zmienna pomocnicza.

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
  • 1 rok później...

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

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...