Skocz do zawartości
Zaloguj się, aby obserwować  
Paweł_1985

[BASCOM] Pilot RC5 Attiny2313 - nie działa

Pomocna odpowiedź

Witam

W oparciu o Attiny2313 zbudowałem pilot RC5 do robota. Robot posiada odbiornik RC5 działający - sprawdzałem pilotem TV, wszystko w porządku. Nadajnik natomiast nie działa, sprawdzałem już wszystkie informacje jakie znalazłem na forach internetowych, ustawiłem fuse bity poprawnie. Schemat nadajnika wziąłem z helpa z Bascoma. Poniżej zamieszczam program wraz ze schematem nadajnika, obecnie (do testów) używam tylko jednego tranzystora i tylko jednej diody nadawczej.

$regfile = "ATtiny2313.dat"                                 'TYP PROCESORA
$crystal = 8000000


Dim Address As Byte                                         'Deklaracje zmiennych
Dim Command As Byte
Dim Togbit As Byte

Config Pinb.3 = Output

Togbit = 0
Address = 0
Command = 0
Wait 5

Do

Rc5send Togbit , Address , Command
Wait 2
Command = 1
Rc5send Togbit , Address , Command
Wait 2
Command = 3
Rc5send Togbit , Address , Command
Wait 2
Command = 4
Rc5send Togbit , Address , Command
Wait 2
Command = 5
Rc5send Togbit , Address , Command
Wait 2
Command = 6
Rc5send Togbit , Address , Command
Wait 2

Loop

End

Udostępnij ten post


Link to post
Share on other sites

Szkoda że na schemacie nie ma wartości elementów. Mogłoby to co nieco rozjaśnić.

Ja co prawda kiedyś zbudowałem pilota RC5 na ATTiny25, i programem napisanym w BASCOM AVR, ale ja napisałem własne procedury kodujące, i był to zaawansowany projekt, który posiadał w pamięci EEPROM uC, coś na wzór pliku Config.sys, który konfigurował wszystkie parametry pilota, bez potrzeby przeprogramowywania pamięci FLASH, jak częstotliwość nośną, zbiór komend i adres wywołania.

Udostępnij ten post


Link to post
Share on other sites

Dodam, że w przypadku takiego programiku jak poniżej dioda nadawcza wysyła sygnał - zaobserwowałem to przez aparat w telefonie. Odbiornik jednak nie odbiera sygnału. W helpie z Bascoma nie ma linijki: Config Pinb.3 = Output, jednak bez tego układ wogóle nie działa.

$regfile = "ATtiny2313.dat"                                 'TYP PROCESORA
$crystal = 8000000


Dim Address As Byte                                         'Deklaracje zmiennych
Dim Command As Byte
Dim Togbit As Byte

Config Pinb.3 = Output

Togbit = 0
Address = 0
Command = 1
Wait 5

Do

Rc5send Togbit , Address , Command


Loop

End

Udostępnij ten post


Link to post
Share on other sites

Hm, to jeśli już dochodzi do mrugania diodą IR, to zostaje mi niewiele pomysłów:

- Jednak fusebity. Może podaj ich ustawienie, szczególnie tych odpowiedzialnych za zegar procesora.

- Faza. Twój driver zapala diodę LED gdy na porcie jest stan niski. To być może niedobrze. Jeśli BASCOMowa funkcja Rc5send zakłada zapalnie diody jedynką, to nie dogadasz się z odbiornikiem. Wiem, schemat jest z helpa ale wypada się upewnić.

- Zegar. Jeżeli pracujesz z wewnętrznego oscylatora RC (na schemacie jest kwarc ale nie wiem czego używasz), odchyłka może być zbyt duża nawet jak na tolerancje protokołu RC5. Producent procesora pisze, że gwarantuje ±10% przy 3V zasilania. To i tak już dużo a jeśli Ty dodatkowo masz Vcc=5V (tego nie napisałeś) to błąd może być jeszcze większy (lub także mniejszy). Pomoże pogrzebanie w okolicach rejestru OSCCAL.

