Programlama ve Elektronik

Programlama ve Elektronik (http://www.proelo.com/)
-   PIC C (http://www.proelo.com/pic-c-43/)
-   -   ccsc ile yazılmış pıc'li voltmetre (http://www.proelo.com/pic-c-43/ccsc-ile-yazilmis-picli-voltmetre-2285/)

xman 3. July 2012 12:31 PM

ccsc ile yazılmış pıc'li voltmetre
 
merhaba devreyle baya bi uğraştım çalıştıramadım yada bilgilerim yetersiz geliyo desem daha doğru olcak derlerken problem yok diyo ama simulasyonda çalıştırmıyo . simulasyon çizimi yazılım hepsi rar içinde
teşekkürler.
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

Kod:

#include <16F676.h>
#device adc=10
#fuses INTRC_IONOWDTPUTNOPROTECTBROWNOUTNOMCLR
#use delay (clock=4000000) // 4MHz clock

#rom  0x3ff={0x3444}

#byte PORTA = 0x05
#byte PORTC = 0x07
#byte TRISA = 0x85
#byte TRISC = 0x87

#define SPORTA PORTA
#define SPORTC PORTC

#define  TICKS_BETWEEN_INTERRUPTS      5000 //5000
#define  INTERRUPT_OVERHEAD            35
#define  TMR1RESET (0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD))

const char SegCode[11] = {0x400x570x220x060x150x0C0x080x560x000x040xFF};
  //                      0    1    2    3    4    5    6    7    8    9
const char Column[3]  = {0x020x010x04};
static char Segment[3] = {0x7f0x7f0x7f}; 
static unsigned char ColCount=0x00;

void CPU_SETUP(void);
void Display(void);
void HTO7S(unsigned int32 Num);

byte i;
unsigned int32 result;

#INT_TIMER1
void Timer1(void)

  set_timer1(TMR1RESET);
  Display(); 


void main()
{     
  unsigned char i;
 
  CPU_SETUP();
 
  while(true)
  {       
      result=0;
      for (i=0;i<20;i++)
      {
        set_adc_channel(3);
        delay_ms(1);
        result=result+read_adc();
      }
        //result = 0x3fe;                         
      HTO7S(result/20); 
      delay_ms(200);         
  }
 
}

void CPU_SETUP()
{
   
  setup_comparator(NC_NC_NC_NC);  // not use comparator module
  setup_adc_ports( sAN3 | VSS_VDD);
  setup_adc(ADC_CLOCK_DIV_64);
  TRISA=0b00011000;
  PORTA=0x27;
  TRISC=0b00000000;
  PORTC=0x37;
 
 
  setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
  set_timer1(TMR1RESET);
  enable_interrupts(GLOBAL);
  enable_interrupts(INT_TIMER1); 
}

//-------------------------------------
// Display routine
//-------------------------------------
void Display()
{
  PORTA = 0b00100111;    // off all digits column and Segment G
  PORTC = 0b00111111;  // off segment a-f 
  delay_cycles(2);
 

  if (ColCount>=3)
  ColCount=0;
     
  SPORTC = Segment[ColCount];
  SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column[ColCount]^0x07);
  ColCount++;           


//--------------------------------------
// Convet HEX 2 byte to 7-Segment code
//--------------------------------------
void HTO7S(unsigned int32 Num)
{

  unsigned int32 res;

 
  Segment[0]=SegCode[30*Num/10230];
  if (Segment[0]==0x40)
  Segment[0]=0xFF;
 
  res = 30*Num%10230;
  Segment[1]=SegCode[10*res/10230];
  res=10*res%10230;
  Segment[2]=SegCode[10*res/10230];
}


xDoZeRx 3. July 2012 01:57 PM

Cevap: ccsc ile yazılmış pıc'li voltmetre
 
Programımız hex kodlarında bozukluk var kodların yeniden yazılması gerektiğini söylüyor.Real Time de sorun olduğunu söylüyor kodlarını elden geçir

ULAGA 3. July 2012 02:57 PM

Cevap: ccsc ile yazılmış pıc'li voltmetre
 
Geçenlerde bilgisayara format attığım için tüm yazılımlar silindi. :)
Müsait olduğumda inceleyeceğim.


Bütün Zaman Ayarları WEZ +3.5 olarak düzenlenmiştir. şu Anki Saat: 11:11 AM .