Vai al contenuto
PLC Forum


Pic...rb0 Che Non Funziona Bene


Giorgio Demurtas

Messaggi consigliati

Giorgio Demurtas

Ho collegato un display a 7 segmenti anodo comune alla porta B di un pic 16F84A.

segmento A su RB0, B su RB1, e così via.

visto che è ad anodo comune, per far accendere il segmento metto a zero l'uscita realtiva. Funziona con tutti i pin tranne che con RB0. Perchè?

il sw. è questo ed è compilato con ccs.

#include "C:\Documenti\pic c\nuovi_progetti\7seg1\7seg1.h"


void main()
{
 int8 numero;
 set_tris_a(0xFF);
 set_tris_b(0x00);
 numero=8;
 while(1)
   {
   if (numero==0) output_b(0x03);
   if (numero==1) output_b(0x9F);
   if (numero==2) output_b(0x25);
   if (numero==3) output_b(0x0D);
   if (numero==4) output_b(0x99);
   if (numero==5) output_b(0x49);
   if (numero==6) output_b(0x41);
   if (numero==7) output_b(0x1F);
   if (numero==8) output_b(0x01);
   if (numero==9) output_b(0x09);
   if (numero==10) numero=0;
   delay_ms(250);
   delay_ms(250);
   //numero=numero+1;
   }
}

provvisoriamente il sw fa comparire solo in n°8 (così controllo che tutti i segmenti funzionino).

scusate se per caso c'è qualche errore, ma ho fretta di andare a pranzo...

ciao

Gio

Link al commento
Condividi su altri siti


Giorgio Demurtas

ok, ho risolto da solo! (che bravo! :P )

ho fatto lo stupido errore di invertire tutti i collegamenti delle uscite, praticamente il bit più significativo stava da quello meno significativo.

Quindi potevo cambiare il sw e rifare la tabellina per ricavare i valori esadecimali per l'uscita o rifare i collegamenti. Ho prefertito rifare i collegamenti per mantenere un certo filo logico nel sw.

il listato definitivo:

]#include "C:\Documenti\pic c\nuovi_progetti\7seg1\7seg1.h"

//giorgio demurtas 02/08/04
//conteggio in avanti con un display a 7 segmenti ad anodo comune

void main()
{
 int8 numero;
 set_tris_a(0xFF);
 set_tris_b(0x00);
 numero=9;
 while(1)
   {
   if (numero==10) numero=0;
   if (numero==0) output_b(0x03);
   if (numero==1) output_b(0x9F);
   if (numero==2) output_b(0x25);
   if (numero==3) output_b(0x0D);
   if (numero==4) output_b(0x99);
   if (numero==5) output_b(0x49);
   if (numero==6) output_b(0x41);
   if (numero==7) output_b(0x1F);
   if (numero==8) output_b(0x01);
   if (numero==9) output_b(0x09);
   delay_ms(250);
   delay_ms(250);
   delay_ms(250);
   delay_ms(250);
   numero=numero+1;
   }
}

ciao

Modificato: da Giorgio Demurtas
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...