Skąd to napięcie?? Proszę o pomoc


Witam!
W plikach poniżej przedstawiam swój problem z którym się już mecze od jakiegoś czasu i nie mogę tego rozgryźć :(
Plik 1a zawiera projekt na którym się wzorowałem, został on przeze mnie wykonany i współpracował z odbiornikiem podczerwieni projektu autora strony.
Plik 2a zawiera przerobioną na swoje potrzeby płytkę tego samego pilota i niestety już nie działa, wymieniłem tranzystor, sprawdziłem wszystkie elementy (procesor jest dobry ponieważ zaprogramowałem go innym wsadem i działał jak powinien), natomiast po włączeniu zasilania na procesorze pojawia się napięcie 1V, skąd ono się tam wzięło?? Dioda nadawcze cały czas się świeci po naciśnięciu jakiegokolwiek przycisku gaśnie :( A powinno być odwrotnie prawda??




'****Program na ATtiny2313****'
'*** Program pod pilot RC5****'
 
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portd = Input : Portd = 0
Config Portb.3 = Output : Portb.3 = 0
 
Dim Togbit As Byte , Command As Byte , Address As Byte
 
Do
 
Debounce Pind.0 , 1 , P1 , Sub
Debounce Pind.1 , 1 , P2 , Sub
Debounce Pind.2 , 1 , P3 , Sub
Debounce Pind.3 , 1 , P4 , Sub
Debounce Pind.4 , 1 , P5 , Sub
 
Loop
 
P1:
 
Command = 1
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.0 = 0
 
Return
 
P2:
 
Command = 2
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.1 = 0
 
Return
 
P3:
 
Command = 3
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.2 = 0
 
Return
 
P4:
 
Command = 4
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.3 = 0
 
Return
 
P5:
 
Command = 5
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.4 = 0
 
Return

Z góry dziękuję za pomoc!
Pozdrawiam!




Portret użytkownika matrix

Re: Proszę o pomoc

Nie analizowałem całości, ale zacząć trzeba od tego że już na początku softu masz błąd. Masz tak:

Config Portd = Input : Portd = 0
Config Portb.3 = Output : Portb.3 = 0

A powinno być tak:
Config Portd = Input : Portd = 255
Config Portb.3 = Output : Portb.3 = 1

a na schemacie przyciski powinny być podpięte do masy, diody odwrócone a zasilanie może być podawane przez tranzystor PNP. Choć według mnie to w ogóle zły pomysł, bo procesor zawsze startuje z opóźnieniem. Powinna być użyta funkcja powerdown lub iddle.

Portret użytkownika rafliczek22

Kolego matrixie przeciez sa

Kolego matrixie przeciez sa tam rezystory sciagajace do masy(te 68R) a port jest ustawiony w stan wysokiej impedencjii (wejście, i 0 wpisane do rejestru PORTD).

Największą rzeczą jaka razi to te debunce wstawione do do...loop (ale debunce same w sobie rażą :D)

Więc mówiąc krótko debunce przed do...loop a do do...loop wstaw na wszelki wypadek nop(poprostu napisz nop).

Portret użytkownika matrix

Re: Proszę o pomoc

rafliczek22 wrote:
Kolego matrixie przeciez sa tam rezystory sciagajace do masy(te 68R) a port jest ustawiony w stan wysokiej impedencjii (wejście, i 0 wpisane do rejestru PORTD).

Tak, tylko czy nie lepiej zrobić to jak Bóg przykazał?

Portret użytkownika Chester

Zaprogramowałem procesor tak

Zaprogramowałem procesor tak i dalej nic :(

'****Program na ATtiny2313****'
'*** Program pod pilot RC5****'
 
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portd = Input : Portd = 0
Config Portb.3 = Output : Portb.3 = 1
 
Dim Togbit As Byte , Command As Byte , Address As Byte
 
Debounce Pind.0 , 1 , P1 , Sub
Debounce Pind.1 , 1 , P2 , Sub
Debounce Pind.3 , 1 , P3 , Sub
Debounce Pind.2 , 1 , P4 , Sub
Debounce Pind.4 , 1 , P5 , Sub
 
Do
 
nop
 
Loop
 
P1:
 
Command = 1
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.0 = 0
 
Return
 
P2:
 
Command = 4
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.1 = 0
 
Return
 
P3:
 
Command = 5
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.3 = 0
 
Return
 
P4:
 
Command = 2
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.2 = 0
 
Return
 
P5:
 
Command = 3
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.4 = 0
 
Return

A co jest najgorsze to że działało z tym programem :(

Portret użytkownika rafliczek22

Quote:Tak, tylko czy nie

Quote:
Tak, tylko czy nie lepiej zrobić to jak Bóg przykazał?

Jeśli płytka jeszcze nie zrobiona to oczywiście.

Quote:
A co jest najgorsze to że działało z tym programem :(

Działało i przestało czy działało ale z innym programem?
Jeśli z innym to go zapodaj.

P.s.

Może zobacz najpierw czy te debonce ci we właściwe miejsca skaczą, i zamist rcsend wstaw może do każdego naprzemiennie(czyli p1 zapala p2 gasi itd.) gaszenie i zapalanie tej diody.

P.s. 2

Te nazwy p1, p2... zamień może na p1a, p2a... na 100% to nie jest problem ale te nazwy to w 51 nazwy portów więc dla świętego spokoju.

Portret użytkownika Chester

To jest oryginalne

To jest oryginalne oprogramowanie jakie wgrałem do procka. Wtedy stworzyłem projekt, który jest widoczny w pierwszym poście jako pierwszy.

'****Program na ATtiny2313****'
'*** Program pod pilot RC5****'
 
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portd = Input : Portd = 0
Config Portb.3 = Output : Portb.3 = 1
 
Dim Togbit As Byte , Command As Byte , Address As Byte
 
Do
 
Debounce Pind.0 , 1 , P1 , Sub
Debounce Pind.1 , 1 , P2 , Sub
Debounce Pind.2 , 1 , P3 , Sub
Debounce Pind.3 , 1 , P4 , Sub
Debounce Pind.4 , 1 , P5 , Sub
 
Loop
 
P1:
 
Command = 1
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.0 = 0
 
Return
 
P2:
 
Command = 2
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.1 = 0
 
Return
 
P3:
 
Command = 3
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.2 = 0
 
Return
 
P4:
 
Command = 4
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.3 = 0
 
Return
 
P5:
 
Command = 5
Togbit = 0
Address = 1
Do
 
Rc5send Togbit , Address , Command
Waitms 300
 
Loop Until Pind.4 = 0
 
Return

Co to znaczy?:

Quote:
Może zobacz najpierw czy te debonce ci we właściwe miejsca skaczą

Portret użytkownika rafliczek22

To czy jak naciśniesz switch2

To czy jak naciśniesz switch2 to wskoczy do p2 i wykona kod spod p2.

Portret użytkownika Chester

W jaki sposób mam to

W jaki sposób mam to sprawdzić??
Jak naciskam P2 to na nóżce do której jest podpięty pojawia się napięcie 2,65V jednocześnie procesor zostaje zasilony 2,03V. Natomiast na nóżce PB.3 pojawia się napięcie 2,03V, na bazie tranzystora napięcie wzrasta z 1,94V na 2,14V, a na kolektorze napięcie spada z 1,41V na 1,04V.
Tak się zachowuję przy zaprogramowaniu go oryginalnym programem.
Jeżeli tylko włączę zasilanie to procesor zasilany jest 0,94V i takie same napięcie panuję na nóżce PB.3

Portret użytkownika rafliczek22

Boże, widzisz a nie

Boże, widzisz a nie grzmisz.

Jakim prawem procesor zasilany z 0.94V może działać, z czego bierzesz to napięcie?
Może do testów podłącz zza 7805 albo z ATX'a.

Co do sprawdzenia programu po prostu pod każdym podprogramem do którego skacze program (p1-p5) napisz na przemian pod p1:

Portb.3=1

pod p2:
Portb.3=0

i znowu pod p3:
Portb.3=1

Itd...itd...

P.s. Dodam tylko że przy zasilaniu z 5v przez te R=68 popłynie 70mA!
Przy odpowiednio niższym napięciu odpowiednio niższy ale to i tak dużo, skoro sam attiny pobiera z 10 razy mniej, może zmień na jakieś większe ale to tylko tak ot i napewno to nie powód.

P.s. 2
Zrób jeszcze jedno:
Zmierz napięcie przy którymkolwiek pinie wejściowym (tym od swicza) przed naciśnięciem i po danego swicza(oczywiście po włączeniu zasilania).

Portret użytkownika Chester

No widzę że nie

No widzę że nie przeanalizowałeś schematu.
Według niego na procesorze nie powinno być tego napięcia, więc stąd taki temat postu. Napięcie powinno być zasilane dopiero po naciśnięciu switcha, po czym wysłać komendę do odbiornika i tyle. To działało i tutaj jest problem dlaczego nie działa?? Może źle jest zaprojektowana płytka??
Wszystko jest zasilane z baterii 2xAA dlatego do tego celu kupiłem procesor Attiny2313V który odpala przy mniejszym zasilaniu :)

Co do P.S.2
To zasilanie przed naciśnięciem switcha na pinie wynosi 0V po naciśnięciu 2,65V

Mnie się wydaję że ten Twój test nie wyjdzie ponieważ procesor nie jest zasilany non stop dlatego powstał taki schemat :)

Zastanawiam się czy nie lepiej będzie jak przerobię płytkę gdzie procesor cały czas jest zasilany ale nie wiem jak zaprogramować procka aby go uśpić :(

Portret użytkownika mirley

Re: procesor

Zasilasz procesor przez diody więc spadek napięcia okolo 0.6V.... czyli 2,03V na vcc to normalne działanie. Zwieksz te rezystory 68R bo prawdopodobnie one ubijają baterię. trzeba tez zastanowić się czy tranzystor napewno jest zatkany gdy procesor nie pracuje, bo prad płynący przez rezystor 10R napewno spali diodę

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

R=10 raczej nie spali bo to

R=10 raczej nie spali bo to zapewne dioda ir więc ma wyższe nap. przewodzenia.
Baze tranzystora ściągnij przez rezystor do Vcc, bo rzeczywiście może się nie zatykać.
Co do usypiania... procek możesz np. po wysłaniu komendy wprowadzać w powerdown i zastosować jakiś jeden dodatkowy guzik podłaczony do zewnętrznego przerwania i nim go budzić.
Czyli naciskasz swicz włączający potem ten od komendy procek wysyła dane i idzie spać.

Portret użytkownika Chester

To jakie rezystory najlepiej

To jakie rezystory najlepiej zastosować??
Tranzystor na emiterze posiada 2,65V to rozumiem ponieważ jest bezpośrednio podłączony do zasilania, ale dlaczego na bazie i kolektorze jest napięcie?? Troszkę nie rozumiem pracy tego tranzystora :(
Z tego co wiem to jeżeli podam napięcie na bazę tranzystora to będzie przewodzenie pomiędzy emiterem a kolektorem ale skąd sie bierze napięcie jak go nie podaje?? Poniewaz procesor nie jest zasilany?? co mnie zastanawia dlaczego po włożeniu baterii procesor posiada napięcie, jak to jest możliwe??

P.S.
Jeszcze zrobiłem taki test że wylutowałem tranzystor i podłączyłem napięcie, wtedy procesor nie był zasilany chyba że nacisnąłem jakiegos switcha.

Co do tego usypiania czy nie można wzbudzić switchem który pózniej wyślemy komendę czy muszę użyć dodatkowego przycisku?

Portret użytkownika rafliczek22

Rezystory tak ok.

Rezystory tak ok. 400-600Ohm.

Tranzystor jest po to, ponieważ dioda ir żre duże prądu i mikrokontroler jej nie wysteruje, a działą tak że jeśli na bazie jest napięcie ok. vcc to jest zatkany, kiedy przyjdzie stan niski to go otwiera ale kiedy procek nie jest zasilany to jego wejścia nie są anie w H ani w L i napięcie na bazie jest takie jakie chce(czyli może być 0v może być vcc a może być coś po środku) dlatego trzeba by było dać jakiś rezystor co go do plusa ściągnie.

Właśnie ten tranzystor może być winien że na procku jest napięcie, dużo lepiej sprawdziłby się tutaj mosfet który ma izolowaną bramkę ale nie wiem czy procek da go radę wysterować(jego pojemnośc) ale tu niech lepiej się mirek wypowie.

Co do usypiania to może dał by radę taki patent aby wszystkie wejścia przez diody podłączyć i zrobić jeden wspólny punkt który podłączyć do inta ale też niech lepiej się mirek wypowie.

Portret użytkownika Chester

tranzystor

To jakim rezystorem podciągnąć bazę tranzystora??

A jakbym zastosował tranzystor NPN 547??

Portret użytkownika kuba

Pomoc

NPN się absolutnie nie nadaje - potrzebujesz dołączyć diodę do zasilania, więc tranzystor musi być PNP.

Niestety masz pewien duży błąd ideowy:
Aby "otworzyć" tranzystor bipolarny potrzeba około 0.6-0.7V (spadek napięcia na diodzie) na złączu baza-emiter. Procesor dołączasz do 2.65V przez diodę, co daje Ci około 2V zasilania. Stąd na pinie wyjściowym masz dwa stany: 0V (niski) i 2V (wysoki). Problem w tym, że stan niski (0V) na pinie procesora wprowadza tranzystor w "idealny" stan przewodzenia (bo 2.65 zasilania minus 0V na pinie = 2.65 na złączu baza-emiter), zaś stan wysoki (2V), który powinien całkowicie odciąć tranzystor nadal wprowadza go w stan przewodzenia bo 2.65-2=0.65V ...

Pomiędzy emiter tranzystora a linię zasilającą daj diodę 1N4007 (w kierunku przewodzenia - katodą do emitera). Podciągnij bazę tranzystora przez 10k do emitera (nie do zasilania!).

Używasz ATTtiny2313 (myślę że 23113 to po prosty literówka)? Według karty katalogowej na zasilaniu 2V może nie zadziałać (minimum 2.7V)...
Powinieneś użyć ATTinny2313V (min. power supply 1.8V).

-

Zepsuje się wszystko, co tylko może.
Zawsze tak, żeby uczynić najwięcej szkód w najmniej spodziewanym momencie.

Portret użytkownika Chester

zmiany

Dziękuję za propozycję zmian jakie mogę wprowadzić, później to przetestuje i dam znać co z tego wyszło :)

Jeżeli chodzi o procesor to chyba coś sobie pomyliłeś jedyny post, w którym wspominałem jakiego procka wykorzystuję to #10. Tam właśnie wspomniałem o ATtiny2313V który właśnie działa na niższym napięciu :)
Ale dzięki za zwrócenie uwagi i w tym przypadku :)

Pozdrawiam!

Wprowadziłem zmiany jakie kolega Kuba proponował, i troszkę się pozmieniało. Po pierwsze dioda po włączeniu zasilania nie świeci ale gdy nacisnę jakiś przycisk to zaczyna mrugać a jak zwolnię przycisk to nie wygasza się do końca i jest na niej napięcie 1V (bardzo słabo świeci, w porównaniu do poprzedniego stanu przed zmianami). Procesor dalej jest zasilany napięciem 1V i dalej nie rozumiem skąd to się wzięło.Oczywiście tranzystor jest PNP. Czasem się zdarza sytuacja tego typu, że gdy nacisnę przycisk np. P1 to dioda mruga, gdy go zwolnię słabiutko świeci po tym nacisnę P2 to dioda się wygasza, muszę ponownie nacisnąć ten sam przycisk aby mrugała, czasem kilkakrotnie :(

Podłączyłem także odbiornik. Poniżej jego schemat oraz oprogramowanie ale niestety nie chce współpracować z pilotem.

Oprogramowanie:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Rc5 = Pind.2
Dioda Alias Portd.6
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
  Getrc5(adres , Komenda)
  Komenda = Komenda And &B01111111
 
  If Adres = 0 Then
    Reset Dioda
 
    Select Case Komenda
      Case 1:
          Toggle Portb.0
      Case 2:
          Toggle Portb.1
      Case 3:
          Toggle Portb.2
      Case 4:
          Portb.0 = 0
          Portb.1 = 0
          Portb.2 = 0
      Case 5:
          Portb.0 = 1
          Portb.1 = 1
          Portb.2 = 1
    End Select
 
    Waitms 100
    Set Dioda
    Waitms 100
  End If
 
Loop
End
'************ Petla glowna Koniec **************

Może coś w oprogramowaniu jest źle?

Z góry dziękuję za pomoc!
Pozdrawiam!

Portret użytkownika gosc

Podpowiem tylko że tu NPN się


Podpowiem tylko że tu NPN się super nadaje ponieważ 0v-0.7v go zamknie a wszystko większe od 0.7 go otworzy więc nie rozumiem co kolega kuba ma na myśli pisząc:

Quote:
NPN się absolutnie nie nadaje - potrzebujesz dołączyć diodę do zasilania, więc tranzystor musi być PNP.

Przecież diodę można załączyć "drugą stroną"

Ten program z jakimkolwiek innym pilotem działa?
Chodzi o to że by potem nie było tak że nadajnik sprawny a odbiornik niedziałający.

Portret użytkownika Chester

NPN

No właśnie się zastanawiałem nad tranzystorem bc547b jak dobrze zrozumiałem filozofię ich działania to nawet lepszy by był niż PNP.
Trudno mi stwierdzić czy działa z innym pilotem ponieważ mam tylko jeden. Na pewno działał w starej wersji (wszystko w pierwszym poście) z zaprojektowanym przez Mirka odbiornikiem RC5. Zauważyłem że jak celuje pilotem w odbiornik to na nóżce gdzie jest podpięty TSOP (dokładnie jego wyjście out) przy każdym naciśnięciu switcha jest spadek napięcia o jakieś 0,25V.

Pozdrawiam!

Portret użytkownika rafliczek22

TYlko miernikowi się tak

TYlko miernikowi się tak zdaje ponieważ jest tam modulowany sygnał 36kHz więc miernik z supermarketu tego nie wymierzy chyba że masz oscyloskop albo super miernik za 800zł.

Portret użytkownika Chester

miernik

miernik mam dużo dużo tańszy :P oscyloskopu też nie mam :(

kurde i jak rozwiązać sprawę tego pilota?? może łatwiej będzie go zaprojektować od nowa?? Ale właśnie chodzi o to abym nie musiał baterii wymieniać co 2 dni :( dlatego tak są zaprojektowane przyciski :)

Portret użytkownika Chester

NPN

Zamieniłem tranzystor PNP na NPN BC547B. Teraz dioda w ogóle nie świeci się, na procesorze także nie ma napięcia, jeżeli nacisnę jakiś przycisk to procesor jest zasilany odpowiednim napięciem, natomiast na bazie tranzystora pojawia się napięcie 1,6V a na emiterze 0,97V i dioda bardzo słabo świeci :(
Sprawdzałem z odbiornikiem nie działa:( może problem tkwi w tym że TSOP przylutowałem na kablach o długości 30cm??

Pozdrawiam!

Portret użytkownika mirley

Re; Odbiornik

Najpierw zajmij się odbiornikiem, żeby dobrze dzialał z fabrycznym pilotem, dopiero potem nadajnik, żebyś miał na czym go testować

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Chester

pilot

Czy program powyżej dotyczący odbiornika aby mógł odbierać sygnały w adresie 1, musze zmienić tą linijkę:

 If Adres = 1 Then

A także druga sprawa, jeżeli chciałbym aby po odebraniu komendy stan pinu ustawiał na niski, coś muszę pozmieniać??

Pozdrawiam!

Portret użytkownika gosc

Ten program widze mieli

Ten program widze mieli ciagle w do loop getrc5, wg. mnie może to powodować błędy więc lepiej daj to jak z góry przykazano do intx i w przerwaniu odbieraj dane za chwile podeślę ci kod.

Portret użytkownika Chester

program

Program został napisany dla mnie przez Mirley'a jakiś czas temu i cały czas na nim bazuję. Jeżeli proponujesz coś innego to jestem bardzo wdzięczny i jakbym mógł prosić o dość obszerne komentarze co się z czego wzięło i jaką ma funkcję :)

Portret użytkownika matrix

Jeszcze jeden sposób na sprawdzanie odbioru RC5

Jest jeszcze jeden sposób na sprawdzanie odbioru RC5. Do pinu gdzie mamy podpięty odbiornik RC5 należy podpiąć się z takim kodem:

If PINX.x = 0 then
 gosub odbior
end if