Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 14 lis 2024, o 04:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 10 gru 2012, o 13:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Witam szanownych forumowiczów

Po całym wczorajszym dniu spędzonym w poszukiwaniu rozwiązania stwierdziłem że się poddaje. Rozwiązanie problemu może być całkiem banalne ale ja niestety tego nie widzę. Ale do rzeczy:

Zbudowałem sobie taki układ jak mniej więcej na schemacie poniżej:
http://img22.imageshack.us/img22/4178/schematnaforum.png


założenie ma być takie że timer2 ma być taktowany zewnętrznym kwarcem, a układ po wykryciu zasilania ma przejść w tryb power-save a po pojawieniu się zasilania ma się wybudzić. Wykrywanie zaniku zasilania działa, ATmega przechodzi w tryb uśpienia (obserwuje prąd na amperomierzu, przy normalnym trybie pracy jest to wartość rzędu kilkudziesięciu mA, po przejściu w tryb power-save około 20 uA ). Budzić w założeniu ma przerwanie INT0 na porcie PD2.

ATmega32 takowana jest wewnętrznym zegarem 8 MHz.

Oto kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2012, o 13:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wywal to, a w to miejsce zrób DISABLE INTERRUPT INT0.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tutaj zamiast tego daj ENABLE INTERRUPT INT0 i tylko
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A zamiast takich dziwactw:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



napisz ładnie :) (ustaw tryb jaki potrzebujesz)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A kluczowym problemem jest to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wybudzanie działa tylko na "Low level"


Autor postu otrzymał pochwałę

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2012, o 13:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Dokładnie jak mówi kolega wyżej, poniżej uwaga z noty PDF, która znajduje się pod tabelką trybów uśpienia i sposobów wybudzania dla wejść typu INTx

Cytuj:
3. Only INT2 or level interrupt INT1 and INT0.


a ty sobie zrobiłeś:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


więc już widzisz gdzie musisz szukać ;) ... ale weź też pod uwagę te inne sugestie kolegi wyżej ;)


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2012, o 14:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Dzięki Panowie, działa.

Aż mi teraz głupio że nie wpadłem na to, a próbowałem wybudzania zboczem narastającym, opadającym, dowolną zmianą, wprowadzać w uśpienie też robiłem na 2 sposoby. Wogóle za dużo kombinowałem, nawet przez chwilę chciałem spróbować taktowania zewnętrznym kwarcem ale szybko stwierdziłem że to nie jest sposób na rozwiązanie tego problmu.

Zamieszczam poprawiony kod bez zbędnych lini, może się komuś kiedyś przyda:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2012, o 10:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

Witam
Właśnie coś na ten temat w internecie szukałem, więc mi się przyda. Dziękuję.

Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2012, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Witam ponownie

Mimo że problem o którym pisałem zakładając temat został szybko rozwiązany, ale pojawił się następny (jak to zawsz bywa) również związany z tym nieszczęsnym trybem power save. Schemat jak i program trochę ewoluował, a wszystko zmierza w kierunku RTC (albo czegoś podobnego ;) ). Ale do rzeczy, chodzi o to że w programie liczę sobie sekundy które generowane są poprzez podzielenie częstotliwości zewnętrznego kwarcu 32,768 kHz taktującego Timer2. Wyświetlane one są na LCD. I teraz, po przejściu w tryb power save wszystko liczy dobrze, ale już po wybudzeniu licznik przestaje działać i co ciekawe po ponownym uśpieniu zaczyna liczyć dalej kontynuując od wartości na której się zatrzymał. Czyli generalnie mówiąc po starcie w normalnym trybie działa ok ale już po pierwszym uśpieniu działa tylko w trybie uśpienia. Nie mam pojęcia co może być tego przyczyną.

kod prezentuje się tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


schemat: http://img841.imageshack.us/img841/4178/schematnaforum.png

__________ edit:

Sory za zawracanie głowy, już wiem co było tego przyczyną, zakomentowałem linię :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w obsłudze przerwania która czyściła bit zezwalający na przerwanie. A zkomentowałem go dlatego że układ nie chciał mi się budzić, dołożyłem kondensator 22pF do nóżki PD2 i zaczął czasami wstawać :). Generalnie problem jest w tym że musiałem zastosować inwerter tak by załączenie zasilania (stan 1 ) generowało przerwanie (stan 0 ) które budzi układ. Ale teraz o dziwo wszystko działa. Zobaczymy jak długo :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO