Skocz do zawartości

realistyczne oswietlenie modelu


obara

Rekomendowane odpowiedzi

Opracowalem przy pomocy naszych wspolnych znajomych projekt oswietlenia modelu.

Pozwole sobie zachowac pierwszy post w tym watku na finalna wersje tego ukladu wraz z opisem uruchomienia i programowania.

 

Moja wiedza w temacie programowania mikrokontrolerow jest niezbyt wielka, ale mam wielkie ambicje.

Projekt jest open-source bo po co mialbym go tworzyc przy Waszym udziale i trzymac na tym lape jednoczesnie.

 

Mam nadzieje, ze skorzysta z niego wiele osob i kiedys zobacze, ze to cos lata w ktoryms z Waszych cudow.

 

Oglaszam jednoczesnie, ze dwom losowo wybranym osobom, z tych ktore pomoga mi ten uklad dokonczyc, funduje zestaw czesci, lub zmontowany uklad wg zyczenia.

Moja uczciwosc w tym zamysle potwierdzi TomekR (mam nadzieje :D ).

 

----------------------------------------------------------------------------------

Aktualna wersja oswietlenia do modeli

 

Schemat ukladu:

schemat.gif

 

Wyglad plytki i rozmieszczenie elementow:

20070224_elementy_01.gif

 

Kod zrodlowy wsadu procesora

$regfile = "attiny13.dat"
$crystal = 9600000

Dim Timer_main As Byte                  'zegar zliczajacy 2s
Dim Timer_signal As Byte                'zegar zliczajacy 10ms
Dim Flag_1_overflow As Bit              'flaga pierwszego przepelnienia Timer_signal
Dim Signal_start As Byte                'poczatek impulsu
Dim Signal_width As Byte                'szerokosc impulsu
Dim Mask As Byte                        'maska swiatla ladowania
Dim Flag_idle As Bit                    'flaga pracy w trybie AWARIA


Config Portb = &B111101                 'ustawienie wejsc i wyjsc
Portb = &B011101                        'zapalenie diodek

Flag_1_overflow = 0
Flag_idle = 0
Mask = &B000010


Config Int0 = Change                    'zewnetrzne przerwanie na zmiane stanu PB1

Config Timer0 = Timer , Prescale = 64   'wystartowanie timera zliczajacego 100us
Timer0 = 241                            'ustawienie stanu poczatkowego timera

Enable Int0                             'uruchomienie przerwania zewnetrznego
Enable Timer0                           'uruchomienie przerwania od timera
Enable Interrupts                       'odblokowanie przerwan
On Int0 Signal_int                      'wskazanie procedury obslugi przerwania
On Timer0 100us                         'wskazanie procedury obslugi przerwania



Do                                      'poczatek programu

 If Timer_signal = 100 Then            'jesli minelo 10ms
   Timer_signal = 0                    'wyzeruj zegar zliczajacy 10ms
   Incr Timer_main                     'dodaj 1 do zegara zliczajacego 2s
   If Flag_1_overflow = 0 Then         'jesli zegar 10ms nie przepelnil sie
     Flag_1_overflow = 1               'oznacz flage przepelnienia zegara 10ms 1 raz
   End If
 End If

 If Timer_main = 200 Then              'jesli minely 2s
   Timer_main = 0                      'wyzeruj zegar zliczajacy 2s
   If Flag_idle = 0 Then               'jesli program nie pracuje w trybie AWARIA
     If Signal_width < 15 Then         'jesli impuls krotszy niz 1,5ms
       Mask = &B110111                 'ustaw maske gaszacej swiatlo ladowania
     Else                              'jesli impuls dluzszy niz 1,5ms
       Mask = &B111111                 'ustaw maske zapalajacej swiatlo ladowania
     End If
     If Signal_width < 9 Then          'jesli impuls krotszy niz 0,9ms
       Flag_idle = 1                   'oznacz flage pracy w trybie AWARIA
     End If
     If Signal_width > 21 Then         'jesli impuls dluzszy niz 2,1ms
       Flag_idle = 1                   'oznacz flage pracy w trybie AWARIA
     End If
   End If
   Signal_width = 0                    'wyzerowanie odczytanego stanu
 End If

 If Flag_idle = 0 Then                 'jesli program nie pracuje w trybie AWARIA
   Select Case Timer_main
     Case 0 To 1 : Portb = &B011100 And Mask
     Case 30 To 31 : Portb = &B011001 And Mask
     Case 100 To 101 : Portb = &B011100 And Mask
     Case Else : Portb = &B011000 And Mask
   End Select
 Else                                  'jesli program pracuje w trybie AWARIA
   Select Case Timer_main
     Case 0 To 1 : Portb = &B010100
     Case 25 To 26 : Portb = &B010001
     Case 40 To 41 : Portb = &B010001
     Case 100 To 101 : Portb = &B010100
     Case Else : Portb = &B010000
   End Select
 End If

