Sterownik świateł do samochodu - jak podać sygnały na mikrokontroler?


Witam wszystkich. Mam koledze zaprojektować sterownik świateł samochodowych. Konkretnie chodzi o układ który po wyjęciu kluczyka ze stacyjki włączy światła mijania (2 żarówki 55W) na jakiś regulowany czas z przedziału 10 do 40 sekund.

Wiem, że na pewno będę musiał badać pojawienie się "+" po stacyjce w instalacji, a później jego zniknięcie i na tej podstawie włączyć światła i wyłączyć je po jakimś czasie, ustalanym np. potencjometrem.

Jak wiadomo w instalacji samochodowej jest kilkanaście V i nie mogę tego podpiąć bezpośrednio na nogę mikrokontrolera. Pytanie jak najlepiej to zrobić - poprzez zwykły dzielnik napięcia i badanie stanu wysokiego? Jeśli tak to jak najlepiej dobrać wartości rezystorów, by nie było problemów zarówno na właczonym i wyłaczonym silniku (wiadomo że przy właczonym silniku w instalacji jest wyższe napięcie)???

Jeśli w inny sposób, np poprzez jakiś tranzystor, to prosiłbym o krótki opis.

Wydaje mi się że sam program nie będzie skomplikowany i wystarczy tiny13. W programie należy sprawdzać stan jednej nóżki mikrokontrolera, i gdy ze stanu wysokiego wróci stan niski, włączyć światła na czas wartości X. Ta wartość była by np odczytaną wartością z przetwornika A/C gdzie podłączony by był potencjometr pomiędzy masę a +5V. Pytanie tylko jak ograniczyć tę wartość? Przy 8 bitowym A/C mam wartości rzędu od 0 do 255. Ja bym musiał uzyskać od 10 do 40. Połączyć do potencjometru dodatkowe rezystory w szeregu?

Oczywiście odliczanie czasu było by na timer'ze, ale zważywszy na to iż nie jest tu ważna dokładnie każda sekunda, to wystarczył by wewnętrzny układ RC do taktowania mikrokontrolera, tym bardziej że jak dobrze pamiętam to do tiny13 nawet nie da się podłączyć zewnętrznego kwarcu...




Portret użytkownika EDC

Odp.Sterownik świateł

Najprostszym i testowanym przeze mnie rozwiązaniem jest jedna dioda prostownicza. Podłączasz ją odwrotnie do kierunku z którego przychodzi 12V. Gdy panuje tam napięcie 12V nie "przebije" się do procka czy to przy rozładowanym akumulatorze 9V czy to nawet przy uszkodzonym alternatorze 18V!. Natomiast gdy wyłaczysz stacyjke to wszystkie urządzenia do niej podłaczone "chcą prąd" który wystawia ATtiny13 i zwieraja Ci nózke do masy... :D
Jestem elektronikiem samochodowym. Jak napiszesz jaki to samochód to może cos doradze jeszcze bo niektóre nowe moga być "niezadowolone" gdy dostaną prad z drugiej strony. Czasem tez wyłaczniki różnie łączą...i można się spodziewać dziwnych zachowań :P
Może być nawet tak że stacyjka się właczy na czas świecenia :D

Tu masz taki pomysł który możesz sobie jeszcze przerobić. Gdy włączysz stacyjkę Tryb sie zmienia i czeka na wyłączenie stacyjki. Gdy wyłączysz stacyjkę mierzy nasłonecznienie i gdy jest dzień nie włącza już doświetlania Comming Home (tak sie to nazywa w VW i oświetla chodniki i podjazdy). Mierzy też napięcie potencjometru odpowiedzialnego za czas. Czas zamknięty jest w ramach 10-40 jak chciałeś. Dlatego, że Tinny13 ma tylko jeden Timer do odmierzania czasu użyłem funkcji Wait. Nie czeka jednak całych 40 sec blokując program a czeka 1sec x Czas w pętli cały czas odejmujac czas. Gdzy czas = 0 przechodzi do spektakularnego :D powolnego wygaszenia świateł przez Mosfeta :)
Odejmowanie czasu co sekunde ma też tę zaletę że masz okienko czasowe na sprawdzenie innych warunków. Jeśli więc włączysz znów stacyjkę zmienna czas przyjmuje od razu wartość 0 i program jest gotowy na kolejny cykl.
Wejście ADC(3) podciągnij 10kOhm rezystorem a Fotorezystor podłącz pomiędzy ten pin i masę. Jesli nie bedzie fotorezystora światło będzie się włączać zawsze niezależnie od pory dnia.

