- Messaggi: 14
- Ringraziamenti ricevuti 0
MSP430, Microcontrollori 16 bit Ultra Low Power
Una base , ma base-base
- simoblack
- Autore della discussione
- Nuovo Utente
Less
Di più
6 Anni 7 Mesi fa - 6 Anni 7 Mesi fa #1
da simoblack
Una base , ma base-base è stato creato da simoblack
Ciao a tutti, come già annunciato nella presentazione non sono titolato, ma un tardone che studia ciò che trova interessante. Non ho molte conoscenze nel linguaggio C e stò approcciando ora alla programmazione di un MSP430f149. Ho una piccola scheda di sviluppo con su montato questo µC. Alle Porte P1x dalla 4 alla 7 ci sono montati dei pulsanti, le porte P2x ci sono montati dei led. Ora per cominciare ho scritto l' Hello World proposto in questo sito con le dovute modifiche, funziona. Dopodicchè ho provato qualche altra istruzione e ci siamo. Il problema è nato quando ho scritto semplicemente questo codice:
Code:
#include <msp430.h>
#define LED1 BIT1
#define LED2 BIT2
#define button P1IN&BIT6
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P2DIR |= 0x6; // Set P2.1 and P2.2 to output direction
P2OUT &= ~(LED1 + LED2); // set P2.1 and P2.2 to 0 (LED OFF)
while (1){
if (button){
P2OUT = LED1 + !LED2;} //se premo "button" si accende il Led1 e lascia il 2 in off
else
P2OUT &= ~(LED1 + LED2); //altrimenti led1 e led2 in off
}
}
Ultima Modifica 6 Anni 7 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- simoblack
- Autore della discussione
- Nuovo Utente
Less
Di più
- Messaggi: 14
- Ringraziamenti ricevuti 0
6 Anni 7 Mesi fa #2
da simoblack
Risposta da simoblack al topic Una base , ma base-base
All'avvio si accende il LED2 (quando non dovrebbe) e premendo "button" si accende il LED1 senza mai spegnere il LED2.
Se invece tolgo la negazione al LED2 alla if funziona correttamente (secondo la modifica, cioè accendendo entrambi alla pressione del tasto e spegnendoli entrambi "altrimenti")
qualcuno può illuminarmi? Non trovo niente al riguardonella letteratura di questo µC
Se invece tolgo la negazione al LED2 alla if funziona correttamente (secondo la modifica, cioè accendendo entrambi alla pressione del tasto e spegnendoli entrambi "altrimenti")
qualcuno può illuminarmi? Non trovo niente al riguardonella letteratura di questo µC
Si prega Accesso o Crea un account a partecipare alla conversazione.
6 Anni 7 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Una base , ma base-base
Salve simoblack,
per ora, se sei alle prime armi assegna ai registri un valore noto senza usare i define.
Quando funziona aggiungi, riga per riga il valori che hai impostato nei define.
Per il LED 2, la negazione deve essere ~ e non !.
Il resistore di pull-down è presente?
Saluti,
Mauro
per ora, se sei alle prime armi assegna ai registri un valore noto senza usare i define.
Quando funziona aggiungi, riga per riga il valori che hai impostato nei define.
Per il LED 2, la negazione deve essere ~ e non !.
Il resistore di pull-down è presente?
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- simoblack
- Autore della discussione
- Nuovo Utente
Less
Di più
- Messaggi: 14
- Ringraziamenti ricevuti 0
6 Anni 7 Mesi fa - 6 Anni 7 Mesi fa #4
da simoblack
Risposta da simoblack al topic Una base , ma base-base
Buonasera e grazie per la risposta, veramente gentile. Premetto che prima di chiedere lumi ho fatto diverse prove sul codice di cui sopra, cercando di cavarmela, ma senza risultati. Comunque essendo un neofita nella programmazione ho fatto come mi hai suggerito, ho tolto i #define (che avevo messo per rendere il codice facilmente leggibile) e sostituito il NOT. La resistenza di PULL-DOWN è presente. Il codice che ho caricato è il seguente:
Ora si verifica una differenza rispetto a prima dovuta al TILDE nella if, si accende il LED1 fisso e il LED2 alla pressione del pulsante. Quindi inverte i LED rispetto al primo codice. Sono in alto mare...
Code:
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P2DIR |= BIT1 + BIT2; // Set P2.1 and P2.2 to output direction
P2OUT &= ~(BIT1 + BIT2); // set P2.1 and P2.2 to 0 (LED OFF)
while (1){
if (P1IN & BIT6){
P2OUT = BIT1 + ~BIT2;} //se premo il pulsante collegato al "BIT6" si accende il Led1 e lascia il 2 in off
else
P2OUT &= ~(BIT1 + BIT2); //altrimenti led1 e led2 in off
}
}
Ora si verifica una differenza rispetto a prima dovuta al TILDE nella if, si accende il LED1 fisso e il LED2 alla pressione del pulsante. Quindi inverte i LED rispetto al primo codice. Sono in alto mare...
Ultima Modifica 6 Anni 7 Mesi fa da simoblack.
Si prega Accesso o Crea un account a partecipare alla conversazione.
6 Anni 7 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Una base , ma base-base
Per ora non usare neppure il valore di BIT ma scrivi dei valori assoluti nei registri.
per esempio quando vuoi accendere i LED scrivi P2OUT = 0x06;
Saluti,
Mauro
per esempio quando vuoi accendere i LED scrivi P2OUT = 0x06;
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti
-
- FORMULA PER LINEARIZZARE TERMOCOPIA
- da Mauro Laurenti
-
- Spostamento impronte
- da Mauro Laurenti