Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: solidus - 10 Kasım 2010, 09:10:05

Başlık: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 10 Kasım 2010, 09:10:05
C dilini öğrenmeye yeni başladım. http://www.pyroelectro.com/projects/ir_radar/schematic.html (http://www.pyroelectro.com/projects/ir_radar/schematic.html) adresindeki devreyi kurdum. Adreste açık kodlar mevcut fakat nasıl derleyeceğimi bilmiyorum. Yardım edebilecek bi arkadaşım varsa sevinirim.
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 10 Kasım 2010, 15:51:14
sitedeki kodu indirdim ama o kod cok karmasık onu duzerlemen gerek yoksa derleyici hata verir...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 10 Kasım 2010, 18:41:04
Kodun tamamı aşağıda. Nasıl bir düzenleme gerekiyor ? Bilgi verirmisiniz ?

/*

Program:
This program makes a servo pan back and forth and takes
data at 5 different points, interprets that data & displays
it on the output leds using PORTD & PORTC to talk with
the 74LS373's.
*/

//Initial Includes
#include <p18f452.h>
#include <timers.h>
#include <delays.h>
#include <adc.h>
#include <stdlib.h>

//Servo Initialization
int servo0 = 0xFC17;

//More Initializations
int radar_direction = 0;
int whichway = 0;
int count = 0;
int result = 0;
int round = 0;

//Function Declarations
void InterruptHandlerHigh (void);
int Ir_Data_Eval(int, int);

void main(void)
{

//Allow Interrupts
RCON = 0b000000000;
INTCON = 0b10100000;

//Setup & Open A/D, Timers
OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_2 );
OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_2 & T1_OSC1EN_OFF & T1_SYNC_EXT_OFF );

//Initialize Timers
WriteTimer0( 0xB1DF );
WriteTimer1( 0xFC17 );

//Initialize Port Directions
TRISD = 0x00;
TRISB = 0x00;
TRISC = 0x00;

//Initially Light Up All Leds & Turn Them Off
PORTB = 0xFF;
PORTD = 0xFF;
Delay10TCYx(100);
PORTD = 0x00;
Delay10KTCYx(100);

PORTB = 0x00;
PORTD = 0xFF;
Delay10TCYx(100);
PORTD = 0x00;
Delay10KTCYx(100);

//Infinite While Loop
   while(1)
   {
   
      //If radar is at one of 5 spots take a/d & output it to the leds
      switch(radar_direction)
      {
     
         case 0:
               
               ConvertADC();
               while( BusyADC() );
                  result = ReadADC();
                 
               PORTB = Ir_Data_Eval(result, 1);
               PORTD = 0x01;               
               Delay10TCYx(10);
               result = 0;
               PORTD = 0x00;
               break;
         case 1:

               ConvertADC();
               while( BusyADC() );
                  result = ReadADC();
                 
               PORTB = Ir_Data_Eval(result, 0);
               PORTD = 0x02;
               Delay10TCYx(10);
               result = 0;
               PORTD = 0x00;
               break;
         case 2:

               ConvertADC();
               while( BusyADC() );
                  result = ReadADC();

               PORTB = Ir_Data_Eval(result, 0);
               PORTD = 0x04;
               Delay10TCYx(10);
               result = 0;
               PORTD = 0x00;
               break;
         case 3:

               ConvertADC();
               while( BusyADC() );
                  result = ReadADC();
                 
               PORTB = Ir_Data_Eval(result, 0);
               PORTD = 0x08;
               Delay10TCYx(10);
               result = 0;
               PORTD = 0x00;
               break;
         case 4:

               ConvertADC();
               while( BusyADC() );
                  result = ReadADC();

               PORTB = Ir_Data_Eval(result, 0);
               PORTD = 0x10;
               Delay10TCYx(10);
               result = 0;
               PORTD = 0x00;
               break;
      }
   }
}

//INTERRUPT CONTROL
#pragma code InterruptVectorHigh = 0x08                //interrupt pointer address (0x18 low priority)
void InterruptVectorHigh (void)
{
        _asm        //assembly code starts
        goto InterruptHandlerHigh                //interrupt control
        _endasm //assembly code ends
}
#pragma code
#pragma interrupt InterruptHandlerHigh        //enf.

void InterruptHandlerHigh()        // declaration of InterruptHandler
{//this gets ran when ever the timers flop over from FFFF->0000
        if(INTCONbits.TMR0IF)                        //check if TMR0 interrupt flag is set
        {
            WriteTimer0( 0xB1DF );
            WriteTimer1( 0xFC17 );
            count = 0;
             INTCONbits.TMR0IF = 0;                //clear TMR0 flag               
        }
        if(PIR1bits.TMR1IF == 1 && PIE1bits.TMR1IE == 1)        //if set controls the first servo
        {
      count++;   
            switch(count){     
         case 1:     PORTC = 0x01; // First Stage
                   WriteTimer1( servo0 );
                  break;
         default:   PORTC = 0x00; // Left Gripper
                  WriteTimer1(0);
                  break;
            }

                PIR1bits.TMR1IF = 0;                        //clear Timer1 flag
                PIE1bits.TMR1IE = 1;                        //clear Timer1 enable flag set to zero

/*

Begin Direction Control

*/
   //Move the Servo In Small Steps
   if(whichway)
      servo0+=5;
   if(!whichway)
      servo0-=5;

   //When 90 degrees or 0 degrees is reached, switch direction
   if(servo0 <= 0xF82F ){
      whichway = 1;
      round++;
   }
   if(servo0 >= 0xFC17){
      whichway = 0;
      round++;
   }

/*

End Direction Control

*/

/*

Begin Radar Directional Lighting Control

*/

//If 120 < servo0 < 130
if(servo0 > 0xF8A7 && servo0 < 0xF8B1)
{
   if(whichway == 0)
      radar_direction = 0;
   if(whichway == 1)
      radar_direction = 1;
}

//If 370 < servo0 < 380
if(servo0 > 0xF9A1 && servo0 < 0xF9AB)
{
   if(whichway == 0)
      radar_direction = 1;
   if(whichway == 1)
      radar_direction = 2;
}

//If 620 < servo0 < 630
if(servo0 > 0xFA9B && servo0 < 0xFAA5)
{
   if(whichway == 0)
      radar_direction = 2;
   if(whichway == 1)
      radar_direction = 3;
}

//If 870 < servo0 < 880
if(servo0 > 0xFB95 && servo0 < 0xFB9F)
{
   if(whichway == 0)
      radar_direction = 3;
   if(whichway == 1)
      radar_direction = 4;
}
   
/*

End Radar Directional Lighting Control

*/

        }
    INTCONbits.GIE = 1;                                //re-enable all interrupts
}

int Ir_Data_Eval(int ir_data, int isCHIP0)
{
   //   @ 70cm+
if(ir_data > 0x171 && ir_data <= 0x19E){
   if(isCHIP0)
      return 0xC0;
   else
      return 0x40;
}
   //   @ 60cm+
else if(ir_data > 0x19E && ir_data <= 0x1C3 ){
   if(isCHIP0)
      return 0xA0;
   else
      return 0x20;
}
   //   @ 50cm+
else if(ir_data > 0x1C3 && ir_data <= 0x1EB ){
   if(isCHIP0)
      return 0x90;
   else
      return 0x10;
}

   //   @ 40cm+
else if(ir_data > 0x1EB && ir_data <= 0x20D ){
   if(isCHIP0)
      return 0x88;
   else
      return 0x08;
}

   //   @ 30cm+
else if(ir_data > 0x20D && ir_data <= 0x262 ){
   if(isCHIP0)
      return 0x84;
   else
      return 0x04;
}

   //   @ 20cm+
else if(ir_data > 0x262 && ir_data <= 0x2C6 ){
   if(isCHIP0)
      return 0x82;
   else
      return 0x02;
}

   //   @ 10cm+
else if(ir_data > 0x2DA){
   if(isCHIP0)
      return 0x81;
   else
      return 0x01;
}
   //If chip 0 make sure to turn on the very first led
if(isCHIP0)
   return 0x80;

return 0x00;
}
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: cetinkaya - 10 Kasım 2010, 18:48:11
bende sorunsuzca derledi ccs
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 10 Kasım 2010, 21:57:02
Ben derleyemedim bile. Mümkünse paylaşırmısınız ?
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 10 Kasım 2010, 22:54:54
pardon ya benim indirdigim dosya karman cormandi...

ne hatasi veriyo peki...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 11 Kasım 2010, 19:34:35
nasıl derleyeceğimi bilmiyorum. PIC C Compiler CCS PCWHD v4.068 kurdum. kodları kopyalayıp PCW ilk açılış ekranına yapıştırdım. Compile dediğimde include lardan #defines __18F452_H invalid pre-processor directive diye bi hata veriyor ?
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 11 Kasım 2010, 19:39:39
islemciyi taniyamamis CCS kullanmayi biliymusunuz...