$regfile = "attiny13a.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 1200000
 
Config Portb = &B11100011 : Portb = &B11100110
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
 
Config Adc = Single , Prescaler = 8 , Reference = Avcc
 
Dim N As Byte , L As Word , Tryb As Byte , Czas As Byte
 
Mosfet Alias Portb.0
12v_in Alias Pinb.2
Foto_4 Alias Pinb.3
Potenc Alias Pinb.4
 
Do
 
Select Case Tryb
 Case 0
  Reset Mosfet
  If 12v_in = 1 Then Tryb = 1
 Case 1
  If 12v_in = 0 Then
   Gosub Mierz_czas
   Gosub Fotorezystor
   Tryb = 2
  End If
 Case 2
  If L > 200 Then
   Set Mosfet
  Else
   Czas = 1
  End If
  Do
  Wait 1
  Decr Czas
  If 12v_in = 1 Then Czas = 0
  Loop Until Czas = 0
  Gosub Wylacz
End Select
 
Loop
End
 
Mierz_czas:
Start Adc
L = Getadc(2)
Stop Adc
Czas = L / 20                                               'zakres 0 - 51 sekund
If Czas < 10 Then Czas = 10
If Czas > 40 Then Czas = 40
Return
 
Fotorezystor:
Start Adc
L = Getadc(3)
Stop Adc
Waitms 100
Return
 
Wylacz:
If Mosfet = 1 Then                                                     'powoli sciemnia
For N = 255 To 0 Step -1
Pwm0a = N
Waitms 10                                                   'predkosc sciemniania
Next N
Tryb = 0
End If
Return

Życzę miłego dnia.

-

BARTek
Moja strona

Portret użytkownika mareks6

A no widzisz :-)

A no widzisz :-) Ja też siedziałem kiedyś w elektronice samochodowej. Centralne zamki, alarmy, monitorowanie GPS, Audio/Video oraz wszelkie naprawy instalacji elektrycznych. Niestety niska płaca i wkurzający szef zmusiły mnie do zmiany pracodawcy i tak z Opola trafiłem do Monachium do fabryki BMW. Niby dalej w samochodach, ale teraz już nie na elektryce. Oczywiście sporo mi w głowie zostało i ma świadomość tego co pisałeś o sygnałach i niezadowoleniu nowych samochodów :-)

Co do programu - kurcze, odwaliłeś chyba za mnie całą robotę :p Kolega nie wspominał nic o fotorezystorze, ale kto wie czy by jeszcze nie wspomniał jakby zauważył że mu i w dzień się światła włączają :p

Zaprojektuję płytkę pod ten układ i odezwę się przed jej zrobieniem w celu oceny schematu :-)

Dzięki

Portret użytkownika mareks6

MOSFET

Jestem w trakcie rysowania schematu, w sumie to kończę bo tu nie ma wiele do rysowania, ale zastanawia mnie jak podłączyć MOSFETa do procka i jaki użyć? Podłączyć bezpośrednio czy przez jakiś dodatkowy tranzystorek z grupy BC??? Nie wiem czy tiny wysteruje bezpośrednio mosfeta, dlatego wolę od razu zapytać...

Dodatkowo w szeregu do fotorezystora dam jakiś potencjometr (nie wiem tylko jeszcze jakiej wartości, ale to chyba zależy od użytego samego fotoR), dzięki czemu jeśli się nie mylę to będzie można lekko wyregulować przy jakim świetle ma reagować układ.

wejście do wykrywania 12V jak pisałeś Bartek podłączę przez diodę prostowniczą.

Co do podciągnięcia wejścia ADC to chyba miałeś na mysli kanał 3 czyli tam gdzie idzie sam fotorezystor? Jakoś nie pasuje mi tu podciąganie kanału 2 gdzie mam potencjometr pomiędzy +5V a GND...

Portret użytkownika EDC

Odp. Mosfet

