× MSP430, Microcontrollori 16 bit Ultra Low Power

Perchè il pulldown non funge ?

10 Anni 3 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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
10 Anni 3 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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
10 Anni 3 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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
10 Anni 3 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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
10 Anni 3 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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login