Jak wykonać zewnętrzny reset procesora ?

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!
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Jak wykonać zewnętrzny reset procesora ?

Post autor: matrix » 14 sty 2015, 20:21

Mam pytanie. Projektuję pewien układzik na ATTiny13. Po wykonaniu pewnych czynności a w zasadzie po zaniku stanu wysokiego na jednym z pinów i odliczeniu odpowiedniego czasu procesor będzie miał przejść w tryb IDDLE lub POWER DOWN. Program będę pisał w bascomie.

Jak wiadomo ze wspomnianych trybów uśpienia procek można wybudzić na kilka sposobów. Między innymi przerwaniami zewnętrznymi lub wewnętrznymi, a także sprzętowym resetem, ale jak wspomniałem wszystkie piny mam zajęte poza pinem RESET i tu dochodzimy do sedna sprawy.
Mogę wykonać reset zewnętrzny tylko pytanie jak najprościej to wykonać ?

Warunek jest taki. Jak procesor przejdzie w tryb uśpienia to reset procesora ma nastąpić tylko po zaniku napięcia na jednym z pinów i ponownym jego pojawieniu się.

Czyli na jakimś pinie panuje wymuszony przyjściowy stan wysoki, procesor przechodzi w stan uśpienia ale na danym pinie wciąż jest zewnętrzny stan wysoki. Po jakimś czasie na tymże pinie stan wysoki zmienia się na niski czyli napięcie wejściowe znika.

Procek jest cały czas zasilany w stanie uśpienia po czym na danym pinie pojawia się stan wysoki wymuszając zewnętrzny reset procesora.

Mam nadzieję że dobrze to zobrazowałem....

Wiem że wystarczy zrobić prosty filtr RC sterowany poprzez tranzystor NPN. tylko jaka wartość elementów ? Nie chcę dobierać na "sztukę", może ktoś ma sprawdzony układ. Wiadomo że wystarczy użyć wzoru T=R*C tylko czy elementy na schemacie będą wystarczające ? Z obliczeń wynika mi że tak bo według noty katalogowej wystarczy 2,5us. Chyba że się mylę...

Wyglądało by to jak na załączonym obrazku.
Załączniki
układ resetu.png
układ resetu.png (2.51 KiB) Przejrzano 9780 razy

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 19 sty 2015, 14:30

Aby dobrze zrozumieć Twój problem:

1. Pokaż cały schemat, bo bardzo często okazuje się, że prostymi zabiegami można uwolnić jakiś pin.

2. Dlaczego w ogóle musisz resetować mikrokontroler?

3. Pin RESET można zaprogramować tak, by uwolnić jego funkcjonalność zwykłego pinu.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 19 sty 2015, 18:43

Już wymysliłem układ resetu i sprawdziłem w praktyce z wartością 100nF więc zmniejszyłem wartość do 22nF.
dondu pisze:1. Pokaż cały schemat, bo bardzo często okazuje się, że prostymi zabiegami można uwolnić jakiś pin.
Już wykorzystałem wszystkie piny oprócz resetu bo nie chcę ho blokować. Przemyślałem sprawę kilkanaście razy. Wszystkie prawa zastrzeżone :}
dondu pisze:2. Dlaczego w ogóle musisz resetować mikrokontroler?
Bo w bascomie nie mogę wybudzić go inaczej ze stanu IDDLE (POWER DOWN)
dondu pisze:3. Pin RESET można zaprogramować tak, by uwolnić jego funkcjonalność zwykłego pinu.
Owszem można ale nie chcę blokować resetu bo na pewno będę wprowadzał poprawki do programu.
Załączniki
układ resetu.png
układ resetu.png (9.55 KiB) Przejrzano 9708 razy

Wojtek
Moderator
Posty: 2607
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 19 sty 2015, 19:34

Ja jak już, to bym raczej zwierał tranzystorem reset do masy, a kondensator C9 jęsli ma być, to równolegle do C-E, a R7 wypada.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 19 sty 2015, 19:55

