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

Jak zaprogramować PIC12F683 do sterowania silnikiem co 4 godziny?

Marlena80 06 Maj 2008 12:17 5145 31
Najlepsze odpowiedzi

Jak najprościej zaprogramować PIC12F683, żeby w trybie oszczędzania energii włączał silnik na 30 sekund dokładnie co 4 godziny?

Najprościej zrobić to na Timer1 z kwarcem zegarkowym 32,768 kHz, usypiać PIC-a i po wybudzeniu zliczać kolejne przerwania, a silnik włączać po osiągnięciu 4 godzin oraz wyłączać po 30 sekundach [#5115377][#5132456] Przy takim podejściu Timer1 budzi procesor ze snu, więc Timer2 nie jest tu dobrym wyborem do pracy w sleep [#5132456][#5114567] Po wybudzeniu z trybu sleep program jest kontynuowany od następnej instrukcji po `SLEEP`, a nie od początku `MAIN` [#5132456] Do tak prostego zadania wystarczy assembler, choć można to też zrobić w C; w threadzie padła propozycja: Timer1, przerwanie co 2 s i zliczanie 15 wybudzeń do 30 s oraz 7200 do 4 h, z załączaniem MOSFET-a przy 7185 i wyłączaniem przy 7200 [#5111162][#5111169][#5115377]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 5111107
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    Czesc.

    Mam zrobic urzadzenie na PICu tym oto:
    PIC12F683

    ktore dokladnie co 4 godziny, wladza urzadzenie na 30 sekund.

    Silniczek na wyjsciu bedzie sterowany z mosfeta. Mosfet poprzez nozke PICa.

    Jestem zupelna nowicjuszka. Co mi jest potrzebne i w jakim jezyku to najlpeij robic? Pozdrawiam

    Marlena
  • Pomocny post
    #2 5111162
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    ten pic jest tak prosty, a wybor kompilatorow tak ograniczony (zerowy?), co wiecej - projekt tak prosty - ze najlepiej napisac te kilka linijek w assemblerze, bo to nic specjalnego. jeden timer i gotowe.

    0x41 0x56 0x45!!
  • Pomocny post
    #3 5111169
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Można to zrobić w każdym języku i w którym dokładnie będzie zależało jedynie od tego, czy podstawy któregoś z języków opanowałaś. Najłatwiej bedzie zapewne w c ale i w asemblerze nie będzie to zbyt skomplikowane. Prostym rozwiązaniem będzie użycie timera do odmierzania czasu a w pętli głównej sprawdzanie wartości zmiennej incrementowanej przez ten timer i sterowanie portem mikrokontrolera. Zabieg potrzebny gdyż sam timer nie odliczy nam takiego długiego czasu chyba że na "zegarkowym" kwarcu...
  • #4 5111205
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    @freddie Chopin
    PDF do tego PICa zajmuje 174 strony, wiec chyba az tak proste to to nie jest.

    Wybor kompilatorow ograniczony, zerowy? Moze prosic o bycie nieco mniej tajemniczym?

    0x41 0x56 0x45!! - co to oznacza?

    @kamyczek
    Ten PIC ma uzywac jak najmniej pracu, czy da sie go budzic co 4 godziny?

    Mam srednie doswiadczenia w PASCALU, bardzo podstawowe w C, stusunkowo duze w "asemblerze" na PLD do Siemensa Simatic S7, wiec nie wiem czy to mozna porownac.
  • #5 5111255
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Wszystko rozbija się o to jak dokładne ma być 4 godziny i jak dokładne ma być 30 sekund.
    Osobiście nie znam sie na PIC'ach ale tu jest coś do poczytania na temat usypiania i budzenia : http://ww1.microchip.com/downloads/en/AppNotes/00879D.pdf

    Dodano po 1 [minuty]:

    Czy to jest project na studia?
  • #6 5111270
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Marlena80 napisał:
    @freddie Chopin
    PDF do tego PICa zajmuje 174 strony, wiec chyba az tak proste to to nie jest.

    pdf do dowolnego pic24 zajmuje 700, a nic w nim nie ma, bo wszystko jest na jakichs 1500 stronach manuala, wiec uwierz - 174 strony to jest nic [;

    Cytat:

    Wybor kompilatorow ograniczony, zerowy? Moze prosic o bycie nieco mniej tajemniczym?

    osobiscie nie znam zadnego kompilatora C dla PIC12, dlatego zostalbym przy assemblerze, gdyz jest on banalny. choc pewnie mikroC albo CCS obsluguje ten procesor.

    Cytat:

    0x41 0x56 0x45!! - co to oznacza?

    cos napewno, ale nic co by cie interesowalo [;

    0x41 0x56 0x45!!
  • Pomocny post
    #7 5111274
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Jeśli tak to można go budzić przerwaniem od licznika, sprawdzać warunki i uruchamiać układ na czas pracy urządzenia w przeciwnym wypadku usypiać go ponownie. Nie wiem czy jest tryb uśpienia ,który nie spowoduję po jego wprowadzeniu wyłączenia tranzystora wiec możliwe że w czasie pracy układy będzie musiał on funkcjonować bez usypiania. Dla oszczędzania prądu najlepiej używać "wolnego oscylatora i spać ile sie da ;). Co do języka asembler albo C.
  • #8 5111326
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2820
    Freddie musisz chyba dodać 0x43 0x65 0x7A 0x61 0x72 :)
  • #9 5111341
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    @Dr_DEAD
    To jest projekt do pracy, nie jest to moja dzialka, ale ktos musi to zrobic.
    Powiedzmy ze 20-30 minut po 5 latach.

    @freddie Chopin
    O jakim manualu mowisz?
    Ok, zrobie to w asemblerze (jesli zrobie).
    To po to to piszesz? Jesli cos mowisz to mow to konca, sugerowanie w stylu "i tak tego nie zrozumiesz" troszke mnie nie kreci.

    @kamyczek
    Czyli licznik moze wybudzic uklad? tak?
    Jakie mam sprawdzac warunki? Z czym mam porownywac warunki?

    Tranzystor ma byc tylko wlaczony (silnik wlaczony) podczas 30 sekund.
    Pozostale 3h, 59 minut i 30 sek, silnik i mosfet maja byc wylaczony.

    Czy masz na mysli to ze jak uC spi to piny wisza w powietrzu? Sadze ze maly rezystor sprowadzi mosfety do ziemi podczas spania.

    Jak wolny oscylator proponujesz?
    Czy timer liczy tak jak licznik na technice cyfrowej?
    Od np 000000 do 1111111 i wtedy nastepuje przebudzenie gdy sa same jedynki? (sorry za glupie pytanie, dopiero zaczynam czytac pdf`a)

    Mowisz C?
    Ok, jaki kompilator?
  • #10 5111378
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Do pic-ów MPlab flagowy kompilator , ze strony microchipa timer może liczyć od zadanej wartości do przepełnienia lub całą pojemność licznika osobiście dążyłbym do takiego rozwiązania w którym przerwania występują dokładnie co 30 s co spowoduje konieczność odliczenia 480 przerwań w ciągu 4h i np 479 załaczy układ a 480 wyłączy tranzystor i zeruje zmienną. Można również potraktować to w taki sposób że zerowy stan zmiennej załącza tranzystor a każdy inny wyłącza . Łatwiej sprawdzać taki warunek.
  • #11 5111506
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Jest taka podstawowa zasada, że:

    NAJPIERW czytasz pdfa...
    ...a POTEM pytasz na elce. Nie odwrotnie....

    Dodano po 1 [minuty]:

    Jesli znasz chociaż podstawy C to wiesz jakie liczby zaczynają sie na 0x....:D [moge podpowiedzieć: nie binarne i nie dziesiętne...]

    Jak uC śpi to piny pozostają w tych samych stanach co wtedy jak nie spał bo wyobraź sobie istnienie zatrzasków na porcie....:D
    Przykład:

    Stawiasz na stole kubek i czytasz książke. Jak idziesz spać to kubek nie znika, a stoi dalej...:D
  • #12 5111513
    piti___
    Poziom 23  
    Posty: 623
    Pomógł: 67
    Ocena: 9
    Witam

    W PIC16/18 timery podczas uśpenia są wyłączone. Podejrzewam że w PIC12 jest tak samo. Działa wyłącznie watchdog jeśli jest włączony. Przepełnienie watchdoga jeśli układ jest uśpiony powoduje obudzenie i wykonywanie programu znajdującego się po komendzie sleep.

    Stany wyjść z procesora są utrzymywane podczas uśpienia.
  • #13 5111549
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Zerknołem do manuala procka i kontynułując myśl kamyczka mamy:
    Kwarc zegarkowy podłączony pod piny OSC1 OSC2. Procesor jest budzony 16-sto bitowym Timerem1 (bo tylko on może budzić). Z tego co mi się przypomina to 16-sto bitowy timer z kwarcem zegarkowym 32.768kHz da nam przerwanie co 2s. W przerwaniu tym wstarczy zinkrementwać 16-sto bitową zmienną i sprawdzić czy już mineło 4 godziny, a jeżeli tak to wiadomo co robić.
  • #15 5111621
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Freddie Chopin napisał:
    a preskaler?

    Zakładam że to pytanie do mnie skierowane :-).
    Preskaler oczywiście jest i można by uzyskać interwały 2s*2, 2s*4, 2s*8 ale takie interwały odrobinke komplikują odliczanie 30s.
  • #16 5111802
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Szczególnie jak wpiszesz wartość początkową do timera i uzyskasz 15s Chyba to wykonalne jest .
    A tak na marginesie Atmel ma preskaler max 1024 . Co daje możliwość uzyskania przerwania co 34 minuty !!!.
  • #17 5111867
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    kamyczek napisał:
    Szczególnie jak wpiszesz wartość początkową do timera i uzyskasz 15s Chyba to wykonalne jest .

    Pewnie tak, ale nie doczytałem jak jest z synchronizacją bo przecież CPU i Timer będą chodziły asynchronicznie a wtedy bardzo łatwo zgubić takt z rezonatora kwarcowego, lepiej jest jak licznik sam sie przeładuje na 0. Oczywięcie ktoś może powiedzieć że to już "Apteka", ale zawsze lepiej tworzyć dopracowany kod.
    Trzeba by było doczytać wszystko żeby ładować Timera wartością początkową.
  • #18 5111941
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Oj kolega chyba nie zna zbyt dobrze zagadnienia liczników . Więc napisze kilka słów wpisując podczas przerwania do timera wartość początkową skraca się czas odliczania o taką liczbę cykli jaką wpiszemy wobec tego możemy zliczyć np 15 sek. Co już ułatwi zabawę. Najbardziej optymalne było by generowanie przerwań co 30 sek tu niestety jest to ciężkie do zrealizowania. Co do trybów uśpienia nie znam tego pica na tyle żeby powiedzieć co zasypia co nie ...
  • #19 5112337
    mkaczor
    Poziom 16  
    Posty: 97
    Pomógł: 13
    Mam zainstalowany MPLAB IDE v.7.62 pobrany z www.microchip.com do ktorego firma CCS dolaczyla kompilator C miedzy innymi dla PIC12F683. Kompilator ma narzucone jakies ograniczenia ale z tym zadaniem z pewnoscia sobie poradzi. W katalogu \Program Files\Microchip\Third Party\PICC\Examples mozna znalezc wiele przykladowych programow napisanych w jezyku c dla tego kompilatora.

    Pomylilem sie. Wraz z MPLAB instalowany jest kompilator PCB (dla PIC16F683 wymagany jes kompilator PCM). Mozna za to zastosowac np. PIC12F508 lub PIC16F509 ktorych wyprowaczenia rozmieszczone tak samo jak w PIC12F683 a sa obslugiwane przez kompilator PCB.
  • #20 5113503
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    kamyczek napisał:
    Oj kolega chyba nie zna zbyt dobrze zagadnienia liczników . Więc napisze kilka słów ...

    Zmusiłeś mnie do rozwinięcia tematu ;-).
    kamyczek napisał:
    ...wpisując podczas przerwania do timera wartość początkową skraca się czas odliczania o taką liczbę cykli jaką wpiszemy wobec tego możemy zliczyć np 15 sek...

    To akurat jest dla mnie oczywiste i nie o tym był mój wcześniejszy post, a był on o tym, że:
    Timer aby obudzić CPU musi działać w trybie asynchronicznym, a tryb asynchroniczny stwarza problemy z czytaniem i zapisywaniem wartości do timera, na potwierdzenie tego mam wycinek z manuala:
    Jak zaprogramować PIC12F683 do sterowania silnikiem co 4 godziny?
    Manual zaleca aby podczas Timera, sam Timer był zatrzymany, więc co prawda z dużą dokładnością możemy odliczyć 15 sekund ale nie możemy z dużą dokładnością otrzymywać przerwania co 15 sekund bo trzeba zatrzymywać i startować Timer co powoduje gubienie taktów rezonatora kwarcowego. Cytat z manuala:
    Jak zaprogramować PIC12F683 do sterowania silnikiem co 4 godziny?
    kamyczek napisał:
    ... Co już ułatwi zabawę...

    Wcale nie jest tak łatwo jak by się wydawało i widać że jest kilka pułapek w które można wpaść. Oczywiście taki kod z błędami może działać całkiem dobrze i nawet dokładność odmierzania czasu może być zadowalająca ale równie dorze może to być tykająca bomba.[/url]
  • #21 5113651
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    po pierwsze przy tak "zapracowanym" picu zegar główny może pracować z częstotliwością 32,768KHz więc o zegarze asynchronicznym mowy tu nie ma. Co do dokładności to od tego ma kolega w symulatorze licznik cykli zegara systemowego . Te same instrukcje zawsze zajmują tyle samo czasu więc dodanie pewnej liczby cykli do wpisywanej wartości początkowej na wykonanie obsługi przerwania jest sprawą dość łatwą nawet jeśli przerwanie zawiera rozgałęzienie zawsze w krótszym jego warunku można dopisać kilka nop-ów i będzie tyle samo cykli.
  • #22 5114567
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    Marlena80 - powiedz cos wiecej o samym ukladzie - w koncu to Tobie mamy pomoc a nie tylko przescigac sie w pisaniu tego co kto wie. Wszyscy tu sie rozpisuja o trybie SLEEP mikrokontrolera (ktory rzeczywiscie utrudnia zycie - nie mozna wykorzystac np. idealnego do tego zadania timera 2 z autoprzeladowaniem). Tryb SLEEP ma jednak wtedy sens, jesli urzadzenie jest np. zasilane bateryjnie, by oszczedzic baterie. A ja zaloze sie, ze Twoje urzadzenie zasilane bateryjnie nie jest, tylko pewnie przez jakiegos LM7805, ktory sam z siebie ciagnie 10 razy wiecej pradu niz uspiony uC. Jaki wiec sens debaty o trybie SLEEP? Tym bardziej, ze musisz sterowac jakims silnikiem, wiec na pewno uzywasz zasilacza a nie baterii. Napisz to! I po prostu uzyj Timera 2, w przerwaniu po jego przepelnieniu inkrementuj sobie jakas mala zmienna i gdy zliczy ona 30 sekund to dzialaj.
    Przykladowo dla fosc=32768Hz, prescaler=16, reload=160, postscaller=16 otrzymasz przerwanie co 5 sekund. Zliczasz do 6 - masz pol minuty, zliczas do 2874 - masz 3h59m30s. Albo nawet wykorzystaj wewnetrzny oscylator jesli nie jest krytyczne superdokladne odliczanie bo pewnie i nie jest. No i napisz cos wiecej jesli chcesz konkretnej pomocy.

    BF
  • #23 5114697
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    kamyczek napisał:
    .. zegar główny może pracować z częstotliwością 32,768KHz więc o zegarze asynchronicznym mowy tu nie ma..

    Jak zaprogramować PIC12F683 do sterowania silnikiem co 4 godziny?
  • #24 5114800
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    Bateria.
    Co 4 godziny nalezy wlaczac silnik na 30 sekund.

    Mam malutko pradu, bardzo malutko. Bateria ma wytrzymac 6 lat.

    PIC, mosfet, silniczek, to wszystko.

    Jako bateria bedzie 2x (lub 4x) AA prawdopodobnie, silniczek ma brac w okolicach 4mA (sa takie).

    Mosfet dlatego ze prad rozruchowy silniczka to 160mA co uwali pin na PICu bo ona da max 20mA.

    Nie obliczajcie mi prosze baterii, bo nie potrzebuje z tym pomocy, natomiast z PIC ami tak.
  • #25 5114846
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Marlena80 napisał:
    Bateria.
    Co 4 godziny nalezy wlaczac silnik na 30 sekund.
    Mam malutko pradu, bardzo malutko. Bateria ma wytrzymac 6 lat.
    PIC, mosfet, silniczek, to wszystko.

    No to trzeba określić jaki prąd pobiera silniczek. Na podstawie tego można określić jaka bateria nas interesuje i ile prądu pozostaje dla reszty układu. Zapewne jest to już zrobione , ale jakoś autor szczędzi nam tych informacji.

    Dodano po 1 [minuty]:

    no tak spóźniłem sie ze swoimi pytaniami ;-)

    Dodano po 3 [minuty]:

    czyli pasowałoby aby reszta układu nie pobirała więcej 8uA to wtedy zużycie energii przez silniczek i resztę układu będzie podobne.
  • #26 5114899
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    Dr_DEAD napisał:
    Marlena80 napisał:
    Bateria.
    Co 4 godziny nalezy wlaczac silnik na 30 sekund.
    Mam malutko pradu, bardzo malutko. Bateria ma wytrzymac 6 lat.
    PIC, mosfet, silniczek, to wszystko.

    No to trzeba określić jaki prąd pobiera silniczek. Na podstawie tego można określić jaka bateria nas interesuje i ile prądu pozostaje dla reszty układu. Zapewne jest to już zrobione , ale jakoś autor szczędzi nam tych informacji.

    Dodano po 1 [minuty]:

    no tak spóźniłem sie ze swoimi pytaniami ;-)

    Dodano po 3 [minuty]:

    czyli pasowałoby aby reszta układu nie pobirała więcej 8uA to wtedy zużycie energii przez silniczek i resztę układu będzie podobne.


    Ten PIC bierze 60nA w czasie spania.
    Chcialabym wobec tego wykozystac timer1.
  • #27 5114926
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    No niestety wiecej niz 60 nA...

    BF
  • #28 5115377
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Marlena80 napisał:

    Chcialabym wobec tego wykozystac timer1.

    No to do dzieła. Generalnie upierałbym się przy najprostrzym rozwiązaniu czyli: Timer1 zliczający impulscy z kwarca zegarkowego 32.786kHz, Timer przy przepełnieniu budzi procesor co 2 sekundy. Procesor zlicza ilość obudzeń (15 obudzeń to 30 sekund, 7185 obudzeń to 3:59:30 ).
    Czyli przy obudzeniu 7185 załącza Mosfeta, przy 7200 wyłącza Mosfeta i resetuje ilość obudzeń do 0 i tak w kółko.
  • #29 5115516
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    Albo zastosowac preskaler 8 i zliczac do 40960 - wtedy przerwanie bedzie co 10 sekund (oszczednosc baterii). Trzeba bedzie tylko wyliczyc sobie dokladnie ile cykli zajmie reinicjalizacja timera po tych 10 sekundach aby uzyskac dokladne 10 sekund. Zadne problemy sie nie pojawia z timerem, jezeli go wczesniej wylaczymy. A dokladnie tez wiemy ile cykli zuzyjemy przy wylaczonym timerze - po wzieciu tego pod uwage dostaniemy dokladnie odmierzone 10 sekund.

    BF
  • #30 5132076
    Marlena80
    Poziom 10  
    Posty: 51
    Ocena: 1
    Bigfoot napisał:
    Albo zastosowac preskaler 8 i zliczac do 40960 - wtedy przerwanie bedzie co 10 sekund (oszczednosc baterii). Trzeba bedzie tylko wyliczyc sobie dokladnie ile cykli zajmie reinicjalizacja timera po tych 10 sekundach aby uzyskac dokladne 10 sekund. Zadne problemy sie nie pojawia z timerem, jezeli go wczesniej wylaczymy. A dokladnie tez wiemy ile cykli zuzyjemy przy wylaczonym timerze - po wzieciu tego pod uwage dostaniemy dokladnie odmierzone 10 sekund.

    BF


    LIST=12F683
    #include <p12f683.inc>
    ORG	00
    INITIALIZE;
    
    START	BCF STATUS,RP1;		BANK 1
    	MOCLW B`00000000`;
    	MOVWF TRISA;		OUTPUT
    	CLRF ANSEL ;		digital O
    	BCF STATUS, RP0;	BANK 0
    	BCF GPIO,GP0;		INITIALIZING PIN 0 (MOSFET DRIVER)
    	CLRF 0X7F;
    	CLRF 0X20;
    
    MAIN	BSF 0X20;		GATE OR OUTPUT SET TO LOW
    
    	BTFSC 0X7F,7;		CHECKING OR INPUT, IF BIT = 0 -> WE SKIP NEXT INSTRUCTION, IF BIT = 1 DO
    	BSF 0X20, 0;		SET OUTPUT OF OR
    
    	BTFSC 0X7F,6;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,5;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,4;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,3;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,2;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,1;
    	BSF 0X20, 0;
    
    	BTFSC 0X7F,0;
    	BSF 0X20, 0;
    	
    	BTFSS 0X20,0;		CHECKING OUTPUT OF OR
    	BSF GPIO, GPO;		SWITCH ON MOTOR IF OUTPOT OF OR IS 1
    
    	
    
    
    	GOTO MAIN;


    To jest moj kod. To co stanowi wiekszosc to zrobiona przeze mnie 8 wejsciowa bramkna OR, jek na wejsciu sa same zera, to na wyjsciu tez, i wtedy wlaczam silniczek.

    Wyjscie z Timera barde przepisywac do rejestru 0x20 co 3 cykl (wtedy osiagne 30 sekund).

    Pytanie jest ktory timer mam wykorzystac. Czy moge uzyc timer1? Chodzi o oszczednosc energi (bateria).

    I najwazniejsze pytanie na ktore nie ma odpowiedzi w pdfie.
    Gdzie jestesmy w programie jak timer wybudzi nas z trybu sleep.
    Czy w nastepnej linijce po sleep. Czy w MAIN?

    Prosze o pomoc, jak to widzicie?

Podsumowanie tematu

✨ Dyskusja dotyczy zaprogramowania mikrokontrolera PIC12F683 do sterowania silnikiem w cyklu: włączenie co 4 godziny na 30 sekund. Proponowane rozwiązania obejmują wykorzystanie Timer1 z kwarcem zegarkowym 32,768 kHz do generowania przerwań co 2 sekundy, co pozwala na precyzyjne odmierzanie czasu poprzez zliczanie przerwań. Timer1 jest jedynym timerem w PIC12F683 zdolnym do wybudzania procesora ze stanu uśpienia (SLEEP), co jest istotne dla oszczędzania energii, zwłaszcza przy zasilaniu bateryjnym. Dyskutowano o trybach uśpienia, zachowaniu stanów wyjść podczas SLEEP oraz konieczności stosowania preskalera i wartości początkowych timera dla dokładnego odmierzania czasu. Języki programowania sugerowane to asembler lub C, z uwagi na prostotę zadania i ograniczoną dostępność kompilatorów dla PIC12F683. Wskazano, że kompilator CCS lub mikroC mogą obsługiwać ten mikrokontroler, a MPLAB IDE jest popularnym środowiskiem. Autor projektu ma ograniczone doświadczenie i prosi o konkretne wskazówki dotyczące implementacji. Przykładowy kod asemblerowy pokazuje implementację 8-wejściowej bramki OR do sterowania wyjściem MOSFET, który załącza silnik. Podkreślono, że do sterowania MOSFET-em konieczne jest zabezpieczenie przed uszkodzeniem pinu PIC-a ze względu na prąd rozruchowy silnika. Całość ma działać na baterii AA z bardzo niskim poborem prądu w stanie uśpienia (rzędu nA). Wskazano również na konieczność dokładnego odczytu i konfiguracji timerów oraz na potencjalne pułapki związane z asynchronicznym trybem pracy timera i synchronizacją z CPU.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA