| Author |
Message
|
smanek Poziom 11

Joined: 19 Jul 2007 Posts: 69 Location: Masłów (k. Kielc)
|
#1
06 Apr 2010 15:40 Prośba o sprawdzenie schematu i kodu... |
|
|
|
Siemka
Mam za zadanie do szkoły zrobić urządzenie (coś w stylu alarmu) które po wyczuciu ruchu będzie po prostu wyło. I ma być ono na pilota RC5, taki od telewizora.
To urządzenie pracuje w ten sposób:
Na pilocie naciskamy STANDBY i włącza się tryb "uzbrojenia". Świeci się dioda że przekaźnik który włącza czujnik ruchu jest zwarty. Kiedy czujnik wyczuje ruch podaje na optotriac napięcie (ominąłem przekaźnik w czujniku, dzięki czemu podaje napięcie około 9V). Optotriac "sygnalizuje" Attiny że czujnik wykrył ruch. Attiny załącza buzzer i dzwoni on dopóki nie naciśniemy znowu STANDBY.
Zrobiłem to tak jak mogłem i jak umiałem najlepiej jednak nie wiem czy wszystko jest ok. To jest na ATTiny2313, Czujnik ruchu to TFMS5360, optotriac to MOC3041, stabilizator 7805.
Załączam Schemat i kod(w bascomie)
Dzięki za pomoc
PS. Z mikrokontrolerami dopiero zaczynam zabawę.
| Code: |
$crystal = 1000000
$regfile "attiny2313.dat"
Config Pinb.7 = Output 'przekaźnik załączający czujnik
Pinb.7 = 1 'przekaźnik załączający czujnik standardowo wyłączony
Config Pinb.1 = Output 'buzzer
Config Pinb.5 = Input 'czujnik
Config Rc5 = Pinb.6 'czujnik IR(RC5)
Dim Address As Byte , Command As Byte
Enable Interrupts
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 12 Then
Toggle Pinb.7
End If
Loop Until Pinb.5 = 0
If Pinb.5 = 0
Then
Do
Pinb.1 = 0
Loop Until Pinb.7 = 1
End If
End |
|
|
| Back to top |
|
 |
Google

|
#
06 Apr 2010 15:40 |
|
|
|
|
|
| Back to top |
|
 |
tmf Poziom 24

Joined: 12 Aug 2009 Posts: 4766 Location: Katowice
|
#2
06 Apr 2010 17:19 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Wywal optotriaka, który się nie nadaje i zamień go na optotranzystor czy coś w tym stylu, przy stabilizatorze obowiązkowo 2 kondensatory ceramiczne 100nF. Co do programu się nie wypowiadam.
|
|
| Back to top |
|
 |
Krauser Poziom 16

Joined: 01 Apr 2009 Posts: 299 Location: Leżajsk
|
#3
06 Apr 2010 18:02 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Co do schematu:
- nie widzę węzłów, czy nie używasz przypadkiem polecenia Wire. Do prowadzenia połączeń należy używać Net i węzły zostaną dodane automatycznie.
Co do programu:
- po linii Config Pinb.5 = Input powinieneś dodać Portb.5=1 aby włączyć wewnętrzny rezystor podciągający
- Enable Interrupts jest nie wiadomo po co (może na razie)
- program wykona się tylko raz
- po wyjściu z Loop Until Pinb.5 = 0 Pinb.5 będzie mieć 1 czyli to co w If Pinb.5 = 0... nie wykona się.
- jeśli jesteś początkujący to sprawdź wszystko po kolei i upewnij się że dobrze rozumujesz. Napisz prostsze programy obsługujące np. tylko wyjście potem wejście i wyjście itd.
|
|
| Back to top |
|
 |
Google

|
#
06 Apr 2010 18:02 |
|
|
|
|
|
| Back to top |
|
 |
smanek Poziom 11

Joined: 19 Jul 2007 Posts: 69 Location: Masłów (k. Kielc)
|
#4
06 Apr 2010 19:10 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
To o coś takiego chodzi w kodzie?
| Code: |
$crystal = 1000000
$regfile "attiny2313.dat"
Config Pinb.7 = Output
Pinb.7 = 1
Config Rc5 = Pinb.6
Dim Address As Byte , Command As Byte
Do
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 12 Then
Toggle Pinb.7
End If
Loop Until Pinb.5 = 1
If Pinb.5 = 0
Then
Do
Pinb.1 = 0
Loop Until Pinb.7 = 1
Loop
End
|
Czy coś takiego?
| Code: |
Loop Until Pinb.5 = 0
If Pinb.5 = 1 |
Jeśli chodzi o schemat:
-Tak używałem wire. Teraz już będę używał NET :D
-Te kondy to z jednej i drugiej strony stabilizatora?
|
|
| Back to top |
|
 |
Google

|
#
06 Apr 2010 19:10 |
|
|
|
|
|
| Back to top |
|
 |
oskar777 Poziom 18

Joined: 23 Sep 2003 Posts: 485 Location: Warszawa
|
#5
07 Apr 2010 00:36 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Z jednej i drugiej strony, dodaj też 100nF blisko nóżek GND i VCC scalaka dla spokoju, C1 jest zbedny skoro masz C3.
|
|
| Back to top |
|
 |
Krauser Poziom 16

