attiny26 i odbiuornik podczerwieni.
attiny26 i odbiuornik podczerwieni.
Pytanie-zagadka. Chciałem podłączyć do portu B procesora attiny26 linijkę diod Led i wyświetlac na nich (oczywiście w sposób binarny) Wartośc komendy command z funkcji getrc. Odbiornik podczrerwieni jest na pewno sprawny i podłączony zghodnie ze specyfikacją do pinu portA.0. Jednak po właczeniu zasilania na chwilke uruchamia się co drga dioda (tak powinno być- portb=170 do czasu pierwszego odbioru sygnału) ale potem juz nie działa tak jak chciałbym. po około pół sekundy zaświecaja się wszystkie diody układ nie reaguje na transmisje z pilota.
poniżej cały kod. Pomóżcie koledzy..co jest źle?
Config Portb = Output
Config Pina.0 = Input
Config Rc5 = Pina.0
Enable Interrupts
Dim Address As Byte , Command As Byte
Portb = 170
Do
Getrc5(address , Command)
Portb = Command
Waitms 500
Loop
poniżej cały kod. Pomóżcie koledzy..co jest źle?
Config Portb = Output
Config Pina.0 = Input
Config Rc5 = Pina.0
Enable Interrupts
Dim Address As Byte , Command As Byte
Portb = 170
Do
Getrc5(address , Command)
Portb = Command
Waitms 500
Loop
- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt:
- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt:
Pracuje z Timerem0
Nie jestem tego pewny, aczkolwiek nie mówię, że tak nie jest. Tylko, że i tak ta funkcja wstrzymuje program na te 500ms. Natomiast Timer1 będzie wstrzymywał główną pętlę programu i wykona procedurę wywołaną przerwaniem, a później wróci do programu, będzie o wiele szybciej.
Pytasz się co daje usunięcie tego Waitms 500 z programu. Daje to, że cały czas będzie sprawdzany pilot, czy przypadkiem nie ma jakiegoś znaku do odebrania. Natomiast jak dasz Waitms 500 to sprawdzanie czy nie ma jakiegoś znaku wykonywane jest co 500ms. Wydaje mi się, że to jest Twój problem i że dlatego nie działa Ci to poprawnie.
Pozdrawiam
Pytasz się co daje usunięcie tego Waitms 500 z programu. Daje to, że cały czas będzie sprawdzany pilot, czy przypadkiem nie ma jakiegoś znaku do odebrania. Natomiast jak dasz Waitms 500 to sprawdzanie czy nie ma jakiegoś znaku wykonywane jest co 500ms. Wydaje mi się, że to jest Twój problem i że dlatego nie działa Ci to poprawnie.
Pozdrawiam
- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt:
Właśnie tak dokładniej przeczytałem co napisałeś. Faktycznie problem stanowi ten program...
Diody wszystkie świecą się, bo gdy nic nie jest odbierane z podczerwieni to są same 1. Potem nic nie reaguje ze względu na te Waitms 500. Ja proponuję:
Ten program na początku powinien zaświecić wartość 170, później powinno po naciśnięciu przycisku na pilocie zaświecić się wartość jaka została odebrana na 1s, a następnie znowu wróci do stanu początkowego. Zobacz czy ten program działa, jak nie to zobacz czy dobrze ustawiłeś taktowanie zegara. Jeżeli program działa, to możemy go przerobić na taki jaki jest Ci potrzebny...
Pozdrawiam
Kod: Zaznacz cały
Config Portb = Output
Config Pina.0 = Input
Config Rc5 = Pina.0
Enable Interrupts
Dim Address As Byte , Command As Byte
Portb = 170
Do
Getrc5(address , Command)
Portb = Command
Waitms 500
LoopKod: Zaznacz cały
Config Portb = Output
Config Pina.0 = Input
Config Rc5 = Pina.0
Enable Interrupts
Dim Address As Byte , Command As Byte
Portb = 170
Wait 1
Do
Getrc5(Address , Command)
If Command <> 255 Then
Portb = Command
Wait 1
Portb = 170
End If
Loop
End
Pozdrawiam
-
ZbeeGin
A dlaczego kolega nie określił wprost jakiego taktowania będzie używał? Przydałaby się dyrektywa $CRYSTAL. Tak samo prosze zastosować dyrektywę $REGFILE z odpowiednią definicją procesora.
Tylko pamiętaj, że pracując z wewnętrznym generatorem RC domyślnym taktowaniem jest 1MHz ( $crystal = 1000000 ).