Przepraszam za długi czas odpowiedzi - byłem w delegacji :D
Co do podciągnięcia wejścia ADC to oczywiście wkradł się błąd i już go poprawiłem. Co do Mosfeta zajrzyj tutaj : http://mirley.firlej.org/node/1110 Stamtąd pochodzi część pomysłu jak i rozwiązania tam są z N-Fet i P-Fet
Nie napisałeś jaki to samochód a np. w japończykach sprawa jest prostsza bo żarówka zasilana jest z jednego bezpiecznika a światła "dostaja mase" - jest różnica...

-

BARTek
Moja strona

Portret użytkownika mareks6

samochód to audi a4 z 96

samochód to audi a4 z 96 roku. Problem będzie z PWMem i tym powolnym gaszeniem świateł. W tym samochodzie zamiast fabrycznych świateł mijania są żarniki xenonowe 35W. Takie zestawy jak na allegro idzie kupić. W tej sytuacji będę musiał albo wywalić instrukcje powolnego gaszenia (bo do xenonów się to nie nadaje) albo jeśli kolega będzie chcieć, podłączyć sterownik pod inne światła (halogeny, postojówki czy też długie)...

Płytkę na pewno zrobię tak by mosfet był podłączony pod pin z PWMa w mikrokontrolerze, dzięki temu zawsze będzie można przeprogramować.

-----------------EDIT------------------------------------------

schemat sterownika gotowy i przedstawiam go poniżej. MOSFETa podłączyłem tak jak na rysunku w temacie który podałeś. Nie było innego w eagle dlatego użyłem tego z diodą, jednak nie wiem jeszcze jakiego użyję w budowanym sterowniku. Rezystory mają wartości już przypisane, jednak nie wiem jeszcze jakie wartości użyć dla potencjometrów. Myślę że ten który będzie do regulacji czasu dać jakieś 10k, by nie płynął zbyt wielki prąd. Z kolei ten w szeregu z fotorezystorem będę musiał dobrać chyba eksperymentalnie, bo nie wiem nawet jakie wartości mają typowe fotorezystorki...

Tranzystor sterujący mosfetem dałem BC547 - chyba może być? IC2 to oczywiście stabilizator 5V, a te wielkie złącze jest do programowania w układzie. JP3 i JP5 muszę jeszcze usunąć bo przerabiałem schemat z podobnego układu jaki kiedyś robiłem.

Fotorezystor prócz miejsca na płytce, będzie również wyprowadzony na złącza ARK gdyby miał być na kablu. Na jedno ze złącz ARK podałem +12V po stacyjce oraz wyjście na żąrówki, ale nie wiem czy da się nazwać osobno piny w tym złączu w eagle dlatego zostawiłem tak jak jest.

Prosiłbym o sprawdzenie schematu zanim zrobię płytkę :-)

Portret użytkownika EDC

Odp. Audi A4

Najlepiej będzie jak w Sub "Wyłącz", "Case0" i w "Case2" dopiszesz osobne sterowanie pinem PORTB1 (włącz/wyłącz) bo wtedy nie będziesz musiał przeprogramowywać a moduł będzie uniwersalny. Na PORB1 poprzez 1kOhm jakiś BC237 i nie zapomnij o diodzie dla przekaźnika. Dodaj taki przekaźnik ze stykami 30, 87 i 87a. Na czas świecenia odłączy od reszty auta bo właczały by się różne rzeczy gdyby ktoś zostawił włączone światła. W skrajnych przypadkach samochód by nie zgasł do momentu wyłączenia świateł wyłacznikiem.

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika mareks6

a no to zmienia postać

a no to zmienia postać rzeczy, cosik jeszcze poprzerabiam na schemacie

czyli wyjście ze sterownika ma być za tranzystorkiem

----------------------------------------EDIT-----------------------------------------------------

poprawiony schemat poniżej. Diodę przekaźnika dałem na płytce ale chyba powinna być przy samym przekaźniku? SJ1 to gruba zworka cynowa którą wymieramy co ma być na wyjściu - sygnał z mosfeta czy na przekaźnik. No i oczywiście montujemy elementy pod swoją wersję :-)

Portret użytkownika mareks6

Płytka

Na poniższych fotkach projekt płytki do schematu wyżej.

Niestety teraz już po zrobieniu płytki i przylutowaniu kilku elementów przychodzi mi do głowy czy potencjometr P1 jest poprawnie podłączony by regulować poziom jasności do zadziałania sterownika. Czy nie powinna byś jedna noga do masy, druga do fotorezystora a środkowa w stronę tiny???