proje olusturmayi...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 11 Kasım 2010, 19:41:54
arkadasim ozur kodu inceledim bu CCS diil bu microchip C18 derleyici arkadasim o derleyici olmasi gerek...

ama istersen ben derleyip sana hexi yollarim...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 11 Kasım 2010, 21:58:20
Alıntı yapılan: justice_for_all - 11 Kasım 2010, 19:41:54
arkadasim ozur kodu inceledim bu CCS diil bu microchip C18 derleyici arkadasim o derleyici olmasi gerek...

ama istersen ben derleyip sana hexi yollarim...

bunu yaparsanız sevinirim.. Ama C18 derleyiciyi nerden bulabilirim ben de öğrenmiş olayım..
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 11 Kasım 2010, 22:44:11
oncelikli microchipin sitesinden mplab ide programin indirip kurmaniz gerek...

data sonra yine microchipin sitesinde arama kismina C18 yazarsaniz cikar...

http://www.4shared.com/file/ZxTCHgcI/demo.html


bu linkte hex kodu bulunmakta...


Kolay gelsin
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 11 Kasım 2010, 23:09:33
ISIS simülasyonunda gene aynı şey oluyor. Acaba gene ISIS'in azizliğimidir ? LED' lerde hiç hareket yok. Simülasyon dosyalarını atsam ilgilenirmisiniz ? Benmi hata yapıyorum yoksa ISIS'mi beni yanıltıyor ?
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 11 Kasım 2010, 23:45:59
ok yukleyip linkini verin bende bi kontrol edeyim...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 12 Kasım 2010, 18:20:04
Devre burada..
http://www.dosya.tc/dosya/UDZq1P/justice_for_all.rar.html (http://www.dosya.tc/dosya/UDZq1P/justice_for_all.rar.html)
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 12 Kasım 2010, 20:41:59
arkadasim sen bu devreyi nerden aldim dedin kodda ADC oku var ama ADC acilmamis ki neye gore okusun bu ayrica ADC ne icin kullanilmis orjinal devresi varmi bunun...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 12 Kasım 2010, 21:16:35
http://www.4shared.com/file/F8FqluU8/demo.html  bu linke bikac degisiklik yapip yenisini yukledim arkadasim simdi potu  oynattigim zaman degisik ledler yaniyor...

calisiyormu bi bak bakalim...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 13 Kasım 2010, 16:30:58
İlk mesajdaki adresini verdiğim sitede vardı şema...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 13 Kasım 2010, 22:09:00
tamam semayi gordum ona gore degisiklik yaptim baktin mi linke devre calisiyomu die baktin mi...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 14 Kasım 2010, 00:01:46
Evet potu oynattıkça her kanaldan birer lamba yanıyor. Çok teşekkürler.. Fakat simülasyon anında bir takım hatalar veriyor.
"[PIC18]PC=0x0922. ADC conversion clock period(2e-07) violates the minimum required TAD time."
"[PIC18]PC=0x0496. Processor has been reset by watchdog timer expiring at time 2.304000" gibi.. Devrenin asıl amacı bir IR sensörden alınan bilgiye göre Portc.0 a bağlı bir servomotoru kumanda ederek 25-30 cm'lik bir alanı taramak ve taranan alan bilgisini de LED'lerden kurulan bir ekrana yansıtmak. Ekran derken çok basit şekilde tasarlanmış.. Ledlerin yandığını görünce servo motor bağlayayım dedim fakat servo motorda hiç hareket yok..
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 14 Kasım 2010, 00:31:34
arkadasim kodunda WDT aciktir ondandir program kesilmiyosa uyarida olabilir o...
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: solidus - 14 Kasım 2010, 16:48:25
Bulamadım WDT yi nereden OFF yapabilirim ?
Başlık: Ynt: IR sensör denemesine başlarken sorun..
Gönderen: justice_for_all - 14 Kasım 2010, 20:36:08
kodunda
#include <p18f452.h>
#include <timers.h>
#include <delays.h>
#include <adc.h>
#include <stdlib.h>



bu satirlardan sonra
#pragma config OSC=HS,WDT=OFF,CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF
#pragma config PWRT=OFF,BOR=OFF,DEBUG=OFF,LVP=OFF



eklemeyi yapcaksin arkadasim...