- Messaggi: 353
- Ringraziamenti ricevuti 8
×
MSP430, Microcontrollori 16 bit Ultra Low Power
Perchè il pulldown non funge ?
10 Anni 9 Mesi fa #1
da elpablito
Perchè il pulldown non funge ? è stato creato da elpablito
E' vero che ogni tanto mi addormento ma questa non la capisco. Ho alimentato un MSP2553 a 3.3V
Stavo scrivendo due righe con l'oscilloscopio attaccato
P1DIR |= BIT3;
P1OUT |= 0x00;
// P1DIR &= ~BIT2; // Ingresso a CCR1
// P1OUT &= ~BIT2;
P1REN |= BIT2;
Al reset la tensione è 3,3V.
Quando eseguo P1OUT |= 0x00 P1.2 va giustamente a zero
Quando eseguo P1REN |= BIT2 la tensione passa da 3.3 a 2.5V
Ho provato con 100K di pulldown esterno,invece che quello interno, idem come sopra.
Le due istruzioni flegate secondo me non devono servire, ma comunque non cambia nulla.
Non è la porta cambiata CPU idem come sopra.
Sembra il mistero della sfinge, non ho più idee, cosa mi sono perso, perchè P1.3 (bit3) non va a zero ?
Saluti
Paolo
Stavo scrivendo due righe con l'oscilloscopio attaccato
P1DIR |= BIT3;
P1OUT |= 0x00;
// P1DIR &= ~BIT2; // Ingresso a CCR1
// P1OUT &= ~BIT2;
P1REN |= BIT2;
Al reset la tensione è 3,3V.
Quando eseguo P1OUT |= 0x00 P1.2 va giustamente a zero
Quando eseguo P1REN |= BIT2 la tensione passa da 3.3 a 2.5V
Ho provato con 100K di pulldown esterno,invece che quello interno, idem come sopra.
Le due istruzioni flegate secondo me non devono servire, ma comunque non cambia nulla.
Non è la porta cambiata CPU idem come sopra.
Sembra il mistero della sfinge, non ho più idee, cosa mi sono perso, perchè P1.3 (bit3) non va a zero ?
Saluti
Paolo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
10 Anni 9 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Perchè il pulldown non funge ?
Ciao Paolo,
Potresti fare il debug con esecuzione passo passo e vedere il valore dei seguenti registri?
P1DIR
P1OUT
P1REN
P1SEL1 (dovrebbe avere il relativo bit 2 a 0)
P1SEL2 (dovrebbe avere il relativo bit 2 a 0)
Saluti,
Mauro
Potresti fare il debug con esecuzione passo passo e vedere il valore dei seguenti registri?
P1DIR
P1OUT
P1REN
P1SEL1 (dovrebbe avere il relativo bit 2 a 0)
P1SEL2 (dovrebbe avere il relativo bit 2 a 0)
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
10 Anni 9 Mesi fa #3
da elpablito
Risposta da elpablito al topic Perchè il pulldown non funge ?
@ Mauro
Già fatto, in effetti stavo adoperando la porta come capture, quindi con il P1SEL1 a 1 (senza pulldown)
è avevo la porta sempre a 1,e quindi non leggevo il fronte di salita. Sono ritornato indietro fino a vedere cosa succedeva se usavo solo tre istruzioni per fare il pulldown. Conseguenza non capisco più
Ti confermo che P1SEL1 e P1SEL due sono rigorosamente a zero. E' come fosse in tristate, ma non è vero
perchè, anche senza P1REN |= BIT2, ma con resistenzuola da 100K su massa col cavolo che va a massa
Saluti
Paolo
Già fatto, in effetti stavo adoperando la porta come capture, quindi con il P1SEL1 a 1 (senza pulldown)
è avevo la porta sempre a 1,e quindi non leggevo il fronte di salita. Sono ritornato indietro fino a vedere cosa succedeva se usavo solo tre istruzioni per fare il pulldown. Conseguenza non capisco più
Ti confermo che P1SEL1 e P1SEL due sono rigorosamente a zero. E' come fosse in tristate, ma non è vero
perchè, anche senza P1REN |= BIT2, ma con resistenzuola da 100K su massa col cavolo che va a massa
Saluti
Paolo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
10 Anni 9 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Perchè il pulldown non funge ?
Ciao Paolo,
puoi postare il codice intero?
Saluti,
Mauro
puoi postare il codice intero?
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
10 Anni 9 Mesi fa #5
da elpablito
Risposta da elpablito al topic Perchè il pulldown non funge ?
#include <msp430.h>
#define periodo 2000 // pari a 2 mSec. 500KHz
#define min_duty 500 // pari a 0,5 mSec.
unsigned int adc_val[2]; // Contiene i dati letti da ADC
unsigned char Count, First_Time;
unsigned int REdge1, REdge2, FEdge;
unsigned int Period, ON_Period;
/*****************************************************************************
*funzione void delay(unsigned int cicli)
*
* cosa fa Si adopera il timer per creare il ritardo.
* Il taimer va in LPM0 fino allo scadere del tempo.
****************************************************************************/
void delay(unsigned int cicli){
TACCR0 = cicli;
TACTL = TASSEL_2 | MC_1; //SMCLK = DCOCLK + Conta in su
TACCTL0 |= CCIE; // interrupt abilitato
LPM0;
TACCTL0 &= ~CCIE; // disabilita interrupt del timer
}
/*
* main.c
*/
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Set del clock
if (CALBC1_8MHZ==0xFF){ // mancando le costanti di calibrazione
while(1); // non proseguire
}
DCOCTL = 0; // DCOx = 0 e MODx = 0
BCSCTL1 = CALBC1_8MHZ; // frequenza del DCO 8MHz
DCOCTL = CALDCO_8MHZ;
BCSCTL2 = DIVS_3; // SMCLK = DCOCLK / 8
// Set delle porte
P1DIR |= BIT3; // P1.2 Trig
P1OUT |= 0x00;
// P1DIR &= ~BIT2; // Ingresso a CCR1
// P1OUT &= ~BIT2;
P1REN |= BIT2;
// P1SEL |= BIT2; // p1.2 /TA0.1 Seleziona CCR1
P2DIR |= BIT4 + BIT1; // P2.1 P2.4 uscite del segnale
P2SEL |= BIT4 + BIT1; // P2.1 P2.4 uscite per la periferica TimerA1
_enable_interrupt(); // Abilita interrupt
Mi fermo qui,che il resto non serve, non seve niente anche tutto quello prima di main(void). Il breakpoint è all'inizio del set delle porte e poi un istruzione per volta.
Saluti
Paolo
#define periodo 2000 // pari a 2 mSec. 500KHz
#define min_duty 500 // pari a 0,5 mSec.
unsigned int adc_val[2]; // Contiene i dati letti da ADC
unsigned char Count, First_Time;
unsigned int REdge1, REdge2, FEdge;
unsigned int Period, ON_Period;
/*****************************************************************************
*funzione void delay(unsigned int cicli)
*
* cosa fa Si adopera il timer per creare il ritardo.
* Il taimer va in LPM0 fino allo scadere del tempo.
****************************************************************************/
void delay(unsigned int cicli){
TACCR0 = cicli;
TACTL = TASSEL_2 | MC_1; //SMCLK = DCOCLK + Conta in su
TACCTL0 |= CCIE; // interrupt abilitato
LPM0;
TACCTL0 &= ~CCIE; // disabilita interrupt del timer
}
/*
* main.c
*/
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Set del clock
if (CALBC1_8MHZ==0xFF){ // mancando le costanti di calibrazione
while(1); // non proseguire
}
DCOCTL = 0; // DCOx = 0 e MODx = 0
BCSCTL1 = CALBC1_8MHZ; // frequenza del DCO 8MHz
DCOCTL = CALDCO_8MHZ;
BCSCTL2 = DIVS_3; // SMCLK = DCOCLK / 8
// Set delle porte
P1DIR |= BIT3; // P1.2 Trig
P1OUT |= 0x00;
// P1DIR &= ~BIT2; // Ingresso a CCR1
// P1OUT &= ~BIT2;
P1REN |= BIT2;
// P1SEL |= BIT2; // p1.2 /TA0.1 Seleziona CCR1
P2DIR |= BIT4 + BIT1; // P2.1 P2.4 uscite del segnale
P2SEL |= BIT4 + BIT1; // P2.1 P2.4 uscite per la periferica TimerA1
_enable_interrupt(); // Abilita interrupt
Mi fermo qui,che il resto non serve, non seve niente anche tutto quello prima di main(void). Il breakpoint è all'inizio del set delle porte e poi un istruzione per volta.
Saluti
Paolo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.