Wojtek pisze:Ja jak już, to bym raczej zwierał tranzystorem reset do masy, a kondensator C9 jęsli ma być, to równolegle do C-E, a R7 wypada.
Układ jest jak widać do auta.
Natomiast sam zamysł jest troszkę inny i nie mogę tego zrobić jak wskazałeś Wojtku.. Po włączeniu zapłonu w aucie na bazie tranzystora zawsze jest napięcie które wysteruje ten tranzystor, do tego wejście ADC3 będzie służyło do pomiaru napięcia w instalacji auta.

Według mojego pomysłu dzialanie jest następujące:
- włączamy zapłon
- mimo że na bazie T3 panuje stan który go wysterowuje to kondensator C9 podaje tylko szpilkę i następuje reset procesora czyli wybudzenie ze stanu IDDLE
- zaczyna się program który mierzy napięcie w instalacji auta za pomocą wejścia ADC3
- przy wyłączonym silniku w instalacji panuje napięcie około 12V a na pewno niższe niż 13V więc brak reakcji
- po uruchomieniu silnika napięcie przy sprawnym alternatorze powinno wzrosnąć do 14,4V, ale na pewno powyżej 13,5V
- procesor wykrywając takie napięcie załącza tranzystory wyjściowe
- wyłączamy zapłon
- procesor wykrywa praktycznie zerowe napięcie na wejściu ADC3, następuje faza końcowa wykonywania ostatniego podprogramu i na końcu przejście w stan IDDLE

Ktoś powie że można by zaoszczędzić jedno wyjście procka poprzez sterowanie tylko jednym tranzystorem, ale w moim projekcie potrzebne są dwa tranzystory.

Gdyby miało to służyć tylko do włączania świateł do jazdy dziennej to można to zrobić bez procesora, ale układ ten będzie służył jeszcze do kilku innych rzeczy więc zastosowanie procka jest tu nieodzowne.

Awatar użytkownika
Bogo89
-
Posty: 11
Rejestracja: 20 cze 2014, 10:28
Lokalizacja: G-cko

Post autor: Bogo89 » 19 sty 2015, 20:35

1. Jaką max wartość napięcia zmierzysz za pomocą ADC według noty tego procka ? (tak wiem masz dzielnik rezystorowy)
2. Jak zareaguje wejście reset na skok napięcia na grubo ponad 5V przy braku napięcia +_po_stacyjce ?

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 19 sty 2015, 20:52

Bogo89 pisze:1. Jaką max wartość napięcia zmierzysz za pomocą ADC według noty tego procka ? (tak wiem masz dzielnik rezystorowy)
Jak sam zwróciłeś uwagę jest dzielnik rezystorowy.
Bogo89 pisze:2. Jak zareaguje wejście reset na skok napięcia na grubo ponad 5V przy braku napięcia +_po_stacyjce ?
A gdzie tam napięcie skoczy na grubo powyżej 5V ? Nie bardzo widzę chyba że coś przeoczyłem...

W obwodzie bazy T3 i wejścia ADC3 jest dzielnik i dioda zenera. Wszystko podciągane jest do +5V
Przy braku napięcia ze stacyjki baza T3 zostanie ściągnięta do masy, sam T3 zatkany a C9 rozładowany przez R7.

Awatar użytkownika
Bogo89
-
Posty: 11
Rejestracja: 20 cze 2014, 10:28
Lokalizacja: G-cko

Post autor: Bogo89 » 19 sty 2015, 21:43

matrix pisze:(...) T3 zatkany a C9 rozładowany przez R7.
bym się z tym zgodził jeśli R7 miałby wartość o rząd wielkości większą, a tak na pinie reset, jeśli dobrze widzę wystąpi ok 7V , a nie doczytałem jeszcze czy ten procek to wytrzyma.

I jeszcze jeden szczegół: sterowane urządzenia rozłączasz po GND/0V , Czy jesteś pewien, że 0V nie dostanie się inną droga (w aucie) do sterowanych urządzeń ?

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 19 sty 2015, 21:52

