Skocz do zawartości

[BASCOM] Pilot RC5 Attiny2313 - nie działa


Pomocna odpowiedź

Napisano

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

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.

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

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?

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

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.

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

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.

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?

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.

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