Skocz do zawartości
Kocon

[bascom\atmega8] Brak wyświetlania żądanej sekwencji

Pomocna odpowiedź

Witam, przez wakacje postanowiłem nauczyć się programować przynajmniej w bascomie. Przebrnąłem przez najprostsze programy czyli zapalanie diod switchami, funkcje czasowe, wywoływanie funkcji. Postanowiłem napisać program który zapala diody w sekwencji działania silnika krokowego bipolarnego.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portd = Output

Portd = &B00000000

Config Portc = Input

Portc = &B00000000

Sw Alias Pinc.1

Reset Pinc.1

Dim Kroki As Byte

Kroki = 1

Do

If Sw = 1 Then Kroki = Kroki + 1

Pind.4 = 1

If Kroki = 1 Then

Pind.0 = 0

Pind.1 = 1

Pind.2 = 0

Pind.3 = 1

If Kroki = 2 Then

Pind.0 = 1

Pind.1 = 0

Pind.2 = 0

Pind.3 = 1

If Kroki = 3 Then

Pind.0 = 1

Pind.1 = 0

Pind.2 = 1

Pind.3 = 0

If Kroki = 4 Then

Pind.0 = 0

Pind.1 = 1

Pind.2 = 1

Pind.3 = 0

If Kroki > 4 Then Kroki = 1

Loop

End

Nie pisałem objaśnień ale zasada działania programu wydaje się dość prosta. Do pind.4 podpięta jest dioda która wskazuje częstotliwość.

Kompilator wywala mi błędy :

Error : 7 Line: 0 IF THEN expected[38], in File :

Error: 123 Line: 0 END IF expected, in File :

Których nie rozumiem co mogą mi objaśniać.

Po wgraniu programu oczywiście nic nie działa 🙂

Ktoś może mi pomóc ?

Udostępnij ten post


Link to post
Share on other sites

Musisz poprawić składnię isntrukcji IF THEN, brakuje tam END IF na końcu instrukcji IF...THEN

prawidłowo powinno to wyglądać:

IF ... THEN...

END IF

Udostępnij ten post


Link to post
Share on other sites

W tej sytuacji bardzo przydatny jest polski help do Bascoma 😉TUTAJ! znajdziesz ten "tajemniczy" plik.

Udostępnij ten post


Link to post
Share on other sites

Po pierwsze używaj komendy code do publikacji kodu. Po drugie to są podstawy działania funkcji If Then... End If. Jeśli używasz więcej niż jednego polecenia po Then to powinieneś każdy taki blok kończyć End If:

$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Portd = &B00000000
Config Portc = Input
Portc = &B00000000

Sw Alias Pinc.1
Reset Pinc.1

Dim Kroki As Byte
Kroki = 1

Do
If Sw = 1 Then Kroki = Kroki + 1
Pind.4 = 1
If Kroki = 1 Then
Pind.0 = 0
Pind.1 = 1
Pind.2 = 0
Pind.3 = 1
End If

If Kroki = 2 Then
Pind.0 = 1
Pind.1 = 0
Pind.2 = 0
Pind.3 = 1
End If

If Kroki = 3 Then
Pind.0 = 1
Pind.1 = 0
Pind.2 = 1
Pind.3 = 0
End If

If Kroki = 4 Then
Pind.0 = 0
Pind.1 = 1
Pind.2 = 1
Pind.3 = 0
End If

If Kroki > 4 Then Kroki = 1
Loop
End

Czytaj helpa Bascoma następnym razem.

EDIT:

Widzę, że w trakcie pisania inni mnie wyprzedzili 🙂.

Udostępnij ten post


Link to post
Share on other sites

Dzięki wielkie, rozumiem. Kompilacja udała się bez żadnych problemów. Niestety sam układ nie działa 🙁 na wyjściach pind.0...4 jest cały czas stan niski pomimo wszelkich gróźb i próśb. I dalej nie mam pojęcia co może być nie tak 😉

Udostępnij ten post


Link to post
Share on other sites

Kocon, nie tylko ja dałem się złapać na logikę samego If ... Then, nie sprawdzając reszty kodu.

Nie działa ci bo źle przypisujesz stany, które się wymusza przez port a nie pin.

Udostępnij ten post


Link to post
Share on other sites

Oczywiście... Mój błąd 🙂

$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Portd = &B00000000
Config Portc = Input
Reset Pinc.1

Sw Alias Pinc.1

Dim Kroki As Byte
Kroki = 1

Do
If Sw = 1 Then Kroki = Kroki + 1
portd.4 = 1
If Kroki = 1 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 0
Portd.3 = 1
End If

If Kroki = 2 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 0
Portd.3 = 1
End If

If Kroki = 3 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 1
Portd.3 = 0
End If

If Kroki = 4 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 1
Portd.3 = 0
End If

If Kroki > 4 Then Kroki = 1
Loop
End

Mimo wszystko układ szaleje. Bez podania żadnego stanu na Pinc.1 wszystkie diody różnie mrugają. Po podaniu stanu wysokiego wszystkie świecą tak samo, stałym natężeniem. Natomiast po podaniu stanu niskiego włączają się kombinacje które nie zostały określone w programie, a dioda podpięta do portd.4 świeci cały czas. Z góry dziękuję za wyrozumiałość 🙂

Udostępnij ten post


Link to post
Share on other sites

Kocon, brakuje ci podstaw i chyba trochę logicznego myślenia. Wszystkie diody świecą tak samo po wciśnięciu przycisku bo nie masz żadnych opóźnień w kodzie i całość zmienia się pewnie kilkaset razy na sekundę, czego nie widzisz. Bez schematu podłączenia przycisku też nie można powiedzieć czy twój kod jest poprawny. Nie stosujesz się do poprawności podłączenia przycisku chociażby, który powinien zwierać pin do GND a nie do Vcc.

Udostępnij ten post


Link to post
Share on other sites

Dobra, od początku 🙂 schemat do programu z grubsza wygląda następująco :

Pragnąłbym by program zmieniał kombinacje ledów zależnie od wciśniętego przycisku, reagował tylko raz na zbocze , niezależnie czy trzymam go sekundę czy minutę.

Wykonałem jednak płytkę testową z wystawionymi goldpinami z każdego z portów oraz od zasilania co pozwala mi wykonywać na niej różne kombinacje, w tym właśnie również podawanie stanów 🙂

Wiem że na pewno brakuje mi podstaw ale piszę tu tylko po to żeby je zdobyć, z logicznym myśleniem tak samo różnie bywa 🙂

Udostępnij ten post


Link to post
Share on other sites

Kocon, to forum nie jest od nauki podstaw, których tobie ewidentnie brakuje. Masz źle podłączony przycisk, powinieneś go podłączyć aby zwierał do Gnd, a pin tego portu podciągnąć albo przez komendę Set portx.x do Vcc, albo zewnętrznym rezystorem do Vcc i wtedy zmieniasz warunek z 1 na 0 na pinie. Teraz nawet nic nie podciąga tego pinu do Gnd, więc jak przycisk nie jest wciśnięty to wisi w powietrzu, stąd ciągle coś się zmienia. Od nauki podstaw masz książki, kursy online i tego powinieneś się trzymać. Nikt nie będzie cię uczył krok po kroku na przykładach.

Udostępnij ten post


Link to post
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!

Gość
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...