Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

MSP430 - mruganie diodami

panicz74
-
-
Posty: 7
Rejestracja: 14 gru 2014, o 17:16

MSP430 - mruganie diodami

Postautor: panicz74 » 13 sty 2015, o 12:19

Dane jest zadanie:

Kod: Zaznacz cały

Ćwiczenie Nr 3 /Elektrotechnika Napisać program dla mikrokontrolera MSP430FG4618, który w przerwaniu od Basic Timera – mruga jedną z diod LED podłączonych do portu P2 (P2.1 i P2.2). Czas pomiędzy zmianą stanu na diodach LED to: 0,1 s 0,2 s 0,3 s 0,4 s 0,55 s 0,6 s 0,7 s 0,8 s 0,9 s 1,05 s 1,1 s 1,2 s 1,3 s 1,4 s Dodatkowo jeden z mikrostyków podłączonych do portu P1 (P1.0 lub P1.1) ma za zadanie włączanie lub wyłączanie mrugania diodą. Do tego celu należy wykorzystać przerwanie zewnętrzne od portu P1. W programie głównym należy przejść do trybu oszczędzania energii LPM3. Przykładowy program: msp430xG46x_P1_02.c i msp430xG46x_bt_01.c
Tyle kodu udało mi się napisać. Linia 13 (BTCL) to opóźnienie mrugania co 8ms. W połączeniu z linią 27-34 daje nam opóźnienie co 0,8s.

Kod: Zaznacz cały

#include <msp430xG46x.h> // instrukcja ta poleca włączyć zbiór definicji rejestrów procesora MSP int i=0; void main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal P1DIR &=0xFE; P2DIR |= 0x01; // P2.1 output P2OUT |= 0x01; BTCTL=BT_ADLY_8; IE2 |= BTIE; _BIS_SR(LPM3_bits + GIE); // LPM4, enable interrupts } // Basic Timer Interrupt Service Routine #pragma vector=BASICTIMER_VECTOR __interrupt void basic_timer_ISR(void) { i=i+1; if(i==100){ P2OUT ^= 0x02; i=0;} // Toggle P5.1 }
Pytanie brzmi: Jak dopisać pętle do tego programu jeśli wciskam mikrostyk 2.1 i dioda zaczyna mrugać, jeśli drugi raz wciskam mikrostyk dioda przestaje mrugać???? Będę bardzo wdzięczny za pomoc

Awatar użytkownika
Łukasz Krysiewicz
-
-
Posty: 143
Rejestracja: 8 cze 2011, o 20:03

Re: MSP430 - mruganie diodami

Postautor: Łukasz Krysiewicz » 29 sty 2015, o 10:34

najprościej to będzie tak

gdy przycisk on to to włacz przerwania od basic timera IE2 |= BTIE;
gdy przycisk on po raz drugi to wyłacz przerwania od basic timera


P.S.1.
pamiętaj o zerowaniu zmiennej globalnej "i" oraz przy wyłaczeniu migania o zerowaniu stanu diody

P.2.2.
obsługe przycisku robisz w trybie przerwań, a w procedurze obsługi przerwania dodajesz taki wpis:

if(IE2 & BTIE == BTIE) // dioda miga
{
IE2 &= ~BTIE; // wyłaczenie przerwań od basic timera
// wyzerowanie diody
}
else
{
IE2 |= BTIE; // właczenie przerwań od basic timera
i = 0; // wyzerowanie licznika
}

Wróć do „Pozostałe mikrokontrolery (PIC, MSP430, PSoC, 8051 ...)”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości