Skocz do zawartości

Lampka rowerowa - Atmega8


_cyna_PL

Pomocna odpowiedź

Witam 🙂

Na pewno każdy z was jeździ bądź jeździł rowerem ;/

O podstawowym wyposażeniu roweru każdy wie a ja wspomnę o tylnym świetle, ponieważ zacząłem zabawę z procesorami postanowiłem zrobić tylna lampkę rowerowa z 7 opcjami [coś takiego jak ze sklepu za 4 zł].

Wiec przejdźmy do rzeczy:

- program na atmega8 [procesor i programator mam]

- programik napisałem ale nie wiem czy będzie działał wiec podaje go tutaj 😋 [nie zwracajcie uwagi na komentarze do komend to dla ułatwienia mi nauki]:

 ' program sterujacy funkcjami czterech diod [test] 
' przejscie do podprogramu



$regfile = "m8def.dat"                                      ' dzialanie na atemega8
$crystal = 8000000                                          '8 MHz na wewnętrznym oscylatorze


Config Portd = Output                                       'cały port d jako wyjście
Config Portb = Input                                        'caly port b jako wejscie

Portb = &B00000000                                          'wszystko stan = 0
Portd = &B00000000                                          'wszystko stan =0



Do                                                          'petla nieskonczona

If Pinb.0 = 1 Then                                          ' przycisk S1
Gosub Prog_1

Elseif Pinb.1 = 1 Then                                      ' przycisk S2
Gosub Prog_2

Elseif Pinb.2 = 1 Then                                      ' przycisk S3
Gosub Prog_3

Elseif Pinb.3 = 1 Then                                      ' przycisk S4
Gosub Prog_4

Elseif Pinb.4 = 1 Then                                      ' przycisk S5
Gosub Prog_5

Elseif Pinb.5 = 1 Then                                      ' przycisk S6
Gosub Prog_6

Elseif Pinb.6 = 1 Then                                      ' przycisk S7
Gosub Prog_7


End If                                                      'koniec bloku warunkowego

Loop

Prog_1: 
Set Portd.0
Set Portd.3

Wait 2                                                      'czekaj 2 s                                                   '
Return                                                      'wykonuje powrot do programu glownego

Prog_2: 
Set Portd.1
Set Portd.2

Wait 2                                                      'czekaj 2 s                                              '
Return                                                      'wykonuje powrot do programu glownego

Prog_3: 
Set Portd.0
Set Portd.2

Wait 2                                                      'czekaj 2 s
Return                                                      'wykonuje powrot do programu glownego

Prog_4: 
Set Portd.1
Set Portd.3

Wait 2                                                      'czekaj 2 s                                               '
Return                                                      'wykonuje powrot do programu glownego

Prog_5: 
Set Portd.0
Set Portd.1

Wait 2                                                      'czekaj 2 s
Return                                                      'wykonuje powrot do programu glownego

Prog_6: 
Set Portd.2
Set Portd.3

Wait 2                                                      'czekaj 2 s                                                    '
Return                                                      'wykonuje powrot do programu glownego

Prog_7: 

Set Portd.0
Set Portd.1
Set Portd.2
Set Portd.3
Wait 2                                                      'czekaj 2 s

Reset Portd.0
Reset Portd.1
Reset Portd.2
Reset Portd.3
Waitms 500                                                  'czekaj 0.5 s

Set Portd.0
Set Portd.1
Set Portd.2
Set Portd.3
Waitms 1500                                                 'czekaj 1.5 s                                                '
Return                                                      'wykonuje powrot do programu glownego


End

Oczywiście żaden program nie bedzie bez schematu :

wiec proszę o sprawdzenie zarówno programu jak i schematu;p

A jeszcze jedno co do języka bascom. Jaka komenda przenosi do podprogramu i z niego nie wychodzi aż do odpowiedniego wydarzenia??

ps: mam nadzieje ze temat nie poleci do kosza 😅

w razie czego pytać to wytłumaczę bo nie wiem czy ........... 😃

Komentarz dodany przez: treker:

Co to ma wspólnego z robotyką?

Przenosze.