Tylko pamiętaj, że pracując z wewnętrznym generatorem RC domyślnym taktowaniem jest 1MHz ( $crystal = 1000000 ).
Z takim podejściem to daleko nie zajdziesz...Jasam pisze:A gdzie odpowiedź?
ten program działa podobnie jak tamten. Zaświeca 170 i nic wiecej. Jakby nie odbierało sygnału. Ale sygnał jest dostarczany do pinu procesora. Sprawdziłem to. O co chodzi z tym taktowaniem? trzeba ustawiać w kompilatorze pod jaką częstoitliwośc ma byc kompilowany program?
[ Dodano: 2007-10-20, 17:03 ]
Więc ustawić $crystal = 4000000 tak?
[ Dodano: 2007-10-20, 17:07 ]
Żadnych zmian po tych poprawkach.
[ Dodano: 2007-10-20, 17:08 ]
Robił ktoś coś takiego w ogóle na procesorach attiny26? Dlaczego wszyscy robia na 2313 hahaha. trzeba sie bedzie mi troszke pomęczyć widocznie.
[ Dodano: 2007-10-20, 17:09 ]
czy może byc taktowanie 4 megaherców? czy moze powinna byc jakaś inna częstotliwośc?
[ Dodano: 2007-10-20, 17:03 ]
Więc ustawić $crystal = 4000000 tak?
[ Dodano: 2007-10-20, 17:07 ]
Żadnych zmian po tych poprawkach.
[ Dodano: 2007-10-20, 17:08 ]
Robił ktoś coś takiego w ogóle na procesorach attiny26? Dlaczego wszyscy robia na 2313 hahaha. trzeba sie bedzie mi troszke pomęczyć widocznie.
[ Dodano: 2007-10-20, 17:09 ]
czy może byc taktowanie 4 megaherców? czy moze powinna byc jakaś inna częstotliwośc?
-
ZbeeGin
Programujesz z BASCOM-a przez ISP? Wejdź w zakładkę Fuses and Lockbits naciśnij Refresh i sprawdź jak to taktowanie jest rzeczywiście ustawione...Jasam pisze:czy może byc taktowanie 4 megaherców? czy moze powinna byc jakaś inna częstotliwośc?
Bo był to jeden z najtańszych i małych mikrokotrolerów AVR.Jasam pisze:Dlaczego wszyscy robia na 2313 hahaha. trzeba sie bedzie mi troszke pomęczyć widocznie.
Może spróbuj jeszcze odwrócić sytuację. Diody podłącz do PORTA a odbiornik podczerwieni do PINB.6 Uprzedzając ewentulane pytanie dlaczego akurat do tej końcówki - dlatego, że jest to wejście INT0 (tak samo jak PINB.2 w "2313").
Tak jak mówiłem przecież. 4 megaherce.
[ Dodano: 2007-10-20, 17:30 ]
Próbowałem już do innych końcówek podłączać odbiornik. Efekt jest zawsze taki sam. Pozatym końcówki w innych zastosowaniach nie powodują żadnych problemów.
[ Dodano: 2007-10-20, 17:36 ]
Nawet zmieniałem już podzespoły które mogły mieć znaczenie. Procesor i odbiornik.Żadnej zmiany.
[ Dodano: 2007-10-20, 17:30 ]
Próbowałem już do innych końcówek podłączać odbiornik. Efekt jest zawsze taki sam. Pozatym końcówki w innych zastosowaniach nie powodują żadnych problemów.
[ Dodano: 2007-10-20, 17:36 ]
Nawet zmieniałem już podzespoły które mogły mieć znaczenie. Procesor i odbiornik.Żadnej zmiany.
- Tranzystor
- Użytkownik
- Posty: 889
- Rejestracja: 28 sie 2005, 19:19
- Lokalizacja: Świętochłowice
- Kontakt:
Nastaw może ten oscylator RC na 8MHz, tak zawsze miałem ustawione i wszystko działało. Poza tym napisz faktycznie tak jak powiedział ZbeeGin na samym początku programu $regfile="attiny26.dat" i $crystal=8000000. Jak możesz to pokaż jak masz ustawione Fuse Bity... Nigdy nie robiłem niczego na ATtiny26, nie wiem po co Tobie ten procesor, a nie ATtiny2313. On ma tylko przetwornik AD, z którego nie korzystasz... Kolega mówił również coś o przerwaniu INT0 lub INT1 też bym przełączył na to, jednak nie jest to wymagane... Wgraj mój program, który jest w załączniku...
Pozdrawiam
Pozdrawiam
- Załączniki
-
- program.zip
- (7.06 KiB) Pobrany 266 razy