Innholdsfortegnelse:
- Trinn 1: Innsikt
- Trinn 2: Portinitialisering
- Trinn 3: Ultra Low Power
- Trinn 4: TIMER
- Trinn 5: Lav strømmodus
- Trinn 6: ISR-timer
- Trinn 7: Maskinvareavbrudd
- Trinn 8: ISR- Tilbakestill/ trykknapp
- Trinn 9: KODE
- Trinn 10: Referansekode
Video: MSP430 sekunder teller: 10 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Velkommen! Making of Seconds Counter: Bruke CCStudio 8 og MSP430F5529 for prosjektet.
C -språk for å kode mikrokontrolleren. Bruke moduser for lav effekt, tidtakere og avbrudd. Utgangen vises via 7 segmenter.
Trinn 1: Innsikt
La oss begynne!
Initialiser watchdog -timeren til OFF -tilstand ved å bruke det nødvendige passordet for watchdog -timeren (Det hjelper å holde kontroll på uendelige sløyfer, og holder prosessoren trygg).
#inkludere
/** * main.c */
int main (ugyldig)
{
WDTCTL = WDTPW | WDTHOLD; // stopp vaktbikkertimer
retur 0;
}
Trinn 2: Portinitialisering
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 forteller oss at hele PORT-3 er initialisert for å ta innganger.
P3DIR | = 0xFF forteller oss at hele PORT-3 er initialisert for å gi utganger.
P3DIR | = 0x01 bare pinnen P3.0 initialiseres til utgang i PORT-3. Dette følger en heksadesimal portkartlegging.
P4REN | = 0xFF, dette indikerer at pinnene på PORT-4 har trekk opp/ned motstander aktivert.
For å velge dem mellom Pull UP eller Pull DOWN, brukes instruksjonen P $ OUT | = 0xFF.
Hvis 0xFF brukes konfigureres de som Pull UP -motstander, og hvis 0x00 konfigureres som Pull DOWN.
Trinn 3: Ultra Low Power
MSP430F5529 lar oss redusere strømtap fra prosessoren. Dette er nyttig i frittstående applikasjoner.
Dette krever at alle pin eller porter deklareres for utdata.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
Trinn 4: TIMER
Bruk av tidtaker for forsinkelsesgenerering på ett sekund. Denne bruker SMCLK på 1MHz, og timeren kjøres også i modus for lav strøm (i neste trinn, etter at tellingen ble avbrutt fra LPM). Denne prosessen sparer strøm og belastning på prosessoren
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
Verdiene er 999, ettersom det tar en telle til for å rulle tilbake til null i timeregisteret.
Trinn 5: Lav strømmodus
_BIS_SR (LPM0_bits+GIE);
Dette muliggjør General interrupt Enable (GIE), og setter CPU'en til LPM0, der MCLK som støtter cpu er av, og SMCLK og ACLK -kjøring som holder timeren i gang. så vi kan se at CPU er slått av, der ved å spare strøm.
Trinn 6: ISR-timer
#pragma vektor = TIMER0_A0_VECTOR
_interrupt void Timer_A (void)
{
z ++;
hvis (z> forsinkelse)
{
P3OUT = kode [x];
P6OUT = kode1 [y];
x ++;
hvis (x == 10)
{
x = 0;
y ++;
}
hvis (y == 6)
y = 0;
z = 0;
}
}
pragma vektor er for ISR representasjon i C embd.
kode [x] og kode1 [y] er matrisene som inneholder utgangsverdier for de to syv segmentene, for å vise 60 sekunders teller.
Trinn 7: Maskinvareavbrudd
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
Her deklareres P2.1 som en maskinvareavbrudd. Hvis knappen trykkes, tilbakestilles telleren til verdien.
resten programmet er skrevet inne i ISR for dette avbruddet.
Trinn 8: ISR- Tilbakestill/ trykknapp
#pragma vektor = PORT2_VECTOR
_interrupt void port_2 (void)
{
P2IFG & = ~ BIT1;
x = 0; y = 0;
P3OUT = kode [x];
P6OUT = kode1 [y];
v ++;
for (i = 0; i
{
P1OUT | = BIT0; //P1.0 = veksle
_forsinkelse_sykler (1048576);
P1OUT & = ~ BIT0; // P1.0 = veksle
_forsinkelse_sykler (1048576);
}
Denne ISR nullstiller telleren, og teller hvor mange ganger resten ble trykket.
(Her vises displayet via led -veksle, kan også bruke en annen matrise og tidtaker for å vise disse verdiene som utgang i 7 segmenter).
Trinn 9: KODE
#inkludere
#definere forsinkelse 1000
char code = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
flyktig usignert int x = 0, y = 0, z = 0;
flyktig usignert int v = 0, i = 0;
void main ()
{
WDTCTL = WDTPW | WDTHOLD; // stopp vaktbikkertimer
P7DIR | = 0xFF;
P7OUT | = 0x00;
P8DIR | = 0xFF;
P8OUT | = 0x00;
P4DIR | = 0xFF;
P4OUT | = 0x00;
P5DIR | = 0xFF;
P5OUT | = 0x00;
P1DIR = 0xFF;
P3DIR = 0xFF;
P6DIR = 0xFF;
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
_BIS_SR (LPM0_bits+GIE);
}
// Timer A0 avbryter servicerutinen
#pragma vektor = TIMER0_A0_VECTOR
_interrupt void Timer_A (void)
{
z ++;
hvis (z> forsinkelse)
{
P3OUT = kode [x];
P6OUT = kode1 [y];
x ++;
hvis (x == 10)
{
x = 0;
y ++;
}
hvis (y == 6)
y = 0;
z = 0;
}
}
// Maskinvareavbruddsrutine
#pragma vektor = PORT2_VECTOR
_interrupt void port_2 (void)
{
P2IFG & = ~ BIT1;
x = 0;
y = 0;
P3OUT = kode [x];
P6OUT = kode1 [y];
v ++;
for (i = 0; i
{P1OUT | = BIT0; // P1.0 = veksle
_forsinkelse_sykler (1048576);
P1OUT & = ~ BIT0; // P1.0 = veksle
_forsinkelse_sykler (1048576);
}
}
Trinn 10: Referansekode
GitHub -depot
Anbefalt:
Teller og kontroller for MicroBit -rom: 4 trinn
MicroBit Room Occupancy Counter and Controller: Under en pandemi er en måte å redusere overføringen av viruset på å maksimere fysisk avstand mellom mennesker. I rom eller butikker vil det være nyttig å vite hvor mange mennesker som er i det lukkede rommet til enhver tid. Dette prosjektet bruker et par
Arduino -teller som bruker TM1637 LED -skjerm: 7 trinn
Arduino -teller som bruker TM1637 LED -skjerm: I denne opplæringen lærer vi hvordan du lager en enkel siffer -teller ved hjelp av LED -skjerm TM1637 og Visuino. Se videoen
Hvordan lage DIY Arduino 30 sekunder vasketimer, STOPP COVID -SPRIDNING: 8 trinn
Hvordan lage DIY Arduino 30 sekunder vasketimer, STOPP COVID -SPRIDNING: hei
Clap Switch (40 klapper på 5 sekunder): 4 trinn (med bilder)
Clap Switch (40 Claps in 5 Second): Clap Switch har muligheten til å slå PÅ/AV enhver elektrisk komponent ved å koble utgangen til kretsen til en relébryter. Her skal vi lage en klappbryter med få komponenter med veldig gode forklaringer. Sammenlignet med alle andre klappbrytere
Drep alle data på en CD/DVD på 5 sekunder eller mindre: 3 trinn
Drep alle data på en CD/DVD på 5 sekunder eller mindre.: Drep alle data på en CD/DVD på 5 sekunder eller mindre. Hvorfor vil du gjøre dette: ++ Ødelegg gamle sikkerhetskopier på noen få år ++ Husk deg brent den spesielle soverommet til DVD ++ Din eks vil ha CD/DVD -en tilbake. ++ MORTE MED AOL -DISK !!!! LOL