Progetti

   

Tutorial

   

Servizi

   
Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: gestione porte PIC

gestione porte PIC 1 Settimana 6 Giorni fa #1

  • Federico_d
  • Avatar di Federico_d
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Buongiorno,
come ho scritto nella mia presentazione, sto iniziando a fare i primi esperimenti con un PIC 18F2550 per prendere confidenza col workflow: MPLAB-X 5.2 - PIC Kit 4 - MCU. Ho notato che dopo aver programmato il PIC, se stacco il programmatore e le porte PGD e PGC rimangono "floating", il micro non funziona correttamente. Quindi ho provato a mettere un resistore di pull-down e successivamente ho tolto il resistore e settato le due porte in OUTPUT/LOW. In entrambi i casi tutto sembra funzionare. E' prassi corretta mettere in down queste porte, o ci sono altri accorgimenti che non conosco ?
Grazie,e buona giornata a tutti.
Federico
Non si può essere sicuri di nulla. Ne sono assolutamente certo!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

gestione porte PIC 1 Settimana 5 Giorni fa #2

  • Cosimix
  • Avatar di Cosimix
  • Offline
  • Gold Boarder
  • Messaggi: 171
  • Ringraziamenti ricevuti 14
  • Karma: 3
Buon pomeriggio!

Cosa fa il micro per non funzionare correttamente?

E' buona regola avere il controllo di tutti i pin del micro, anche di quelli non utilizzati. Se dai un'occhiata agli esempi del testo XC8 Step by Step, troverai sempre delle configurazioni del tipo
LATB = 0x00;
TRISB = 0xFF;

In genere si consiglia di impostare i pin non utilizzati come input e, se hai spazio e resistori da consumare, non è sbagliato collegare questi ultimi verso massa (oppure collegando i pin direttamente a massa), evitando di lasciarli floating. Il motivo è legato ad un discorso di consumi e di interferenze che il micro potrebbe captare. Ovviamente dipende dal tipo di applicazione.. Se il circuito andrà in orbita grazie ad un razzo di Elon Musk (tra l'altro il prossimo partirà tra qualche ora) allora è il caso di prendere qualche accorgimento.
Per chi proviene da Arduino è normale porsi la tua domanda perché in ambiente Arduino in genere si impostano solo i pin di interesse attraverso la funzione pinMode(), mentre tutti gli altri di default vengono impostati come input.

Saluti,
Cosimo
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

gestione porte PIC 1 Settimana 5 Giorni fa #3

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4485
  • Ringraziamenti ricevuti 516
  • Karma: 49
Salve Federico,

a meno che tu non stia in fase di debug, quando stacchi il programmatore deve funzionare.
Non ci deve essere l'esigenza di collegare PGD e PGC a massa.

Quale schema elettrico stai utilizzando?

Saluti,

Mauro
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

gestione porte PIC 1 Settimana 5 Giorni fa #4

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4485
  • Ringraziamenti ricevuti 516
  • Karma: 49
...abbiamo scritto in contemporanea.

Quello che è strano è che non funziona quando stacchi il programmatore.

I miei dubbi sono sulla linea MCLR ed eventualmente il watchdog interno (da disabilitare).

Saluti,

Mauro
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

gestione porte PIC 1 Settimana 5 Giorni fa #5

  • Federico_d
  • Avatar di Federico_d
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Posterò lo schema elettrico appena possibile, lo devo disegnare. Nel frattempo aggiungo che il programma fa banalmente lampeggiare un led. Il non-funzionamento si manifesta così: se stacco il PK4 quando il led è spento, questo rimane spento. Se lo stacco a led acceso, questo inizia a sfarfallare esattamente a 50 Hz, misurati da oscilloscopio. Cosa che ovviamente non so spiegare. Mettendo a massa le due suddette porte il led inzia a lampeggiare come mi aspetto. Il pic è impostato per funzionare con l'oscillatore interno a 8 MHz.
Ecco il codice.

#include <stdio.h>
#include <stdlib.h>
#include <pic18f2550.h>
#include <xc.h>

#define DELAY_VALUE 50000
#define FOREVER 1
#pragma config WDT = OFF // Watchdog Timer Enable bit
#pragma config FOSC = INTOSC_EC

int main(int argc, char** argv) {

unsigned long counter = DELAY_VALUE;

TRISA = 0b0000; // set PORTA full output
TRISB = 0b0000; // set PORTB full output
OSCCONbits.IRCF = 0b111; // set internal clock to 8 MHz
PORTBbits.RB6 = 0; // set PGC to down
PORTBbits.RB7 = 0; // set PGD to down

while (FOREVER) {

while(counter)
{
counter--;
}
counter = DELAY_VALUE;

LATAbits.LATA0 = ~LATAbits.LATA0;

}

return (EXIT_SUCCESS);
}
Non si può essere sicuri di nulla. Ne sono assolutamente certo!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Powered by Forum Kunena
   
© LaurTec 2006-2015