Skocz do zawartości

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


Kocon

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 ?

Link do komentarza
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 🙂.

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

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 😉

Link do komentarza
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.

Link do komentarza
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ść 🙂

Link do komentarza
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.

Link do komentarza
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 🙂

Link do komentarza
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.

Link do komentarza
Share on other sites

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

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.