Loop
End                                     'koniec programu



100us:                                  'procedura obslugi przerwania od timera
Timer0 = 241                            'ustawienie stanu poczatkowego timera
Incr Timer_signal                       'zwiekszenie stanu zegara zliczajacego 10ms
Return



Signal_int:                             'procedura obslugi przerwania zewnetrznego
 If Pinb.1 = 1 Then                    'jesli przerwanie rozpoczynajace impuls
   Signal_start = Timer_signal         'zapamietanie stanu zegara 10ms na przerwaniu
   Flag_1_overflow = 0                 'wyzerowanie flag przepelnienia zegara 10ms
   Flag_idle = 0                       'wyzerowanie flagi pracy w trybie AWARIA
 Else                                  'jesli przerwanie konczace impuls
   If Flag_1_overflow = 0 Then         'jesli zegar 10ms nie przepelnil sie
     Signal_width = Timer_signal - Signal_start
   Else                                'jesli zegar 10ms przepelnil sie 1 raz
     Signal_width = 149 + Timer_signal
     Signal_width = Signal_width - Signal_start
     Flag_1_overflow = 0
   End If
 End If
Return

 

Ustawienia fusebitow:

20070315_fusebity.gif

 

Zdjecie plytki:

20070224_uklad2_01.jpg

 

Zdjecie plytki: (uwaga dla wnikliwych! na zdjeciu jest plytka niezgodna z powyzszym rozmieszczeniem elementow i schematem)

20070224_uklad2_02.jpg

 

Video z dzialania ukladu: (lepiej przyciszyc glosniczki, slabe odswiezanie kamerki w telefonie spowodowale, ze w trybie bez sterowania niezbyt dobrze widac podwojny blysk swiatel mrygajacych co 2sek - tych na koncowki skrzydel)

http://www.obara.pl/elektronika/oswietlenie_samolotu/oswietlenie.3gp

Odnośnik do komentarza
Udostępnij na innych stronach

Tomku! Wolne zarty. :D

 

Uklad sterowany ma byc z odbiornika RC.

Sercem ukladu jest mikrokontroler ATTiny13.

 

Przewidziane tryby swiecenia:

AWARIA - tryb, w ktorym brak sygnalow z odbiornika lub sygnal zostal utracony (moze sluzyc jako lokalizator utraconego modelu)

STROBE - tryb normalnej pracy swiatel pozycyjnych, stroboskopow na koncowkach skrzydel i stroboskopow pod i nad samolotem (beacon lights)

LANDING - j/w + wlaczone swiatla ladowania

 

Schemat ukladu jest w miare ostateczny:

Tutaj byl schemat ukladu.

 

Teraz to z czym problem jest najwiekszy.

Kod do ATTiny w Bascomie:

Tutaj byl niedzialajacy kod.

 

Moje pytanie brzmi. Kto zna sie na tym na tyle, aby pomoc dokonczyc dziela. W tej chwili procek powoduje rozne nieoczekiwane dzialania ukladu.

 

Wiecej szegolow po konkretnych pytaniach.

To tyle jak na pierwszy raz.

Odnośnik do komentarza
Udostępnij na innych stronach

Na szczescie i nieszczescie skonczylem uklad.

 

Wychodzi na to, ze nagrod nie bedzie, ale jesli ktos chce to moge podeslac zaprogramowany procesor.

Na wydanie przeznaczam 4 procesory. Jesli ktos chcialby taki procesor otrzymac, prosze o informacje na ten temat w watku.

Zanim jednak zaczne je wysylac chcialbym aby ktos z Was przetestowal w "warunkach bojowych" uklad i zdal na forum relacje z jego dzialania. :D

 

Teraz moge sie wziac za nastepne rozwiazania. :D

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.