attiny26 i odbiuornik podczerwieni.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

attiny26 i odbiuornik podczerwieni.

Post autor: Jasam » 20 paź 2007, 12:07

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

ZbeeGin

Post autor: ZbeeGin » 20 paź 2007, 12:26

Gdzie to wyczytałeś, że odbiornik podczerwieni musi być podpięty pod PORTA.0?

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 13:05

Nie chodzi, że do A.0 tylko ze TSOP1736 został podpięty w odpowiedni sposób.Kondensator i opornik filtrujący. A gdzie odpowiedź? Dlaczego to nie działa? I jak zrobić żeby działało.

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 20 paź 2007, 13:23

Ja bym usunął te Waitms 500 zamiast niego uruchomił Timera1, ale na razie spróbuj użyć bez Waitms 500. Dodałbym też jakiś warunek, że np.: Command > 0 to ma wykonać wyświetlanie. Jak to nie będzie działało to pomyślimy co dalej...

Pozdrawiam ;)

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 14:52

Bez waitms efekt jest ten sam. Po co i jak uruchamiać Timer! jesli ta funkcja standardowo pracuje z timerem0? Jak uruchamic ten timer?

[ Dodano: 2007-10-20, 15:55 ]
Timer! oczywiscie chodziło o Timer1

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 20 paź 2007, 15:24

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 ;)

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 15:37

bez tego opóźnienia działa tak samo. Nie wiem jak to zrobic z tym pomocniczym timerem 1 tak jak mówisz. Moze byś naskrobał szybciutko mi te pare linijek kodu żebym miał się na czym oprzeć? Bo probuje i nic nie wychodzi...

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 20 paź 2007, 15:53

Właśnie tak dokładniej przeczytałem co napisałeś. Faktycznie problem stanowi ten program...

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
Loop
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ę:

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
Wait 1
Do
Getrc5(Address , Command)
If Command <> 255 Then
     Portb = Command
     Wait 1
     Portb = 170
End If
Loop
End
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 ;)

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 15:55

Taktowanie zegara? co masz na mysli? gdzie to ustawić? chodzi o fuse bity? procesor działa na 4 megahercach.

ZbeeGin

Post autor: ZbeeGin » 20 paź 2007, 16:00

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 ).
Jasam pisze:A gdzie odpowiedź?
Z takim podejściem to daleko nie zajdziesz... :sad:

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 16:01

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?

ZbeeGin

Post autor: ZbeeGin » 20 paź 2007, 16:21

Jasam pisze:czy może byc taktowanie 4 megaherców? czy moze powinna byc jakaś inna częstotliwośc?
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:Dlaczego wszyscy robia na 2313 hahaha. trzeba sie bedzie mi troszke pomęczyć widocznie.
Bo był to jeden z najtańszych i małych mikrokotrolerów AVR.

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

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 16:29

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.

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 20 paź 2007, 17:06

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 ;)
Załączniki
program.zip
(7.06 KiB) Pobrany 266 razy

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 20 paź 2007, 17:12

Mówiłem juz że sprawdzałem. wprowadziłem wszystkie te poprawki. A teraz spróbuje przetaktować na 8 megaherców. Dlaczego ten? Może brak attiny23213 w sklepie (wykupione wszystkie)zwrócił mi uwagę na to, że zbyt często jest on stosowany. Trzeba się też pobawic innymi.

ODPOWIEDZ