Skocz do zawartości

BASCOM i obsługa TSOP


lukaszinfer

Pomocna odpowiedź

Witam

mam problem z napisaniem malutkiego odcinka programu do mojego robota. Mój robot bedzie uruchamiany za pomocą syganłu IR z PILOTA do TV. Czujnik TSOP bądzie podłączony do PORTD.0. Podprogamy ruchu robota i podprogram czujnika odleglosci mam juz napisany. Teraz potrzebuje coś takiego napisać przypuszczam ze to trzeba w przerwaniu ale dalej to nie stety wiem.

A więc:

pierwszy sygnał do D.0 robot jest włączony

drugi sygnał : robot jest wyłączony następuje jakby reset procka w moim przypadku ATMEGA8 ( tylko taki miałem ) i robot czeka na sygnał który znów pozwoli mu działać.

Dla tego co nie zrozumiał wyjasnie to na zasadzie SWITCHA i diody:

S1 nacisniety dioda np. B.1 ON

S1 naciśnięty drugi raz dioda B.1 OFF

'''''''''''''''''''''''

S1 to switch podłączony do np tego portu d.0

Za wszelkie błedy ortograficzne o interpunkcyjne PRZEPRASZAM 😉

Link do komentarza
Share on other sites

nie mozesz podlaczyc czujnika do portud.0 jak chcesz robic to w przerwaniu

$regfile = "m8def.dat" 
$crystal = ?

Config Int0 = Low Level
Config Rc5 = Pind.2
On Int0 Przerwanie

Dim Address As Byte , Command As Byte

Enable Interrupts
Enable Int0

Do
Powerdown                                                   'tryb uspienia
                                                            'ustaw przycisk on
If Command = ? And Address = ? Then
  Do

  Loop Until Command = ? And Address = ?                   'ustaw przycisk restartu
  'tutaj mozesz wpisac swoj reset
End If


Loop
End

Przerwanie: 
Disable Int0
Getrc5(address , Command) 
Command = Command And &B01111111
Enable Int0
Return
Link do komentarza
Share on other sites

nie mozesz, bo po prostu atmel nie zrobil przerwania na tym pinie. Przerwanie jest na pinie-d 2 i 3

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

Config Pind.2 = Input
Set Portd.2

Config Int0 = Low Level
On Int0 Przerwanie

Dim X As Bit
X = 0

Enable Interrupts
Enable Int0

Do
Powerdown                                                   'tryb uspienia

If X = 1 Then
  Do

  Loop Until X = 0
  'tutaj mozesz wpisac swoj reset
End If

Loop
End

Przerwanie: 
Disable Int0
Waitms 45
If Pind.2 = 0 Then
  Toggle X
End If
Enable Int0
Return

Wiem, ze w przerwaniu jest wait, ale nie chcialo mi sie bawic w cos innego np. flagi. Wiadomo to jest blad, ale powinno dzialac.

[ Dodano: 31 Sie 09 12:04 ]

tak apropo na elektrodzie ci odpowiedzialem nie wiem czy widziales.

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

Na elektrodzie nie czytałem 🙁

skleilem cos takiego:


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

Config Pind.2 = Input
Set Portd.2

Config Int0 = Low Level
On Int0 Przerwanie

Dim X As Bit
X = 0

Enable Interrupts
Enable Int0

Do
Powerdown                                                   'tryb uspienia

If X = 1 Then
  Do

  Loop Until X = 0
  Portc.4 = 1


End If

Loop
End

Przerwanie: 
Disable Int0
Waitms 45
If Pind.2 = 0 Then
  Toggle X
End If
Enable Int0
Return

i nie dziala

Link do komentarza
Share on other sites

Przeniosłem to ENABLE INT0 ale nic nie pomogło:

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

Config Portb = &B11111111
           Portb = &B11111111
Config Portc = &B11111111
           Portc = &B11111111
Config Portd = &B11111011
           Portd = &B11111011



Config Pind.2 = Input
Set Portd.2

Config Int0 = Low Level
On Int0 Przerwanie

Dim X As Bit
X = 0

Enable Interrupts


Do

Enable Int0

Powerdown                                                   'tryb uspienia

If X = 1 Then
  Do

  Loop Until X = 0
  Portc.4 = 0


End If

Loop
End

Przerwanie: 
Disable Int0
Waitms 45
If Pind.2 = 0 Then
  Toggle X
End If
Enable Int0
Return

do c.4 jes podłączona dioda ale cały czas się świeci ,TOGGLE w przerwaniu powinien ją zgaśić ale tego nie robi. 🙁

Link do komentarza
Share on other sites

A skąd wiesz, że ta dioda nie miga przypadkiem? Przecież masz Toggle na nie przypisanie 0. U mnie w Bascomie przerwania do odbiornika ir działają z takim kodem i działa to bez problemu. Czy po uśpieniu przez Powerdown działają przerwania? Nie pamiętam, a siedzę teraz w pracy więc nie doczytam jak jest z przerwaniami w takim trybie uśpienia.

Link do komentarza
Share on other sites

Powiedzcie mi jescze czy cos takiego ma szanse dzialac?


.......
do

If S1 = 0 Then
Waitms 45
If S1 = 0 Then
dioda ON
end if 
end if

If dioda ON then
waitms 45
if S1=0 then
dioda OFF
end if
end if

IF S1=1 then
dioda OFF
end if

loop

......
Link do komentarza
Share on other sites

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

Config Pinc.4 = Output
Portc.4 = 0


Config Pind.2 = Input
Set Portd.2

Config Int0 = Low Level
On Int0 Przerwanie

Dim X As Bit
X = 0

Enable Interrupts
Enable Int0

Do

If X = 1 Then

  Portc.4 = 1
  Do

  Loop Until X = 0
  Portc.4 = 0


End If

Loop
End

Przerwanie: 
Disable Int0
Waitms 45
If Pind.2 = 0 Then
  Toggle X
End If
Enable Int0
Return

Testuj

Link do komentarza
Share on other sites

przykro mi ale nie działa. Jesli chodzi o program to sam wymyśliłem i może nie jest poprawny ale za to działa ^^.


$regfile = "m8def.dat" 
$crystal = 1000000
Config Portc = &B1111111
       Portc = &B1111111
Config Portd = &B11111111
     Portd = &B11111111
Config Pinb.1 = Input
S1 Alias Pinb.1
Set Portb.1


Do

If S1 = 0 Then
Wait 1
If S1 = 0 Then
Portc.5 = 1
End If
End If



If Portc.5 = 1 Then
Wait 2
If S1 = 0 Then
Portc.5 = 0
End If
End If

loop

trzeba samemu dobraw wartosci dla wait.

wklejam moze sie komus przyda.

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.