No i podaj wreszcie wartości elementów - czy to jakaś tajemnica?

Udostępnij ten post


Link to post
Share on other sites

Z tego co pamiętam, to bascomowe rc5send nie zajmuje się generowaniem 36kHz+kodowanie, ale samym kodowaniem - nośną należy dorobić sobie we własnym zakresie (bramka AND, lub anoda diody do pinu rc5 a katoda do pinu 36kHz).

Udostępnij ten post


Link to post
Share on other sites

W dokumentacji piszą, że Rc5send używa OC1A i wprost generuje sygnał do diody IR. Aplikacja Pawła jest wzorcowa, tak jak w helpie.

Oczywiście napisałem bzdurę z tą fazą. Odwrotny driver spowodowałby tylko tyle, że dioda IR świeciłaby w stanie spoczynku ale fala 36kHz generowana byłaby prawidłowo i odbiornik powinien to łykać.

Zostają.. fusebity i/lub odchyłka zegara.

Udostępnij ten post


Link to post
Share on other sites

A może byś sprubował tak :

$regfile = "2313def.dat"

$crystal = 4000000

'Konfiguracja portów

Config Pind.2 = Output

Config Pind.3 = Output

Config Pinb.3 = Output

Dim Togbit As Byte , Command As Byte , Address As Byte

Command = 0

Togbit = 0

Address = 20

Do

'aktywacja nadajników z przodu

Portd.2 = 1

Command = 27

Rc5send Togbit , Address , Command

Portd.2 = 0

Portd.3 = 1

Command = 25

Rc5send Togbit , Address , Command

Portd.3 = 0

Loop

Jest to działajacy fragmet kodu z mojego robocika 🙂

https://www.forbot.pl/forum/topics7/wielozadaniowy-columbus-robot-odkrywca-vt2646.htm

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Wrzuciłem do proca programik Michała i działa. Dziwna sprawa, zauważyłem że jak wstawiam opóźnienie po kolejnych wywołaniach komendy RC5SEND to program przestaje działać. Będę musiał zrealizować sterowanie w inny sposób.

Udostępnij ten post


Link to post
Share on other sites

No zaraz, ale program Michała zakłada, że pracuje na zegarze 4MHz. To jak to jest u Ciebie?

Udostępnij ten post


Link to post
Share on other sites

Zegar oczywiście zmieniłem na 8MHz, taki oscylatora mam podpięty do proca.

Udostępnij ten post


Link to post
Share on other sites

To dlaczego zadziałało? Co jest inaczej? Napisz proszę, bo inaczej taki temat nie ma sensu i nikomu w przyszłości nie pomoże. Nie jest rozwiązaniem problemu wklejenie "innego" kodu, który działa i robi praktycznie to samo ale nikt nie rozumie dlaczego. Kod z helpa ma wstawione opóźnienie (przerwa między znakami? -trochę za długa jak na RC5), żaden z Waszych programików tego nie ma, więc to raczej nie to. Twój wołał tę samą funkcję w kółko, kod Michała robi to dwa razy z różnymi parametrami. Dlaczego jeden nie działa a drugi owszem tak?

Udostępnij ten post


Link to post
Share on other sites

Może trzeba zapytac co to jest ten "RC5" ? Google nie gryzie np:

Udostępnij ten post


Link to post
Share on other sites

A to jest odpowiedź, przepraszam, na jakieś pytanie? Które?

Udostępnij ten post


Link to post
Share on other sites

Kod z helpa z Basoma nie ma opóźnienia, tak samo jak działający kod Michała. Natomiast kiedy umieściłem w kodzie Michała opóźnienie "wait" to program przestawał nadawać. Nie mam pojęcia z czym to może być związane. Próbowałem także wywoływać polecenie RC5Send w przerwaniu od Timera0 (z tego co wiem RC5Send wykorzystuje Timer1). Chciałem wykorzystać Attiny2313 tylko jako pilot RC5 komunikujący się z Atmegą16 (zawierającą główny program sterujący robotem) przez RS232 i nie wiem czy w tym przypadku będzie możliwość wykonania w ten sposób nadajnika.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...