Bogo89 pisze:bym się z tym zgodził jeśli R7 miałby wartość o rząd wielkości większą, a tak na pinie reset, jeśli dobrze widzę wystąpi ok 7V , a nie doczytałem jeszcze czy ten procek to wytrzyma.
Jakim cudem 7V ? Ja naprawdę nie widzę skąd miało by się tam wziąć te 7V.
Akurat obwód R5, T3, C9, R7 sprawdziłem w praktyce tylko zamiast 22nF był 100nF i działania jestem pewien bo sprawdzalem na płytce ewaluacyjnej EVB AVR04.
Bogo89 pisze:I jeszcze jeden szczegół: sterowane urządzenia rozłączasz po GND/0V , Czy jesteś pewien, że 0V nie dostanie się inną droga (w aucie) do sterowanych urządzeń ?
Tak, jestem pewien. Sterowane będą tylko światła do jazdy dziennej podobne do tych z foto niżej a z nich wychodzą trzy przewody izolowane.


Obrazek

Awatar użytkownika
Bogo89
-
Posty: 11
Rejestracja: 20 cze 2014, 10:28
Lokalizacja: G-cko

Post autor: Bogo89 » 19 sty 2015, 22:11

Jak pierw ściągniesz jedną elektrodę C9 do 0V(+0,7~1V) przez T3, to druga zresetuje procka pomimo R10. A jak T3 się zatka pierwsza elektroda C9 przez R7 dostanie +5V, to co się stanie z drugą, pinem RESET i R10 ?

I tak jeszcze patrze że ten dzielnik do ADC3 jest bardzo fajny. I nie wiem jakie wartości z niego chcesz odczytywać, ale raczej nie będą poprawne. Czyli jak chcesz pomierzyć R9 do ( R8 oraz R5 +T3eb) ? Chyba, że T3 jest unipolarny.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 19 sty 2015, 22:34

Bogo89 pisze:Jak pierw ściągniesz jedną elektrodę C9 do 0V(+0,7~1V) przez T3, to druga zresetuje procka pomimo R10.
Według mnie będzie tam dokładnie 0V czyli masa podana na chwilę na pin reset procka, zresetuje go i takie było założenie.

Bogo89 pisze:A jak T3 się zatka pierwsza elektroda C9 przez R7 dostanie +5V, to co się stanie z drugą, pinem RESET i R10 ?
A co ma się stać ? Nic bo tam jest cały czas plus podawany przez R10.


Chyba że ja czegoś nie rozumiem.
Nigdy nie studiowałem elektroniki i nawet moje wykształcenie jest zupełnie inne niż elektroniczne a sama elektronika jest hobby, tak więc nie bardzo wiem do czego dążysz ? Czy moje rozumowanie jest błędne i z góry skazane na niepowodzenie ?
Bogo89 pisze:I tak jeszcze patrze że ten dzielnik do ADC3 jest bardzo fajny. I nie wiem jakie wartości z niego chcesz odczytywać, ale raczej nie będą poprawne.
Tu akurat się zgodzę że wskazania nie będą prawidłowe tylko układ nie ma mierzyć dokładnego napięcia akumulatora tylko wychwycić różnicę napięcia przy zgaszonym i uruchomionym silniku więc nawet nie trzeba pobranego ADC zmieniać na napięcie.

Awatar użytkownika
Bogo89
-
Posty: 11
Rejestracja: 20 cze 2014, 10:28
Lokalizacja: G-cko

Post autor: Bogo89 » 19 sty 2015, 23:30

Też nie studiowałem elektroniki, jestem informatykiem z zacięciem elektronicznym.
A tak wracając do tematu to: gdzie ty masz te twoje 0V przy T3c tam będzie przy tranzystorze bipolarnym minimum 0,7V i max coś ponad 5V tuż po włączeniu.

Nadal sądzę, że R7 powinno mieć wartość większą o rząd wielkości względem R10.

Oraz nadal nie wiem co zamierzasz zrobić ze swoim dziwnym dzielnikiem napięcia przy ADC3 ? (ja bym proponował dodatkowy kondensator przy +_po_stacyjce do GND i od niego wyprowadzić dopasowany rezystor R5 do T3b)