Kolejna sprawa jakich użyć potencjometrów? Mam idealnie pasujące 10k, ale nie wiem czy nie lepiej jakieś większy by mniejszy prąd płynął?

Tak samo z fotorezystorami. Mam w domu dwa rodzaje: GL5616 oraz GL5537. Domyślam się że od wartości ich rezystancji (a raczej zakresów) zależy potencjometr P1 by miał sens.


Jakby tego było mało, jak powiedziałem koledze, że na płytce będzie czujnik światła, to mi powiedział czy nie można rozbudować tego tak by gdy jest ciemnio same się włączały światła mijania. Myślę że gdyby użyć obu wyjść (na szczęście płytka jest tak zrobiona że się da wyprowadzić jedno z wyjść na przekaźnik) to przy odpowiednim zaprogramowaniu tiny, da radę to zrobić, ale to będzie ewentualnie drugi krok...

Portret użytkownika EDC

Odp. Płytka

Trochę mnie zaskoczyłeś użyciem 7805CV. Nie wystarczyłby 78L05? Na tranzystorze którego teraz może nie używasz jest plus na obudowie, więc i na radiatorze jeśli nie dasz silikonowej przekładki. Ja tak myślę czy nie przydał by się kondensator na wejściu ADC..ale to pewnie wyjdzie w praniu :D
Ja zawsze robie prototyp na uniwersalnej płytce i najczęściej tak moje projekty kończa więc nie mam takiej ładnej galerii :D
To mój "szatanek" do zmian predkości. Ma nowe oprogramowanie i takie tam. Niedługo go zaprezentuje. Fota obok pendrive ma pokazać rozmiary maleństwa :) Mieści się w obudowie przekaźnika.

-

BARTek
Moja strona

Portret użytkownika mareks6

jakiej prędkości?Co do

jakiej prędkości?

Co do prototypu, i tak bym musiał płytkę zaprojektować, a tak mam to już z głowy. Ewentualnie jakieś popraki jak będzie trzeba. Co do wykonania samej płytki - z użyciem laminatora i wytrawiarki projektu kuby, trwa to z cała pewnością mniej niż kombinowanie z płytkami uniwersalnymi.

Wracając do stabilizatora - owszem wystarczyłby ale takich mam pełno w domu, z czego kilka w obudowie całej z tworzywa więc nie muszę się martwić o izolację by nie zrobić zwarcia, jednak dodatkowo dam przekładkę pod MOSFETa by nie było plusa na radiatorze o ile w ogóle będzie potrzebny.

Co do MOSFETa - kupiłem IRF9540. Ma 13A maksymalny prąd więc na 2x55W halogen wystarczy.

Nie wiem tylko czy dobrze rozwiązałem tą regulację na fotorezystorze i którego użyć - jeden ma rezystancję w zakresach kilku kiloomów a drugi w zakresach kilkudziesięciu.

Co do kondensatora, jak będzie trzeba to gdzieś wmontuje :-)

A sam potencjometr do regulacji czasu jaki byś dał? 10k czy lepiej 100k dla mniejszego prądu?

Portret użytkownika EDC

Odp. Sterownik świateł

Żebyś się czasem nie zdziwił z tym tranzystorem. IRF9540 13A RDS(on)=0.20 dla porównania IRF4905 74A RDS(on)=0.02 Dziesięć razy mniej..różnica w cenie 1zł.
55W x 2 = 110W , 110W / 12V = 9A Zakładając tylko 12V. Żarnik zimnej żarówki bierze dużo więcej...co do automatycznego włączania świateł to i tak trzeba jeździć z właczonymi, to po pierwsze, a po drugie trzeba pamietać o włączeniu postojówek (oświetlenie tablicy, licznika). Nadjeżdzajacy z przeciwka może swoimi światłami wyłaczyć Twoje. Różne takie pułapki i problemy do rozwiązania powstają.

-

BARTek
Moja strona

Portret użytkownika mareks6

no właśnie z tym tranzystorem

no właśnie z tym tranzystorem to to nie wiedziałem jaki kupić, ale jak znajdę ten co piszesz to w razie czego zmienię.

Co do AWS - ten kolega ma halogeny w reflektorze i zawsze na nich jeździ gdyż nie widać nawet, że to halogeny świecą a nie mijania. Jego pomysł jest taki by gdy nastaje ciemność na zewnątrz, to wyłączają się halogeny a włączają mijania, ale to będzie ewentualnie drugim etapem, najpierw się skupiam na pierwszym...

