Vai al contenuto
PLC Forum


led su pic 16f87x e porta A.4


ciccioc74

Messaggi consigliati

salve espongo il problema: ho un led sul pin 4 della porta A di un pic 16f876( ho provato anche con un 16f877) collegato a massa tramite una resistenza di 330R . Come compilatore uso MikroC . il listato è semplificato a questo:

#define LED5 PORTA.F4

void initizializza(){
  PORTA = 0;
  TRISA = 0;//led
  ADCON0=0;
  ADCON1=0x06;
  return;
}

void main() {
  initizializza();
  while (1) {
   LED5=1;
   delay_ms(500);
   LED5=0;
   delay_ms(500);
  }
}
Ho collegato un pull-up da 10k sul pin ma niente. Se uso la porta B funziona. Il pin A.4 è open drain e pensavo di risolvere col pull up .... wallbash.gif Sembra che con un bd682 funziona ma mi sembra eccessivo per un led, in oltre, anche gli altri pin della porta sembrano non funzionare a modo:
#define LED6 PORTA.F5                                                                                                          #define LED1 PORTA.F3
#define LED2 PORTA.F2
#define LED3 PORTA.F1
#define LED4 PORTA.F0
#define LED5 PORTA.F4
void initizializza(){
  PORTA = 0;
  TRISA = 0;//led
}
void main() {

  initizializza();
  while (1) {
    LED1=1;
   delay_ms(300);
   LED2=1;
   delay_ms(300);
   LED3=1;
   delay_ms(300);
   LED4=1;
   delay_ms(300);
   LED5=1; //questo non si accende!
   delay_ms(300);
   LED6=1;
  delay_ms(300);
}

in questa maniera si dovrebbero accendere a i vari led (e restare accesi) invece si accende il primo, poi si spegne e si accende il secondo ecc...

wallbash.gif AIUTOOO! cambio mestiere?

Link al commento
Condividi su altri siti


scusa se non ti ho risposto prima. Il mio schema è simile a quello in figura solo che i led sono collegati alla porta A. Non mi funziona. Ho messo anche dei pull-up ma niente...

Ho il sospetto che la porta a dei micro PIC16f è solo ingresso (stabile) e in qualche rara applicazione uscita(non stabile ) mad.gif

Link al commento
Condividi su altri siti

non dovrei avere problemi ma li ho wallbash.gif . Sul forum di mikroelettronika mi dicono che a loro funziona sulla scheda easypic . Ma a parte i pull up e la resistenza in serie non saprei cosa può avere di particolare. sai dove reperire lo schema di easypic? grazie tante , comunque, per il supporto

Link al commento
Condividi su altri siti

  • 2 weeks later...

problema risolto. laugh.gif

Il fatto è che una operazione di scrittura sulla porta del pic viene interpretata come read-modify- write. Se la tensione alla porta non è sufficiente a far leggere il coretto stato, al momento della modifica ha gia un dato sbagliato. Uso per questo una variabile globale: la aggiormo col corretto valore e la copio sulla porta (non bit a bit ma a byte):


char set_temp_A=0;
void set_porta_a(char sbit_A){
       set_temp_A=set_temp_A | sbit_A;
       PORTA=set_temp_A;
}

void reset_porta_a(char rbit_A){
       rbit_A = ~ rbit_A;
       set_temp_A=set_temp_A & rbit_A;
       PORTA=set_temp_A;
}
void complement_port_A(char cobitA){
int cotemp=0;
    cotemp=set_temp_A & cobitA;
    if (cotemp == 0) //il led era spento
       set_porta_a(cobitA);
    else
       reset_porta_a(cobitA);
}

main() {
...
complement_port_A(0x10);
}

clap.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...