Joined: 01 Apr 2009 Posts: 299 Location: Leżajsk
|
#6
08 Apr 2010 07:57 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
1. Do ustawiania wyjść używa się PORTx.y
2. Nie podciągnąłeś wejścia sterowanego przez transoptor
3. Nie potrzebujesz wcale korzystać z pętli do loop until:
- w pierwszym przypadku to tylko skraca pętlę
- a w drugim powoduje, że program zostanie w niej na zawsze. Lepiej dodać drugi warunek If do sprawdzenia Pinb.7
|
|
| Back to top |
|
 |
smanek Poziom 11

Joined: 19 Jul 2007 Posts: 69 Location: Masłów (k. Kielc)
|
#7
09 Apr 2010 23:38 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Takie coś ?
| Code: |
$crystal = 1000000
$regfile "attiny2313.dat"
Config Pinb.5 = Input
Portb.5 = 1
Config Portb.7 = Output
Portb.7 = 1
Config Portb.1 = Output
Config Rc5 = Pinb.6
Dim Address As Byte , Command As Byte
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 12 Then
Toggle Portb.7
End If
Loop
If Portb.5 = 0 Then
Portb.1 = 0
End If
If Portb.7 = 1 Then
Portb.1 = 1
End If
End |
Z tym podciąganiem to ma tak wyglądać(jak wyżej) ? Czy tak:
| Code: |
Config Portb.5 = Input
Portb.5 = 1 |
|
|
| Back to top |
|
 |
Krauser Poziom 16

Joined: 01 Apr 2009 Posts: 299 Location: Leżajsk
|
#8
11 Apr 2010 10:12 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Dla pojedynczego wyprowadzenia Config PINx.y = Input/Output, a dla całego portu Config PORTx = Input/Output lub liczbowo binarnie dziesiętne i heksadecymalnie. Polecam częściej zaglądać do pliku pomocy tym bardziej, że jest też polska wersja.
I jeszcze ważna uwaga do programu: Loop umieść zaraz przed End. Pamiętaj to co między Do Loop wykonuje się w nieskończoność natomiast to co poza pętlą/pętlami tylko raz. Jeśli program dojdzie do Loop to wraca do Do, a jeśli jakimś sposobem dojdzie do End to tam zostanie i nic więcej się dziać nie będzie.
|
|
| Back to top |
|
 |
smanek Poziom 11

Joined: 19 Jul 2007 Posts: 69 Location: Masłów (k. Kielc)
|
#9
11 Apr 2010 13:43 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
Czyli o to chodzi?
| Code: |
$crystal = 1000000
$regfile "attiny2313.dat"
Config Pinb.5 = Input
Portb.5 = 1
Config Pinb.7 = Output
Portb.7 = 1
Config Pinb.1 = Output
Config Rc5 = Pinb.6
Dim Address As Byte , Command As Byte
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 12 Then
Toggle Pinb.7
End If
If Pinb.5 = 0 Then
Pinb.1 = 0
End If
If Pinb.7 = 1 Then
Pinb.1 = 1
End If
Loop
End
|
Jeśli dobrze rozumiem, to wejście/wyjście ustawia się przez PINx.y , a rezystory podciągające przez PORTx.y. Czy tak?
PS. Czy się różni podciąganie przez PORTx.y , a Set PORTX.y ?
|
|
| Back to top |
|
 |
Google

|
#
11 Apr 2010 13:43 |
|
|
|
|
|
| Back to top |
|
 |
Krauser Poziom 16

Joined: 01 Apr 2009 Posts: 299 Location: Leżajsk
|
#10
12 Apr 2010 18:34 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
1. Prawie, ale zmieniłeś na źle, bo ma być
| Code: |
If Address = 0 And Command = 12 Then
Toggle Portb.7
End If
If Pinb.5 = 0 Then
Portb.1 = 0
End If
If Pinb.7 = 1 Then
Portb.1 = 1
End If |
2. Config PINx.y = Input/Output ustawia kierunek portu
natomiast PORTx.y = 1 działa różnie w zależności od tego czy dane wyprowadzenie jest wejściem czy wyjściem. Dla wejścia (input) ustawienie "1" oznacza włączenie wewnetrznego rezystora podciągającego, a dla wyjścia (output) wpisanie 0 to na tej nóżce pojawi się 0V a dla 1 będzie 5V(napięcie zasilania)
Natomiast sprawdzając PINx.y jak to robisz w warunku If to odczytujesz stan na wyprowadzeniu.
3. PORTx.y = 1 lub SET PORTx.y robi dokładnie to samo.
|
|
| Back to top |
|
 |
smanek Poziom 11

Joined: 19 Jul 2007 Posts: 69 Location: Masłów (k. Kielc)
|
#11
12 Apr 2010 19:57 Re: Prośba o sprawdzenie schematu i kodu... |
|
|
|
OK. Wielkie dzięki za pomoc :D . Dla pewności umieszczam jeszcze całość.
| Code: |
$crystal = 1000000
$regfile "attiny2313.dat"
Config Pinb.5 = Input
Portb.5 = 1
Config Pinb.7 = Output
Portb.7 = 1
Config Pinb.1 = Output
Config Rc5 = Pinb.6
Dim Address As Byte , Command As Byte
Do
Getrc5(address , Command)
Command = Command And &B01111111
If Address = 0 And Command = 12 Then
Toggle Portb.7
End If
If Pinb.5 = 0 Then
Portb.1 = 0
End If
If Pinb.7 = 1 Then
Portb.1 = 1
End If
Loop
End |
Pozdrawiam Michał
|
|
| Back to top |
|
 |