Portret użytkownika mareks6

Po długim czasie odświeżam temat

Jako że miałem ostatnio bardzo mało czasu, a koledze się nie spieszy, budowa sterownika została przeze mnie odstawiona. Zatrzymałem się na wykonaniu układu elektronicznego. Teraz wróciłem do układu i zaprogramowałem mikrokontroler poniższym kodem. Jest to praktycznie ten kod co podawałeś Bartku lecz dodałem obsługę przekaźnika na PORTB1 jak wspomniałeś oraz zmieniłem mikrokontroler na tiny13 i taktowanie na 9,6MHz które ma wbudowane ten procesor. W fusach wyłączyłem dzielenie przez 8.

Jeśli dobrze rozumiem myk z tą diodą to gdy jest obecna na niej masa to mam po prostu stan niski na mikrokontrolerze (czyli wyłączona stacyjka) a gdy wisi ona w powietrzu lub podaję +12V to na mikrokontrolerze jest stan wysoki poprzez rezystor podciągający.

Niestety u mnie układ działa jakoś dziwnie. Gdy wejście ma +12V lub wisi w powietrzu to na wyjściu mam cały czas 12V (podłączyłem sobie przez opornik diodę LED do sprawdzania). Gdy podepnę wejście do masy, a więc wyłączam stacyjkę to dioda nadal świeci. Gdy następnie znów odłączę wejście od masy, a więc stacyjka włączona to po wyznaczonym czasie dioda gaśnie i od razu powoli zaczyna się rozświetlać. I tak w kółko.

Wygląda na to że coś jest skopane z tym ostatnim krokiem. Zamiast przy wyłączonej stacyjce, czyli podłączonej do wejścia masie dioda po PWMie powinna powoli gasnąć to ta gaśnie dopiero po ponownym włączeniu stacyjki i od razu po PWMie powoli się rozświetla.

Wyjście na przekaźnik na PORTB1 w ogóle nie zmienia stanu. Dodam że na chwilę obecną nie podłączałem fotorezystora by testować układ najpierw bez tej opcji.

Jakieś pomysły co z tym jest nie tak? Może coś poknociłem w schemacie lub same porty źle poustawiane?

Poniżej kod:

$regfile = "attiny13.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 9600000
 
Config Portb = &B11100011 : Portb = &B11100100
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
 
Config Adc = Single , Prescaler = 8 , Reference = Avcc
 
Dim N As Byte , L As Word , Tryb As Byte , Czas As Byte
 
Mosfet Alias Portb.0
12v_in Alias Pinb.2
Foto_4 Alias Pinb.3
Potenc Alias Pinb.4
Przek Alias Pinb.1
 
Do
 
Select Case Tryb
 Case 0
  Reset Mosfet
  Reset Przek
  If 12v_in = 1 Then Tryb = 1
 Case 1
  If 12v_in = 0 Then
   Gosub Mierz_czas
   Gosub Fotorezystor
   Tryb = 2
  End If
 Case 2
  If L > 200 Then
   Set Mosfet
   Set Przek
  Else
   Czas = 1
  End If
  Do
  Wait 1
  Decr Czas
  If 12v_in = 1 Then Czas = 0
  Loop Until Czas = 0
  Gosub Wylacz
End Select
 
Loop
End
 
Mierz_czas:
Start Adc
L = Getadc(2)
Stop Adc
Czas = L / 20                                               'zakres 0 - 51 sekund
If Czas < 10 Then Czas = 10
If Czas > 40 Then Czas = 40
Return
 
Fotorezystor:
Start Adc
L = Getadc(3)
Stop Adc
Waitms 100
Return
 
Wylacz:
If Mosfet = 1 Then                                                     'powoli sciemnia
For N = 255 To 0 Step -1
Pwm0a = N
Waitms 10                                                   'predkosc sciemniania
Next N
Tryb = 0
End If
 
Reset Przek
 
Return

Portret użytkownika EDC

Odp.Sterownik swiateł

Na początek zmień w Aliasach "Przek Alias Pinb.1" na "Przek Alias Portb.1" , a ja się przyjrzę
reszcie.

Tam masz chyba odwróconą polaryzację tym tranzystorem pomiędzy Tiny a Mosfetem. Musiał byś pozamieniać chyba przy nim instrukcje Set i Reset, warunek If Mosfet = 1 na Mosfet = 0 i na samym początku w tym zapisie binarnym portu. Port = &B
(tylko nie ruszaj Config Port) i tak się pod tym kątem temu przyjrzeć. Na przykład "For N = 255 To 0 Step -1" zamienić na "For N = 0 To 255 Step " wiesz.. nie napisałem ze to działa tylko że możesz sobie przerobić, to raptem kilka linijek :P

-

BARTek
Moja strona

Portret użytkownika mareks6

aaa, spoko. Właśnie tak

aaa, spoko. Właśnie tak myślałem że może coś po prostu jest na odwrót, ale nie chciałem narazie niczego zmieniać bo wydawało mi się że pisałeś że dokładnie taki kod kiedyś napisałeś i że działa :-)

W takim razie wiem już że śmiało mogę pozamieniać 0 na 1 i na odwrót :-)

Portret użytkownika mareks6

mógłbyś może zerknąć na

mógłbyś może zerknąć na schemat wyżej? A może ktoś inny może dać mi wskazówkę w tej sprawie?

Tak teraz kombinuje i myślę czy użyłem odpowiednich elementów. Wydaje mi się że ten mały tranzystor odwraca polaryzację, ale mosfet za nim znów ją odwraca i wtedy jedynka wystawiona na wyjściu tiny powinna skutkować napięciem +12V na wyjściu mosfeta. Jeśli się mylę to mnie poprawcie.

Z kolei na PORTB1 mam tylko jeden mały tranzystor i ten też odwraca polaryzację więc 1 na wyjściu tiny daje 0 na wyjściu tegoż tranzystorka, ale tym się później zajmę...

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

Już to sprawdziłem. wyjąłem tiny z podstawki i podałem +5V (czyli stan wysoki) na wyprowadzenie w podstawce gdzie jest w tiny PORTB0 i na mosfecie mam +12V. Więc miałem rację

Portret użytkownika EDC

Odp. Sterownik świateł

Testnij. Ustawienia PWM mają wyższy priorytet. Może tak to ruszy ;)
Trochę poopisywałem. Na końcu zmieniłem tego Aliasa.
Ostatecznie brakowało jeszcze takiej zmiany w procedurze wyłaczania. Teraz Tryb 0 niezależnie od tego czy świeciła. Może to było to.

$regfile = "attiny13.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 9600000
 
Config Portb = &B11100011 : Portb = &B11100100
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
 
Config Adc = Single , Prescaler = 8 , Reference = Avcc
 
Dim N As Byte , L As Word , Tryb As Byte , Czas As Byte
 
Mosfet Alias Portb.0
12v_in Alias Pinb.2
Foto_4 Alias Pinb.3
Potenc Alias Pinb.4
Przek Alias Portb.1
 
 
Do
 
Select Case Tryb
 Case 0                                                     'poczatek wiec zero
  Pwm0a = 0                                                 'zgaszenie żarówy
  Reset Przek
  If 12v_in = 1 Then Tryb = 1                               'jesli ON stacyjkę
 Case 1
  If 12v_in = 0 Then                                        'to nic sie nie dzieje
   Gosub Mierz_czas                                         'do momentu wylaczenia
   Gosub Fotorezystor                                       'przy wyłaczaniu sprawdza
   Tryb = 2                                                 'czas i nasłonecznienie
  End If                                                    'ustawia tryb 2
 Case 2
  If L > 200 Then                                           'jesli swieci to L jest małe
   Pwm0a = 255                                              'włączenie żarówy
   Set Przek                                                'jesli ciemno to na 10 sekund
   Czas = 10  '//Usuń po testach by regulowac PR//
  Else                                                      'jesli swieci to po sekundzie
   Czas = 1                                                 'musi być coś do odjęcia
  End If
  Do                                                        'czekaj sekunde
  Wait 1                                                    'odejmij sekunde
  Decr Czas                                                 'jesli ktoś właczył stacyjke od razu skroć czas
  If 12v_in = 1 Then Czas = 0                               'odejmuj aż czas = 0
  Loop Until Czas = 0                                       'skocz do wyłacz
  Gosub Wylacz
End Select
 
Loop
End
 
