Skocz do zawartości

Nie zmienia portu na stan wysoki


Pomocna odpowiedź

Napisano

Witam.

Dlaczego jeżeli na "CzujkaP" i "CzujkaL" nie podaje stanu to "Silnikl" i Silnikp" mają stan 0, a powinny mieć 1?

Z góry dzięki za pomoc.

$regfile = "attiny2313.dat"
$crystal = 8000000

Config Portb = Output
Config Portd = Input

Czujkal Alias Pind.1
Czujkap Alias Pind.2
Silnikl Alias Portb.1
Silnikp Alias Portb.3


Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
Waitms 50

Elseif Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
Waitms 50

Else
Silnikl = 1
Silnikp = 1
Waitms 50
End If

Loop
End

Poprawiłem lecz niczego to nie zmieniło.

$regfile = "attiny2313.dat"
$crystal = 8000000

Config Portb = Output
Portb = &B00000000
Config Portd = Input
Portd = &B0000000


Czujkal Alias Pind.1
Czujkap Alias Pind.2
Silnikl Alias Portb.1
Silnikp Alias Portb.3


Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
Waitms 50

Elseif Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
Waitms 50

Else
Silnikl = 1
Silnikp = 1
Waitms 50
End If

Loop
End

Jeżeli ustawiłeś stany spoczynkowe na 0 to jeśli czujki nie dają sygnału stan na pinie wyjściowym będzie równy 0.

PS.Aby przy braku sygnału uzyskać stan 1 ustaw stan spoczynkowy na 1.

Hmm, dziwne, gdy zapisze w ten sposób to działa prawidłowo.

Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
Elseif Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
Elseif Czujkal = 0 And Czujkap = 0 Then
Silnikp = 1
Silnikl = 0
End If

Ale gdy zapiszę już tak:

Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
Elseif Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
Elseif Czujkal = 0 And Czujkap = 0 Then
Silnikp = 1
Silnikl = 1
End If

to nie świecą się diody, zachowuje się tak jak by nie mógł załączyć 2 jednocześnie...

Spróbuj tak :

Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
End If
If Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
End If
If Czujkal = 0 And Czujkap = 0 Then
Silnikp = 1
Silnikl = 1
End If

Chociaż to i tak dziwne, że nie chce dać wysokiego na dwóch portach. A w ogóle ten pin daje napięcie przy 1 w drugim if'ie programu?

Niestety dalej to samo.

Zmiana stanu przy pierwszych 2 if'ach działa prawidłowo.

 Do
If Czujkal = 1 Then
Silnikl = 1
Silnikp = 0
End If
If Czujkap = 1 Then
Silnikl = 0
Silnikp = 1
End If
If Czujkal = 0 And Czujkap = 0 Then
Portb.2 = 1
End If

Mimo takiego zapisu port B2 nie reaguje, przypuszczam więc, że rozmyślamy nad uszkodzonym sprzętem.

to w którymś programie coś zepsułeś na początku za silnik jest odpowiedzialny portb. 1 i 3 a potem okazuje się w ostatnim programie że ten niedziałający to portb.2

Rozjaśnię troszkę sytuację, mam dwa silniki za które odpowiadają odpowiednio za lewy i prawy porty 1 i 3 ale nie załączają się jednocześnie więc postanowiłem dopisać port 2 który by odpowiadał za odpalenie obu silników jednocześnie, lecz jak się okazało port B2 nie działa i stąd mój wniosek, że microcontroler jest uszkodzony.

Która końcówka do czego ? Może przez przypadek jedną końcówkę dałeś do vcc a drugą do pinu procesora gdzie było 1 więc multimetr nie pokazywał napięcia. I sprawdź przy okazji piny 3 i 1 ( przy programie w którym ustawia je oba na 1.

  • Lubię! 1

Heh, już działa, miałeś racje sprawdzałem pod Vcc, dzięki za zainteresowanie, swoją drogą to ile trzeba się nagłowić nad noobskim błędem, nauka na przyszłość: Sprawdzać połączenia 3 razy i czytać "od deski do deski" podręcznik AVR.

Pozdrawiam, i przepraszam za bardzo nobski błąd 😉

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