logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega88 jak obudzić zmianą stanu pinu Bascom

seradam 05 Maj 2009 22:52 2631 14
REKLAMA
  • #1 6495264
    seradam
    Poziom 17  
    Jestem kiepski z programowania. Wiem , że procek atmega88 ma możliwość wygenerować przerwanie , przy zmianie stanu portu, prawie a może nawet z wszystkich pinów. Mam projekt, w którym procek jest w stanie powerdown, i zmiana stanu na kilku pinach powinna go wybudzić. Program sprawdzi co i jak zrobi co ma i dalej ma wejść w stan powerdown. Dokładnie chodzi mi o zewnętrzne włączenie procesora.
    Piszę w Bascom, a reszta programu jest banalna. Czy może jest jakaś opcja w fusebitach która włącza zewnętrzne budzenie? Zależy mi na czasie dlatego piszę , co nie zmienia faktu, że dużo szukam i czytam.
    Dzięki za pomoc.
  • REKLAMA
  • #2 6495325
    dawid512
    Poziom 32  
    Poczytaj co potrafią końcówki oznaczone jako INT0 itd.
  • #3 6495377
    seradam
    Poziom 17  
    Nie chodziło mi o taką pomoc. Jak włączyć procka atmega88 z dowolnego pinu z użyciem bascoma ?
  • REKLAMA
  • #4 6495439
    dawid512
    Poziom 32  
    Sprawdzając stan tego pinu w przerwaniu, niestety z wykorzystaniem timera.
  • #5 6495518
    crazy_phisic
    VIP Zasłużony dla elektroda
    dawid512 napisał:
    Sprawdzając stan tego pinu w przerwaniu, niestety z wykorzystaniem timera.


    Tylko po co skoro Pin Change jest dostępny w każdym trybie uśpienia a timer praktycznie w żadnym.

    :arrow: seradam, uruchamiasz przerwanie od Pin Change - poprzez wpis do PCICR =&B00000111
    usypiasz układ i czekasz na zgłoszenie przerwania od PCIFR.
  • REKLAMA
  • #6 6495539
    dawid512
    Poziom 32  
    crazy_phisic napisał:
    dawid512 napisał:
    Sprawdzając stan tego pinu w przerwaniu, niestety z wykorzystaniem timera.


    Tylko po co skoro Pin Change jest dostępny w każdym trybie uśpienia a timer praktycznie w żadnym.

    :arrow: seradam, uruchamiasz przerwanie od Pin Change - poprzez wpis do PCICR =&B00000111
    usypiasz układ i czekasz na zgłoszenie przerwania od PCIFR.


    Bardzo ciekawe :)

    A czy przerwanie występuje po logicznej zmianie na dowolnym pinie czy też określonym przez użytkownika?
  • #7 6495595
    crazy_phisic
    VIP Zasłużony dla elektroda
    "The pin change interrupt PCI2 will trigger if any enabled PCINT23..16 pin toggles. The pin change
    interrupt PCI1 will trigger if any enabled PCINT14..8 pin toggles. The pin change interrupt PCI0
    will trigger if any enabled PCINT7..0 pin toggles. The PCMSK2, PCMSK1 and PCMSK0 Regis-
    ters control which pins contribute to the pin change interrupts. Pin change interrupts on
    PCINT23..0 are detected asynchronously. This implies that these interrupts can be used for
    waking the part also from sleep modes other than Idle mode."

    Tłumaczenie zbędne...
  • #8 6498399
    seradam
    Poziom 17  
    Czyli możemy podsumować ?
    Jakie linijki kodu są niezbędne do włączenia zewnętrznego budzenia z dowolnego pinu?
    Dodam, że przerwanie nie jest mi do niczego potrzebne i tylko chcę obudzić procka jak coś się zmieni na portach.
    Większość tematów nie kończy się konkretnymi przykładami, a uważam że powinna. Ja niestety jestem za cieńki :cry:
  • REKLAMA
  • #10 6500067
    seradam
    Poziom 17  
    Widzę , że nie dostanę jednoznacznej odpowiedzi i muszę sam pomęczyć temat. Jak pisałem nie znam się aż tak. Ten link już znam , jednak nie wiem co robią te linijki kodu i jak je poprawnie zastosować. Nie prościej by było napisać krok po kroku co mam zrobić? Czy do obudzenia wystarczy tylko napisać
    Enable Pcint0    
    Enable Pcint1 
    Enable Pcint2

    czy muszę opisać obsługę przerwań itp. Czy nie powinienem gdzieś ustalić na jaką zmianę ma reagować przerwanie? Jak to zrobić? Mi to zajmie kolejne godziny nad kompem, a komuś kto wie kilka minut pisania. Czy ta wiedza jest aż taka tajna?
  • #11 6500113
    crazy_phisic
    VIP Zasłużony dla elektroda
    seradam napisał:
    Widzę , że nie dostanę jednoznacznej odpowiedzi i muszę sam pomęczyć temat. Jak pisałem nie znam się aż tak. Ten link już znam , jednak nie wiem co robią te linijki kodu i jak je poprawnie zastosować. Nie prościej by było napisać krok po kroku co mam zrobić? Czy do obudzenia wystarczy tylko napisać
    Enable Pcint0    
    Enable Pcint1 
    Enable Pcint2

    czy muszę opisać obsługę przerwań itp. Czy nie powinienem gdzieś ustalić na jaką zmianę ma reagować przerwanie? Jak to zrobić? Mi to zajmie kolejne godziny nad kompem, a komuś kto wie kilka minut pisania. Czy ta wiedza jest aż taka tajna?


    Widzisz, wszytko zostało już powiedziane - tylko Tobie nie chce się tego nawet sprawdzić - wolisz czekać na gotowca - nie na tym polega nauka...
  • #12 6500522
    seradam
    Poziom 17  
    Cytat:
    Widzisz, wszytko zostało już powiedziane - tylko Tobie nie chce się tego nawet sprawdzić - wolisz czekać na gotowca - nie na tym polega nauka...
    Trochę się mylisz. Sprawdziłem to co wydawało się słuszne i bez powodzenia. Nie wiem jak to powinno wyglądać i dlatego piszę. Może i przyjemne jest pisanie wkoło, że jesteś leniwy , nie chce ci się czytać itp.
    A tak zamiast temat uporządkować i zamknąć gotowym fragmentem wyjaśnionego kodu, puste posty.
    Zadałem konkretne pytanie
    Cytat:
    Czy do obudzenia wystarczy tylko napisać
    Kod:
    Enable Pcint0
    Enable Pcint1
    Enable Pcint2

    czy muszę opisać obsługę przerwań itp. Czy nie powinienem gdzieś ustalić na jaką zmianę ma reagować przerwanie? Jak to zrobić?

    Wystarczy mi odpowiedź na to pytanie do reszty już dojdę.
    I bardzo proszę nie zarzucać mi lenistwa, bo leniwcem nie jestem...
  • #13 6500656
    pixel7
    Poziom 23  
    crazy_phisic napisał:
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=812276


    W tym linku post nr 8 od góry (Zumka) - masz przykłady w bas i asm!
    Czego jeszcze ci trzeba?
    Mamy ci to przekopiować i wkleić tu?
  • #14 6500748
    seradam
    Poziom 17  
    Nie rozumiem. Po co ktoś zabiera głos jak nie chce odpowiedzieć. Proszę skasować cały temat , bo nic nie wnosi , a nabija tylko punkty za puste posty. Nie lubię dyskutować bez sensu. Zawsze można odpowiedzieć " masz problem rozwiąż go sam , a jak rozwiążesz to doradź innemu , żeby zrobił tak samo."
    Serdecznie dziękuję .
    Te kody ćwiczyłem jak i inne kombinacje. Może koledzy odpowiadający nie wiedzą jak to praktycznie zrobić i dlatego nie chcą odpowiedzieć konkretnie na pytania
    Cytat:
    Czy do obudzenia wystarczy tylko napisać
    Kod:
    Enable Pcint0
    Enable Pcint1
    Enable Pcint2

    czy muszę opisać obsługę przerwań itp. Czy nie powinienem gdzieś ustalić na jaką zmianę ma reagować przerwanie? Jak to zrobić?


    Mam wątpliwości , czy da się obudzić procka z trybu powerdown.
    O tym nikt nie pisze.
    Mam po prostu mało czasu na elektronikę i pisanie programu. Pracuję nad tym tematem w domu, w towarzystwie Natalii 2 lata i Pauliny 11 miesięcy.
    Nie mam komfortowych warunków do pracy. Tematy przerwań są zawiłe. Dlatego zadałem konkretne pytania. Jeżeli nie masz ochoty pomóc nie pisz.

    Dziękuję za udział w dyskusji Adam.
  • #15 6502256
    crazy_phisic
    VIP Zasłużony dla elektroda
    "Note that if a level triggered interrupt is used for wake-up from Power-down, the required level
    must be held long enough for the MCU to complete the wake-up to trigger the level interrupt. If
    the level disappears before the end of the Start-up Time, the MCU will still wake up, but no inter-
    rupt will be generated. "

    :arrow: seraden, przerwanie konfigurujesz w odpowiednim rejestrze - patrz pierwszy mój post (tylko odpowiednio przygotuj dany port - stan wysoki na wyjściu jeśli przyciski zwierają do masy). Po uśpieniu procesora samo zgłoszenie przerwania budzi procesor - możesz zostawić procedurę obsługi pustą (np tylko return) - post zumka. Gratuluje córek ;) ale nie tylko Ty nie masz komfortowych warunków więc się tym nie "wykręcaj".
REKLAMA