Skocz do zawartości

[BASCOM] Pilot RC5 Attiny2313 - nie działa


Paweł_1985

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

Link do komentarza
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.

Link do komentarza
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
Link do komentarza
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?

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

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

Link do komentarza
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.

Link do komentarza
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
Link do komentarza
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.

Link do komentarza
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?

Link do komentarza
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.

Link do komentarza
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!

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

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