Inhoudsopgave:
- Stap 1: Inzicht
- Stap 2: Poortinitialisatie
- Stap 3: Ultra laag vermogen
- Stap 4: TIMER
- Stap 5: Energiezuinige modus
- Stap 6: ISR-timer
- Stap 7: Hardware-onderbreking
- Stap 8: ISR- Reset / Drukknop
- Stap 9: CODE
- Stap 10: Referentiecode
Video: MSP430 secondenteller - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Welkom! Making of Seconds Counter: CCStudio 8 en MSP430F5529 gebruiken voor het project.
C-taal om de microcontroller te coderen. Het toepassen van Low Power Modes, Timers en Interrupts. De output wordt weergegeven via 7 Segment.
Stap 1: Inzicht
Laten we beginnen!
Initialiseer de watchdog-timer naar de UIT-status met behulp van het vereiste wachtwoord voor de watchdog-timer (het helpt om oneindige lussen te controleren en de processor veilig te houden).
#erbij betrekken
/** * hoofd.c */
int hoofd(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop waakhondtimer
retourneer 0;
}
Stap 2: Poortinitialisatie
{
P3DIR=0xFF; // P3DIR=0x00;
P6DIR=0xFF;
P4DIR |=0x00;
P4REN |=0xFF;
P4OUT |=0xFF;
}
P3DIR |=0x00 vertelt ons dat het geheel van PORT-3 is geïnitialiseerd om invoer te ontvangen.
P3DIR |=0xFF vertelt ons dat het geheel van PORT-3 is geïnitialiseerd om uitvoer te geven.
P3DIR |=0x01 alleen de pin P3.0 wordt geïnitialiseerd om uit te voeren in PORT-3. Dit volgt op een hexadecimale poorttoewijzing.
P4REN |=0xFF, dit geeft aan dat de pinnen van PORT-4 hun pull-up/down-weerstanden hebben ingeschakeld.
Om ze te selecteren tussen Pull UP of Pull DOWN, wordt de instructie P$OUT |=0xFF gebruikt.
Als 0xFF wordt gebruikt, configureren ze als Pull UP-weerstanden en als 0x00 configureren ze als Pull DOWN.
Stap 3: Ultra laag vermogen
Met MSP430F5529 kunnen we het stroomverlies van de processor verminderen. Dit is handig in zelfstandige toepassingen.
Dit vraagt om declaratie van alle pin of poorten om uit te voeren.
{
P7DIR |= 0xFF;
P6DIR |= 0xFF;
P5DIR |= 0xFF;
P4DIR |= 0xFF;
P3DIR |= 0xFF;
P2DIR |= 0xFF;
P1DIR |= 0xFF;
}
Stap 4: TIMER
Gebruik van timer voor vertragingsgeneratie van één seconde. Dit gebruikt de SMCLK van 1 MHz, ook loopt de timer in de energiebesparende modus (in de volgende stap wordt deze na het tellen onderbroken door LPM). Dit proces bespaart energie en belasting van de processor
TA0CCTL0=CCIE;
TA0CCR0=999;
TA0CTL = TASSEL_2 + MC_1;
Waarde is 999, omdat er nog een telling nodig is om terug te gaan naar nul in het timerregister.
Stap 5: Energiezuinige modus
_BIS_SR(LPM0_bits+GIE);
Dit schakelt General interrupt Enable (GIE) in en zet de CPU op LPM0, waar MCLK die de cpu ondersteunt uit is, en SMCLK en ACLK draaien die de timer draaiende houden. zodat we kunnen zien dat de CPU is uitgeschakeld, daar door energie te besparen.
Stap 6: ISR-timer
#pragma vector=TIMER0_A0_VECTOR
_interrupt ongeldig Timer_A (ongeldig)
{
z++;
if(z>vertraging)
{
P3OUT=code[x];
P6OUT=code1[y];
x++;
als(x==10)
{
x=0;
y++;
}
als(y==6)
y=0;
z=0;
}
}
pragma vector is voor ISR-representatie in C embd.
code[x] en code1[y] zijn de arrays die uitvoerwaarden bevatten voor de twee zeven segmenten, voor het weergeven van een teller van 60 seconden.
Stap 7: Hardware-onderbreking
P2DIR=0x00;
P2REN=0x02;
P2OUT=0x02;
P2IE |=BIT1;
P2IES |=BIT1;
P2IFG &= ~BIT1;
Hier wordt P2.1 gedeclareerd als een hardware-interrupt, als de knop wordt ingedrukt, wordt de teller teruggezet naar de waarde.
het restprogramma is geschreven in de ISR van deze interrupt.
Stap 8: ISR- Reset / Drukknop
#pragma vector=PORT2_VECTOR
_interrupt void port_2(void)
{
P2IFG &=~BIT1;
x=0; y=0;
P3OUT=code[x];
P6OUT=code1[y];
v++;
voor(i=0;i
{
P1OUT |= BIT0; //P1.0 = schakelen
_delay_cycles (1048576);
P1OUT &=~BIT0; // P1.0 = schakelen
_delay_cycles (1048576);
}
Deze ISR stelt de teller op nul en houdt bij hoe vaak de rest is ingedrukt.
(Hier wordt de weergave gemaakt via led-toggle, kan ook een andere array en timer gebruiken om die waarden als uitvoer in 7 segmenten weer te geven).
Stap 9: CODE
#erbij betrekken
#define vertraging 1000
char code={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
char code1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
vluchtig unsigned int x=0, y=0, z=0;
vluchtig unsigned int v=0, i=0;
ongeldig hoofd()
{
WDTCTL = WDTPW | WDTHOLD; // stop waakhondtimer
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 onderbrekingsserviceroutine
#pragma vector=TIMER0_A0_VECTOR
_interrupt ongeldig Timer_A (ongeldig)
{
z++;
if(z>vertraging)
{
P3OUT=code[x];
P6OUT=code1[y];
x++;
als(x==10)
{
x=0;
y++;
}
als(y==6)
y=0;
z=0;
}
}
// Hardware-interrupt-serviceroutine
#pragma vector=PORT2_VECTOR
_interrupt void port_2(void)
{
P2IFG &=~BIT1;
x=0;
y=0;
P3OUT=code[x];
P6OUT=code1[y];
v++;
voor(i=0;i
{ P1OUT |= BIT0; // P1.0 = schakelen
_delay_cycles (1048576);
P1OUT &=~BIT0; // P1.0 = schakelen
_delay_cycles (1048576);
}
}
Stap 10: Referentiecode
GitHub-opslagplaats
Aanbevolen:
MSP430 DIP programmeren met een Ez430: 4 stappen
MSP430 DIP programmeren met een Ez430: Toen ik TI's ez430 USB-programmeur vond, leek het een van de gemakkelijkere methoden om met een MCU aan de slag te gaan. Hoe kan ik het mis hebben, het heeft ez in de naam! Het blijkt dat het in feite eenvoudig is … meestal. De ez430 is geweldig als je wilt