Mierz_czas:
Start Adc
L = Getadc(2)
Stop Adc
Czas = L / 20                                               'zakres 0 - 51 sekund
If Czas < 10 Then Czas = 10
If Czas > 40 Then Czas = 40
Return
 
Fotorezystor:
Start Adc
L = Getadc(3)
Stop Adc
Waitms 100
Return
 
Wylacz:
If Pwm0a > 0 Then                                           'tylko jesli swiecila
For N = 255 To 0 Step -1                                    'powoli sciemnia
Pwm0a = N
Waitms 10                                                   'predkosc sciemniania
Next N
End If
 
Tryb = 0                                                    'na koncu ustaw tryb 0
Reset Przek
Return

-

BARTek
Moja strona

Portret użytkownika mareks6

Sprawdziłem, poprawiłem i nadal coś jest nie tak...

Troszkę tego kodu tu jest, ale mam nadzieję że nikomu to nie będzie przeszkadzać. Sprawdziłem podawany przez Ciebie kod lecz musiałem w nim zmienić PWM bo co na prawdę jest dziwne - wartość 255 oznacza chyba w PWMie 0 logiczne a wartość 0 oznacza 1 logiczną gdyż jak wspomniałem w poprzednich postach po podaniu 1 na tranzystory pojawia mi się 12V na MOSFET'cie a w tym układzie gdy wartość PWMie ma 0 to mam 12V, ale mniejsza o to. Zmieniłem kod tak jak przedstawiam go poniżej i mam jeden dziwny objaw. Za każdym razem gdy podam masę na wejście 12V_in (wyłączona stacyjka) to zaświeca mi się światło na albo wyznaczony czas (teraz do prób zmieniłem na 3s) albo po zmianie na +12V od razu gaśnie. Innymi słowy gdy mam cały czas wysoki stan (włączona stacyjka) i na szybko podam impuls masy (wyłączenie i włączenie stacyjki) to światło się zaświeca i zaraz gaśnie, a gdy po prostu podam na stałe masę to światło gaśnie po wyznaczonym czasie.

Do tego momentu jest tak jak powinno. Problem polega teraz na tym że gdy już mam tą masę na stałe, czyli wyłączoną stacyjkę i światło już zgasło, to po podaniu +12V, czyli włączeniu stacyjki natychmiast włacza się znów światło. Gdzieś coś chyba z jakimś warunkiem jest źle lub gdzieś odpowiedniego brakuje gdyż tego nie powinno być... Sam już nie wiem gdzie może być błąd. Analizuję ten niby banalny kod i cały czas mi się wydaje że wszystko jest dobrze a jednak...

Poniżej obecny kod o którym pisałem:

$regfile = "attiny13.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 600000
 
Config Portb = &B11100011 : Portb = &B11100100
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
 
Config Adc = Single , Prescaler = 8 , Reference = Avcc
 
Dim N As Byte , L As Word , Tryb As Byte , Czas As Byte
 
Mosfet Alias Portb.0
12v_in Alias Pinb.2
Foto_4 Alias Pinb.3
Potenc Alias Pinb.4
Przek Alias Portb.1
 
 
Do
 
Select Case Tryb
 Case 0                                                     'poczatek wiec zero
  Pwm0a = 255                                               'zgaszenie żarówy
  Reset Przek
  If 12v_in = 1 Then Tryb = 1                               'jesli ON stacyjkę
 Case 1
  If 12v_in = 0 Then                                        'to nic sie nie dzieje
   Gosub Mierz_czas                                         'do momentu wylaczenia
   Gosub Fotorezystor                                       'przy wyłaczaniu sprawdza
   Tryb = 2                                                 'czas i nasłonecznienie
  End If                                                    'ustawia tryb 2
 Case 2
  If L > 200 Then                                           'jesli swieci to L jest małe
   Pwm0a = 0                                                'włączenie żarówy
   Set Przek                                                'jesli ciemno to na 10 sekund
   Czas = 3                                                 '//Usuń po testach by regulowac PR//
  Else                                                      'jesli swieci to po sekundzie
   Czas = 1                                                 'musi być coś do odjęcia
  End If
  Do                                                        'czekaj sekunde
  Wait 1                                                    'odejmij sekunde
  Decr Czas                                                 'jesli ktoś właczył stacyjke od razu skroć czas
  If 12v_in = 1 Then Czas = 0                               'odejmuj aż czas = 0
  Loop Until Czas = 0                                       'skocz do wyłacz
  Gosub Wylacz
