Strona Główna
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy RegulaminRegulamin  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj




Kurs AVR-GCC

Przyszłość jest w naszych rękach...
...bo przyszłość to robotyka.





Poprzedni temat «» Następny temat
Przesunięty przez: treker
08 Sie 08 06:00
Program i schemat czy dobrze ?
Autor Wiadomość
_cyna_PL 



Pomógł: 1 raz
Posty: 47
Otrzymał 1 piw(a)
Skąd: Z nikąd
Wysłany: 08 Sie 08 05:56   Program i schemat czy dobrze ?

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 :-P [nie zwracajcie uwagi na komentarze do komend to dla ułatwienia mi nauki]:

Kod:
 ' 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 :mrgreen:

w razie czego pytać to wytłumaczę bo nie wiem czy ........... :-D

Komentarz dodany przez: treker:

Pliki graficzne należy umieszczać tym sposobem.


Co to ma wspólnego z robotyką?
Przenosze.
Ostatnio zmieniony przez _cyna_PL 08 Sie 08 06:06, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
pawel 



Pomógł: 5 razy
Posty: 145
Otrzymał 4 piw(a)
Skąd: Rybnik
Wysłany: 08 Sie 08 08:41   

Program dobrze, schemat też. W BASCOMIe do programu wchodzisz poleceniem Gosub, a żeby wyjść z podprogramu pod pewnym warunku to umieszczasz polecenie Return w instrukcji warunkowej.
_________________
www.robotyka.net.pl
www.peakoil.pl
Postaw piwo autorowi tego posta
 
 
 
Decado 



Pomógł: 6 razy
Posty: 160
Otrzymał 6 piw(a)
Skąd: Bełk
Wysłany: 09 Sie 08 09:05   

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.
_________________
"Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Postaw piwo autorowi tego posta
 
 
 
_cyna_PL 



Pomógł: 1 raz
Posty: 47
Otrzymał 1 piw(a)
Skąd: Z nikąd
Wysłany: 09 Sie 08 09:56   

Cytat:
Co to ma wspólnego z robotyką?


Z robotyka nic ale z programowaniem owszem.

Cytat:
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 ;p [chodzi mi o takie coś ze jednym przyciskiem wchodzę do podprogramu a drugim wychodzę do głównego programu ;p [nie umiem niczego takiego znaleźć ;/]

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


czy chodzi a cos takiego

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


Komentarz dodany przez: treker:
Cytat:
Z robotyka nic ale z programowaniem owszem.



To co robiło w dziale Robotyka - Programowanie :-P
Postaw piwo autorowi tego posta
 
 
Decado 



Pomógł: 6 razy
Posty: 160
Otrzymał 6 piw(a)
Skąd: Bełk
Wysłany: 09 Sie 08 01:31   

nie do każdego dodaj
Kod:
Portd.0 = 0
portd.1 = 0
portd.2 = 0
portd.3 = 0


Wtedy będzie dobrze działac ;)
_________________
"Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Postaw piwo autorowi tego posta
 
 
 
pawel 



Pomógł: 5 razy
Posty: 145
Otrzymał 4 piw(a)
Skąd: Rybnik
Wysłany: 09 Sie 08 02:39   

Jeśli chodzi o to wychodzenie to chodzi o coś takiego:

Kod:
podprogram:

Do

If pin0.b=0 Then Return
End If

Loop
_________________
www.robotyka.net.pl
www.peakoil.pl
Ostatnio zmieniony przez pawel 09 Sie 08 02:40, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
 
Decado 



Pomógł: 6 razy
Posty: 160
Otrzymał 6 piw(a)
Skąd: Bełk
Wysłany: 09 Sie 08 05:09   

pawel wprowadzasz w błąd. Taki podprogram będzie w rzeczywistości pętlą nieskończoną.
Cyna dobrze napisał podprogramy.
_________________
"Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Postaw piwo autorowi tego posta
 
 
 
_cyna_PL 



Pomógł: 1 raz
Posty: 47
Otrzymał 1 piw(a)
Skąd: Z nikąd
Wysłany: 09 Sie 08 05:54   

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

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

Cytat:
Kod:
Portd.0 = 0
portd.1 = 0
portd.2 = 0
portd.3 = 0



gdzie ?? bo nie rozumiem ;p przekopiuj większy kawałem programu ;p
Postaw piwo autorowi tego posta
 
 
Decado 



Pomógł: 6 razy
Posty: 160
Otrzymał 6 piw(a)
Skąd: Bełk
Wysłany: 09 Sie 08 08:01   

Pisze teraz tak prowizorycznie bo niemam czasu musze zakonczyc do jutra swój projekt z którym mam troszke pracy.
Kod:
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
_________________
"Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Postaw piwo autorowi tego posta
 
 
 
pawel 



Pomógł: 5 razy
Posty: 145
Otrzymał 4 piw(a)
Skąd: Rybnik
Wysłany: 09 Sie 08 08:12   

Wydaje mi się że teki mój kod jest dobry ale jeszcze dodam tam kilka żeczy.

Kod:
podprogram:

'instrukcje zawarte w podprogramie

Do

If pin0.b=0 Then Return
End If

Loop

Return
_________________
www.robotyka.net.pl
www.peakoil.pl
Postaw piwo autorowi tego posta
 
 
 
_cyna_PL 



Pomógł: 1 raz
Posty: 47
Otrzymał 1 piw(a)
Skąd: Z nikąd
Wysłany: 10 Sie 08 05:23   

Oki już zrozumiałem błąd .

Ale jeszcze co do tych podprogramów :

Kod:
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 :) )
Ostatnio zmieniony przez _cyna_PL 10 Sie 08 05:25, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
mictronic 


Pomógł: 4 razy
Posty: 70
Otrzymał 1 piw(a)
Skąd: Bydgoszcz
Wysłany: 10 Sie 08 09:51   

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

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

Jesli zrobisz tak:
Kod:
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:

Kod:
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!
Postaw piwo autorowi tego posta
 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


website uptime

Powered by phpBB modified by Przemo © 2003 phpBB Group - mangi
REKLAMAPorównywarka cen elektronikiLove and Lighttaniec z gwiazdamitaniec nowoczesny Warszawakredyt przez internetneroBearShare