Poprawność schematu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Poprawność schematu

Post autor: andrzej1_1 » 26 sty 2013, 15:45

Witam. Buduje sobie urządzenie na mikrokontrolerze Attiny13, lecz że nie zajmuje się elektroniką nie wiem czy zrobiłem dobrze schemat. Oto zdjęcie:
Obrazek
D1 to podczerwona dioda LED
T1 to fototranzystor do poczerwieni
G1 to 3 baterie 1,5 V
C1 kondensator stabilizujący napiecie 100nF

Czy ten schemat jest poprawny? Obstawiam iż nie.. więc gdzie jest błąd?

kosa
-
Posty: 73
Rejestracja: 05 cze 2008, 16:27
Lokalizacja: Ełk

Post autor: kosa » 26 sty 2013, 15:57

Kondensator należy podłączyć równolegle, czyli między plus zasilania a masę.
Przy połączeniu szeregowym, jak na schemacie, procesor nie będzie zasilany, ponieważ kondensator stanowi przerwę w obwodzie napięcia stałego stałego.
Diody LED1, LED2, D1 podłącz bezpośrednio do masy lub odwróć ich biegunowość i nie podłączaj do masy.
Między D1 a T1 ma nie być połączenia, zobacz, jak już poprawnie podłączysz kondensator, że po włączeniu zasilania, bateria będzie w stanie zawarcia.
T1, jego kolektor podłącz bezpośrednio pod plus zasilania, po co obciążać procesor, a poza tym T1 i tak jest sterowany przez D1.
Napisz co układ ma wykonywać, jaki algorytm, bo w zależności od tego połączenia mogą być różne.

Pozdrawiam

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 26 sty 2013, 16:24

Pseudo kod na szybko:

Kod: Zaznacz cały

void pobierz() 
{
	Włącz diode podczerwoną
	Czekaj 100 ms
	Zwróć dane z fotorezystora IR 
	Czekaj 100 ms
	Wyłącz diodę podczerwoną
}

int main()
{ 
  Włącz diode LED1
  Czekaj 3000 msy
  Wyłącz diode LED1
  Czekaj 3600000 ms

  while()
  {
    double X1 = pobierz();
    double X2 = X1;
    while(X2 - X1  > 0.5 || X1 - X2 > 0.5) //sprawdzanie czy pomiar nie różni się o ileś od zapamiętanego na początku
    {
       Czekaj 60000 ms
       X2 = pobierz();
     }

     for(int a=0;a<5;a++)
     {
	 Zapal diodę LED2
	 delay_ms(1000);
	 Zgaś diodę LED2
      }
    }
     czekaj 1800000 ms
  }
}
A tak ogólnie mówiąc to ma sprawdzać różnice w pomiarach natężenia odbitego światła podczerwonego i w przypadku dużej zmiany wartości pomiaru mrugać diodą

Poprawiony schemat:
Obrazek

Awatar użytkownika
lutownik
Użytkownik
Posty: 517
Rejestracja: 01 paź 2006, 12:37
Lokalizacja: z planety Zi Emia
Kontakt:

Post autor: lutownik » 26 sty 2013, 17:04

I dalej jest błąd z C1.

kosa
-
Posty: 73
Rejestracja: 05 cze 2008, 16:27
Lokalizacja: Ełk

Post autor: kosa » 26 sty 2013, 17:05

Dobrze.

Pamiętaj, że załączenie diód procesorem przez podanie masy, inaczej stanu niskiego.


Zamień kolektor z emiterem lub podłącz kolektor do plusa zasilania.
Nadal nie masz zasilania. Podłącz kondensator C1 między plus a masę.

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 26 sty 2013, 18:55

Poprawione:
Obrazek

Czy już jest ok?

Co do zaprogramowania mam pytanie. Najpierw ustawiam wyjścia czyli w tym wypadku:

Kod: Zaznacz cały

DDRB = 0x07; //binarnie 000 111
To teraz żeby włączyć przykładowo LED1 musi być

Kod: Zaznacz cały

PORTB = 0x01;//binarnie 001
? Czy może trzeba liczyć binarnie też z wejściami?
Chodzi o to czy jeśli używam PORTB to dla pierwszych czterech bitów (wejścia) też mam ustawiać jakąś wartość

P.s Czy w schemacie nie potrzeba podpiąć reseta?

Awatar użytkownika
Artyliusz
Użytkownik
Posty: 305
Rejestracja: 06 sty 2013, 14:10
Lokalizacja: Z Polski
Kontakt:

Post autor: Artyliusz » 27 sty 2013, 10:47

Kondensator powinien znajdować się odwrotnie, to znaczy tak gdzie jest teraz kondensator wstaw baterię, a na miejsce baterii kondensator równolegle. Kondensator służy do filtracji i powinien znajdować się jak najbliżej wejścia zasilania mikrokontrolera. W tym wypadku nie ma filtracji i względnej stabilizacji.

Poza tym do każdej diody trzeba dawać bezwzględnie rezystor, który ograniczałby prąd czego jest brak u Ciebie. Diody mogą się spalić, a przynajmniej mieć krótką żywotność.

W tym wypadku zapalasz diodę wymuszając stan logicznego zera na nóżce mikrokontrolera, a więc jeśli chcesz zapalić diodę musisz wpisać "zero" na dany pin PORTB.

U Ciebie będą się świecić wszystkie diody, gdzie DDRB ustawiłeś na wyjście i w PORTB ustawiłeś "0". A więc zaświecą się wszystkie oprócz tej na PB7. Całkowicie inaczej niż Ty masz.