Co do rozumowania moje też może okazać się błędne, dlatego mamy fora elektroniczne żeby się dzielić informacjami, zadawać pytania i ewentualnie korygować lub chociaż naprowadzić zainteresowanych na właściwe tory.
Więc teraz poczekam, aż ktoś bardziej rozsądny/doświadczony/praktykujący się wypowie.

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 20 sty 2015, 0:41

matrix pisze:
dondu pisze:2. Dlaczego w ogóle musisz resetować mikrokontroler?
Bo w bascomie nie mogę wybudzić go inaczej ze stanu IDDLE (POWER DOWN)
Musi się dać uruchomić przerwanie od INT0 lub Pin Change.

Teraz podlicz wszystkie zbędne elementy i zastanów się, czy zamiast kombinować "jak koń pod górkę" nie zastosować nieco większego mikrokontrolera np. ATTINY24, ATTINY44, ATTINY88, ATtiny2313, czy nawet nieśmiertelną ATmega8, bo cena całości projektu będzie taka sama lub o złotówkę większa.

Przestaniesz się natomiast ograniczać i narażać na dziwne sytuacje z działaniem układu, bo środowisko samochodów, to nie jest łatwe miejsce dla tego typu układów.


A tak z innej beczki - warto dbać o dobrą widoczność własnego samochodu przez innych użytkowników dróg, a często tego typu światła do jazdy dziennej nie generują wystarczająco silnego światła lub są zbyt wąskie, by zostały poprawnie zauważone przez innych kierowców, a jak wszyscy wiemy, czasami decydują ułamki sekund.

Dlatego dla własnego bezpieczeństwa światła do jazdy dziennej powinny mieć sporą powierzchnię i odpowiednio silny strumień światła, bo to nie światła dla kierowcy, tylko dla oczu innych niekoniecznie super spostrzegawczych i młodych kierowców. A straty na paliwie należy uznać, za koszt własnego bezpieczeństwa ...

Awatar użytkownika
timo66
Moderator
Posty: 1816
Rejestracja: 20 maja 2006, 19:15
Lokalizacja: 66'15" M.a.R.s.
Kontakt:

Post autor: timo66 » 20 sty 2015, 17:11

Ja dodam od siebie by wspomniany próg ustawić na 13V. Sam się spotkałem z problemem gdy akku był nowy, to poradziło sie przez kilka minut trzymać napięcie na poziomie wspomnianych 13-13,1V.
Mój układ bazował na komparatorze okienkowym - zastosowanie to samo.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 20 sty 2015, 17:59

dondu pisze:Musi się dać uruchomić przerwanie od INT0 lub Pin Change
Od INT0 się da ale akurat mam wykorzystane to wejście do czegoś innego więc chyba przeprojektuję plytkę i wstawię już ATTiny24 kub podobny.
dondu pisze:A tak z innej beczki - warto dbać o dobrą widoczność własnego samochodu przez innych użytkowników dróg, a często tego typu światła do jazdy dziennej nie generują wystarczająco silnego światła lub są zbyt wąskie,
Jeśli chodzi o daylight'y to kupiłem z homologacją, dają naprawdę dużo światła i są duże i szerokie.

Moje są z podwójnymi diodami i z kierunkami, o takie:

Obrazek

timo66 pisze:Ja dodam od siebie by wspomniany próg ustawić na 13V. Sam się spotkałem z problemem gdy akku był nowy, to poradziło sie przez kilka minut trzymać napięcie na poziomie wspomnianych 13-13,1V
Z tym napięciem na poziomie 13,5V to chodzi o to by na pewno daylight'y włączyły się jakieś kilka chwil po tym jak uruchomię silnik. Sprawdzając wzrost napięcia powyżej tego progu będę miał pewność. Jeszcze zobaczę. Może przeprojektuję układ, na pokład wpadnie tiny24 to będzie więcej wejść ADC, może zastosuję dodatkowy potencjometr do regulacji progu zadziałania...

Dziękuję za podpowiedzi, bardzo mi pomagają.

ODPOWIEDZ