End Select
 
Loop
End
 
Mierz_czas:
Start Adc
L = Getadc(2)
Stop Adc
Czas = L / 20                                               'zakres 0 - 51 sekund
If Czas < 10 Then Czas = 10
If Czas > 40 Then Czas = 40
Return
 
Fotorezystor:
Start Adc
L = Getadc(3)
Stop Adc
Waitms 100
Return
 
Wylacz:
If Pwm0a < 255 Then                                         'tylko jesli swiecila
For N = 0 To 255 Step 1                                     'powoli sciemnia
Pwm0a = N
Waitms 5                                                    'predkosc sciemniania
Next N
End If
 
Tryb = 0                                                    'na koncu ustaw tryb 0
Reset Przek
Return

Portret użytkownika EDC

Odp. Sterownik świateł

.. zamień na próbę w moim kodzie, nie Twoim tę linijke na "Clear Up"
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 8 ja tymczasem popatrzę na resztę.

Nawiasem mówiąc to jeszcze masz tam te wyjście na przekaźnik na którym można by dopracować logikę a na końcu zabrać się za PWM. Jak ono się zachowuje?

EDIT Mam pomysł!
Jeśli światło się włacza natychmiast to może po prostu jest tu efekt drgania styków? Zamień tę linię:

If 12v_in = 1 Then Tryb = 1

na taką:
If 12v_in = 1 Then
 Tryb = 1
 Waitms 500
End If

-

BARTek
Moja strona

Portret użytkownika mareks6

właśnie też się zastanawiałem

właśnie też się zastanawiałem czy to mogą być drgania, ale jeśli już to przewodu :-) bo ja po prostu mam do wejścia podłączony przewód którym dotykam masy i +12V.

Co do tego dodatkowego wyjścia - zapomniałem chyba napisać że w ogóle nie reaguje, tzn nic się na nim nie zmienia...

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

I okazuje się że jednak były to drgania kabla :p Po dodaniu tego waitms 500 działa wszystko jak należy. Co do PWMu, miałem właśnie zerkać do helpa w sprawie instrukcji konfiguracji PWMa w Bascomie ale zdążyłeś mnie ubiec :p Te Clear down/up oznacza chyba właśnie jaki stan ma oznaczać wypełnienie 100%, czyli wartość 255. zmieniłem tak jak mówiłeś i wsio działa z tym.

Z tym wyjściem dodatkowym jeszcze będę się później bawić. Teraz muszę zerknąć do noty tiny odnośnie ADC bo nie wiem czy jest tu odpowiednio skonfigurowany w bascomie, bo przy skrajnych położeniach potencjometru mam czas świecenia 12 i 15 sekund...

Portret użytkownika EDC

Odp. Sterownik świateł

Długo to trwa jakoś u Ciebie :D
Te wyjście już dawno powinno działać bo miałeś przedtem błąd deklarując Alias dla Pinu zamiast dla Portu. To jest poprawione i powinno działać.
Co do drgań to program jest szybki i gdy włączasz napięcie a styki drgają to spełniony jest kolejny warunek że stacyjka jest znów wyłączona. Potrzebna jest więc jakaś zwłoka i do do tego filtrowanie tego wejścia kondensatorkiem ..tylko że ja zrobiłbym to w minute, a w dziesięć minut zrobiłbym dziesięć innych prób.. no coś klikaj, próbuj. Bez tego ani rusz.

Mi dwa dni zajęło doprowadzenie do tego żeby znaleźć przyczynę dlaczego mi brzydko czcionki rysowało na grafikach. Teraz sa ładniejsze niż oryginały. Własnie przed chwilą do tego doszedłem i zabieram się za przycinanie białych miejsc a potem grabbing do Tablic.

-

BARTek
Moja strona

Portret użytkownika mareks6

a co to jest? Chodzi o

a co to jest? Chodzi o czcionkę na LCD graficznym czy jak?

Co do sterownika, spoko, wczoraj o tym drganiu styków myślałem ale nie zdążyłem już tego zrobić, za to posta po prostu napisałem z info jak idą postępy i poszedłem spać... Zaraz się zabieram za ten problem z ADC, a ten alias do pinu zamiast portu już dawno poprawiłem i nie działa, ale może będę musiał jeszcze tam dokładnie obejrzeć sety i resety, ale to później