Aby włączyć LED1, która jest pod PB0 musisz ustawić tę nóżką jako wyjście DDRB=0x80 a następnie podać logiczne zero, aby zaświeciła ustawiając w rejestrze PORTB=0x7F.
Zawsze trzeba liczyć binarnie i liczysz od PB0...3 do PB4...7 -> pierwsza i druga liczba w zapisie konfiguracji portu. Polecam Tobie kurs XYZ http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=2

Co prawda jeszcze na ATTiny nie operowałem, ale myślę że z grubsza wszystko tak samo jest jak na ATMega8. Zapewne ktoś mnie poprawi jeśli się pomyliłem.

Reset poleca się podpiąć przez rezystor 10k do Vcc co wymusza stan wysoki na tym pinie i uodparnia mikrokontroler na reset na skutek zakłóceń.
Polecam http://mikrokontrolery.blogspot.com/201 ... pinow.html i ogólnie całą zawartość na tym blogu.

I jeszcze jedno a propos schematu - tam gdzie mają być połączenia należy zaznaczyć to poprzez kropkę, bo u Ciebie niby nigdzie nie mają być.

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 27 sty 2013, 12:20

Obrazek
Teraz już dobrze?

@Artyliusz, na pewno dobrze to policzyłeś? Bo w attiny13 jest tylko od PB0 do PB5 czyli tylko 6 bitów a nie 8.

Wiec jak chce sterować diodami to ustawiam je na wyjścia czyli DDRB = 111000 i jak chce na przykład włączyć drugą która jest podpięta pod PB1 to daje PORTB = 101111 Czy dobrze myśle?

Awatar użytkownika
tom5555
Użytkownik
Posty: 625
Rejestracja: 23 sty 2008, 1:20
Lokalizacja: Zabrze
Kontakt:

Post autor: tom5555 » 27 sty 2013, 12:46

Artyliusz pisze:Kondensator powinien znajdować się odwrotnie, to znaczy tak gdzie jest teraz kondensator wstaw baterię, a na miejsce baterii kondensator równolegle. Kondensator służy do filtracji i powinien znajdować się jak najbliżej wejścia zasilania mikrokontrolera. W tym wypadku nie ma filtracji i względnej stabilizacji.
W fizycznym układzie kondensator powinien znajdować się jak najbliżej procesora, na schemacie nie ma to znaczenia. Po tej nie trafionej podpowiedzi Artyliusza procesor zasilany jest cały czas, za to mamy możliwość odłączenia kondensatora blokującego zasilanie - zupełny bezsens.

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 27 sty 2013, 13:13

Dobra poprawiłem to, przełożyłem switcha. Ale co z tym rozumowaniem co napisałem?

Awatar użytkownika
Artyliusz
Użytkownik
Posty: 305
Rejestracja: 06 sty 2013, 14:10
Lokalizacja: Z Polski
Kontakt:

Post autor: Artyliusz » 27 sty 2013, 14:23

Masz rację, tom5555, na schemacie nie ma to zbyt dużego znaczenia, ale to w pewnym sensie też ilustruje jak to będzie wyglądać i tak też bardziej obrazowo chciałem to wytłumaczyć - cóż, nie wyszło i kolega zrozumiał to zamienienia miejsca zbyt dosłownie. :oops:

Co do Twojego rozumowania,andrzej1_1, to podałem przykład jakby to wyglądało na ATmega8, a ATTiny różni się tylko okrojeniem. I myślę, że wtedy mamy PB0...PB2 i PB3...PB5.
Z binarnego przedstawienia dobrze myślisz. Podając "0" na pin dioda zaświeci.

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 27 sty 2013, 18:05

Mam ostatnie pytanie: jak pobrać wartość z fototranzystora?

kosa
-
Posty: 73
Rejestracja: 05 cze 2008, 16:27
Lokalizacja: Ełk

Post autor: kosa » 27 sty 2013, 18:35

Mikrokontroler jest elementem cyfrowym.
Jeśli chcesz by uC przetwarzał zmiany otwarcia fototranzystora, to trzeba dodać przetwornik analogowo-cyfrowy, który będzie monitorował napięcie na kolektorze/emiterze T1 i prześle je szyną I2C w postaci cyfrowej do uC.
To tak bardzo ogólnie.

Możesz zrobić też monitor napięcia na LM3914, z pominięciem uC.

Poczekaj na propozycje kolegów.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 27 sty 2013, 19:19

Co wy budujecie z tym fototranzystorem ?
Po pierwsze ATTiny 13 ma na pokładzie przetwornik ADC, a nawet komparator, więc nie trzeba żadnych zewnętrznych układów dopinać, natomiast trzeba dobrze podłączyć ten fototranzystor do procesora.

andrzej1_1
-
Posty: 39
Rejestracja: 28 lip 2010, 14:42
Lokalizacja: Stróże

Post autor: andrzej1_1 » 27 sty 2013, 19:34

Urządzenie ma wykrywać sen, w czasie którego oczy ruszają się pod powiekami. W tym celu co jakiś czas emituje podczerwień i sprawdza dane z odbicia. Jeśli pomiary się różnią znaczy że oczy się ruszają czyli ktoś jest w fazie snu. Jest już takie urządzenie ale kosztuje ono 500zł :/

@kayron, mógłbyś coś więcej powiedzieć jak to podpiąć? Bo szukałem w internecie, ale to dla mnie czarna magia.

ODPOWIEDZ