Link do komentarza
Share on other sites

A ja tu widze mały błąd. Bo popatrz naciśniesz S1 a potem S2 to będziesz miał zapalone segmenty z S1 i z S2. Dodaj w programie zerowanie wyjśc(na diody) przy naciśnięciu następnego przycisku a potem dopiero ustawienie jego podporgramu.

Link do komentarza
Share on other sites

Co to ma wspólnego z robotyką?

Z robotyka nic ale z programowaniem owszem.

W BASCOMIe do programu wchodzisz poleceniem Gosub, a żeby wyjść z podprogramu pod pewnym warunku to umieszczasz polecenie Return w instrukcji warunkowej.

a mógłbyś podać przykład 😋 [chodzi mi o takie coś ze jednym przyciskiem wchodzę do podprogramu a drugim wychodzę do głównego programu 😋 [nie umiem niczego takiego znaleźć ;/]

Dodaj w programie zerowanie wyjśc(na diody) przy naciśnięciu następnego przycisku

czy chodzi a cos takiego

Prog_1: 
Set Portd.0
Reset Portd.1
Reset Portd.2
Set Portd.3 
Return

Komentarz dodany przez: treker:

Z robotyka nic ale z programowaniem owszem.

To co robiło w dziale Robotyka - Programowanie 😋

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

Właśnie tez tak myślałem ;/

Ale nie wiem jak zrobić aby wychodzić z podprogramu gdy zastanie nacisniety przycisk ;/

Portd.0 = 0
portd.1 = 0
portd.2 = 0
portd.3 = 0

gdzie ?? bo nie rozumiem 😋 przekopiuj większy kawałem programu 😋

Link do komentarza
Share on other sites

Pisze teraz tak prowizorycznie bo niemam czasu musze zakonczyc do jutra swój projekt z którym mam troszke pracy.

Prog_2: 
Reset Portd.0
Reset Portd.1
Reset Portd.2
Reset Portd.3
Set Portd.1
Set Portd.2

Wait 2                                                      'czekaj 2 s                                              '
Return                                                      'wykonuje powrot do programu glownego

Gdyby procke chodził bardzo wolno(20Hz) było by widac migotanie ale powyżej 50 podobno już nie widac a więc nie powinno byc problemu.

Pozdrawiam

Link do komentarza
Share on other sites

Oki już zrozumiałem błąd .

Ale jeszcze co do tych podprogramów :

Do

If Pinb.0 = 1 Then
Gosub Program1                                              ' przycisk 1
End If

Loop

Program1: 
Do

If Pinb.1 = 1 Then
Return                                                      ' przycisk 2
End If

Portd.0 = 1
Portd.1 = 1


Loop

Czy takie coś będzie działać ??

można użyć dwóch nieskończonych pętli ??

1 przycisk wchodzi do podprogramu 2 przycisk wychodzi z niego ??

pozdro 🙂)

Link do komentarza
Share on other sites

Nie nie może być dwóch pętli : D

Niedokońca rozumiem jaki jest problem ale napisze cos : P

Jesli zrobisz tak:

Do

If Pinb.0 = 1 Then gosub program1                                              
waitms 50
Loop

Program1: 
If Pinb.1 = 1 Then Return
waitms 50
Portd.0 = 1
Portd.1 = 1

end sub

Program poleci tam tylko wtedy gdy pinb.0 będzie w stanie wysokim,jeśli chcesz się tam zatrzymać gdy tylko raz przyciśniesz przycisk musisz policzyć kliknięcia...Coś takiego:

dim licznik as byte
Do

If Pinb.0 = 1 Then incr licznik

if licznik =1 then gosub program 1  'program skacze tam z każdym cyklem zegara do czasu gdy zmienna przyjmie inna wartość.                                            
waitms 50
Loop

Program1: 
If licznik=2 Then
Return
licznik=0                                   'zerujemy bo inaczej musiałbyś naciskać 253 razy...
end if

Portd.0 = 1                                'główny program podprogramu : P
Portd.1 = 1
waitms 50
end sub

To tyle, powinno działać ale różnie to jest...

Pozdrawiam Mictronic!

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.