Merhaba.
#include
#include
#include
#include
#include
#include
//Kesmeler
#INT_RTCC
void RTCC_isr(void)
{
}
#INT_TIMER0
void TIMER0_isr(void)
{
}
#INT_TIMER1
void TIMER1_isr(void)
{
}
#INT_TIMER2
void TIMER2_isr(void)
{
}
#INT_TIMER3
void TIMER3_isr(void)
{
}
#INT_EXT
void EXT_isr(void)
{
intExtState=1;
}
#INT_EXT1
void EXT1_isr(void)
{
intExt1State=1;
}
#INT_EXT2
void EXT2_isr(void)
{
intExt2State=1;
}
//Seri Port veri alma
#INT_RDA
void RDA_isr(void)
{
hiX(intRda);
if (firstRdaInt==0)
{
firstRdaInt=1;
genCounter=0;
while(kbhit(commRf))
{
tempbuffer[genCounter]=getch(commRf);
genCounter++;
}
tempbuffer[genCounter]='\0';
fprintf(commdbg,"HMTRP Text: %s\r\n",tempBuffer);
}
else
{
fgets(rdaData,commRf);
}
loX(intRda);
intRdaState=1;
}
#INT_RDA2
void RDA2_isr(void)
{
hiX(intRda2);
fgets(rda2Data,commDbg);
loX(intRda2);
intRda2State=1;
}
//Ana Program Bloğu
void main()
{
setup_adc_ports(sAN15);
setup_adc(ADC_CLOCK_DIV_64|ADC_TAD_MUL_0);
/*
enable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(INT_TIMER3);
*/
hmtrp(disable);
bekle(tKisa);
hmtrp(enable);
bekle(tUzun);
//Example blinking LED program
fprintf(commDbg,"FiDeNet\r\n");
set_adc_channel(15);
delay_ms(2);
enable_interrupts(INT_RDA);
enable_interrupts(INT_RDA2);
//Başlangıç için debug bildirimleri
fprintf(commRf,"FiDeNet HMTRP TEST\r\n");
fprintf(commDbg,"Debug Port TEST\r\n");
//eepromWrTest();
//eepromRdTest();
//Led Driver Conf
digiPotInit();
digiPotReset();
adcCounter=0;
adcSum=0;
adcAvrg=0;
processPlanner=0;
ext_int_edge(0,H_to_L);
ext_int_edge(1,H_to_L);
ext_int_edge(2,H_to_L);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL);
dimmValue=20;
onOffState=1;
setDigiPotValue(dimmValue);
bekle(tOrta);
// Ayarlar faslı bittikten sonra interruptlar aktif olsun.
hiX(iAmAlive);
//Device ID var mı? kontrol et.
readDevIDOk=readDevID();
if (readDevIDOk==1)
{
fprintf(commDbg,"DevID:%s\r\n"devID);
}
else
{
fprintf(commDbg,"DevID:N/A\r\n");
}
//devID=
while(true)
{
//eğer ilk interrupt geldiğinde firstExtInt ilk defa çalışıyorsa intExtState değişkenlerini sıfırla.
//While döngüsü ilk turundan sonra interrupt gelirse onları al
if (firstExtInt==0)
{
intExtState=0;
intExt1State=0;
intExt2State=0;
}
if (intExtState==1)
{
intExtState=0;
hiX(general);
fprintf(commDbg," onOffState\r\n");
onOffstate=!onOffState;
if (onOffstate)
{
setDigiPotValue(dimmValue);
}
else
{
setDigiPotValue(0);
}
fprintf(commDbg," onOffState:%u dimm:%u\r\n"onOffState,dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt1State==1)
{
intExt1State=0;
hiX(general);
fprintf(commDbg,"Dimm -- \r\n");
if (dimmValue>3)
{
dimmValue-=3;
}
else
{
dimmValue=0;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt2State==1)
{
intExt2State=0;
hiX(general);
fprintf(commDbg,"Dimm ++ \r\n");
if (dimmValue<60 p=""> {
dimmValue+=3;
}
else
{
dimmValue=63;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt2State==1)
{
hiX(general);
fprintf(commDbg,"Dimm ++ \r\n");
if (dimmValue<60 p=""> {
dimmValue+=3;
}
else
{
dimmValue=63;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if( intRdaState==1)
{
intRdaState=0;
fprintf(commDbg,"rdaData: %s\r\n"rdaData);
strcpy(tempBuffer, myCommands[cAT].str);
//gelen Komut ATL ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"OK\r\n");
}
strcpy(tempBuffer, myCommands[cATLLev].str);
//gelen Komut ATLLev ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"ATLLev=%3.0f\r\n" adcAvrg);
}
strcpy(tempBuffer, myCommands[cATDmV].str);
//gelen Komut ATDmV ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"ATDmV=%u\r\n" dimmValue);
}
strcpy(tempBuffer, myCommands[cATDm].str);
//gelen Komut ATDm ise
if (strncmp(rdaData,tempBuffer,5)==0)
{
strDataLen=strLen(rdaData);
equalSeq=0;
returnSeq=0;
for (genCounter=0;genCounter {
if(rdaData[genCounter]=='=')
{
equalSeq=genCounter;
}
if(rdaData[genCounter]=='\r')
{
returnSeq=genCounter;
}
}
fprintf(CommDbg," EqualSeq=%u; ReturnSeq=%u\r\n,"equalSeq, returnSeq);
if((returnSeq>0)&&(equalSeq>0))
{
if (returnSeq-equalSeq==2)
{
tempBuffer[0]=rdaData[equalSeq+1];
tempBuffer[1]='\0';
}
else
{
tempBuffer[0]=rdaData[equalSeq+1];
tempBuffer[1]=rdaData[equalSeq+2];
tempBuffer[2]='\0';
}
dimmValue=atoi(tempBuffer);
setDigiPotValue(dimmValue);
fprintf(commRf,"ATDm=%u\r\n"dimmValue );
}
}
strcpy(tempBuffer, myCommands[cATID].str);
//gelen Komut ATID ise
if (strcmp(rdaData,tempBuffer)==0)
{
if (readDevIDOk==1)
{
fprintf(commRf,"ATID=%s\r\n"devID);
}
else
{
fprintf(commRf,"ATID=N/A\r\n");
}
}
}
if( intRda2State==1)
{
intRda2State=0;
fprintf(commDbg,"rda2Data: %s\r\n"rda2Data);
strcpy(tempBuffer, myCommands[cATMfc].str);
//gelen Komut ATMfc ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATMfc: %s\r\n" deviceData[mfc].str);
}
strcpy(tempBuffer, myCommands[cATHwID].str);
//gelen Komut ATHwID ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATHwID: %s\r\n" deviceData[cHWID].str);
}
strcpy(tempBuffer, myCommands[cATSw].str);
//gelen Komut ATSw ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATSw: %s\r\n" deviceData[cSWVersion].str);
}
strcpy(tempBuffer, myCommands[cATHwR].str);
//gelen Komut ATHwR ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATHwR: %s\r\n" deviceData[cHwR].str);
}
strcpy(tempBuffer, myCommands[cATLLev].str);
//gelen Komut ATLLev ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATLLev: %3.0f\r\n"adcAvrg);
}
strcpy(tempBuffer, myCommands[cReBoot].str);
//gelen Komut ReBoot ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ReBoot: %s\r\n" deviceData[cReBoot].str);
bekle(tUzun),
reset_cpu();
}
strcpy(tempBuffer, myCommands[cATID].str);
//gelen Komut ATID ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATID=%s\r\n" devID);
}
strcpy(tempBuffer, myCommands[cATIDW].str);
//gelen Komut ATIDW= ise
if (strncmp(rda2Data,tempBuffer,5)==0)
{
strDataLen=strLen(rda2Data);
equalSeq=0;
returnSeq=0;
for (genCounter=0;genCounter {
if(rda2Data[genCounter]=='=')
{
equalSeq=genCounter;
}
if(rda2Data[genCounter]=='\r')
{
returnSeq=genCounter;
}
}
fprintf(CommDbg," EqualSeq=%u; ReturnSeq=%u\r\n,"equalSeq, returnSeq);
strcpy(tempBuffer,"");
for (genCounter=0;genCounter<(returnSeq-equalSeq-1);genCounter++)
{
tempBuffer[genCounter]=rda2Data[genCounter+equalSeq+1];
}
tempBuffer[genCounter]='\0';
fprintf(CommDbg," tempBuffer %s\r\n,"tempBuffer);
if((returnSeq>0)&&(equalSeq>0))
{
strcpy(devID,tempBuffer);
writeDevId();
setDigiPotValue(1);
bekle(tUzun);
setDigiPotValue(0);
bekle(tUzun);
setDigiPotValue(1);
bekle(tUzun);
reset_cpu();
}
}
strcpy(tempBuffer, myCommands[cATIDC].str);
//gelen Komut ATIDC= ise
if (strcmp(rda2Data,tempBuffer)==0)
{
clearDevID();
fprintf(commDbg,"Device ID Silindi.");
bekle(tUzun);
reset_cpu();
}
}
processPlanner++;
if( (processPlanner % 1000)==0) //500 döngüde bir ADC ölçümü al
{
if (adcCounter>9)
{
adcCounter=0;
}
//delay_ms(tOrta);
adcArr[adcCounter]=read_adc();
//fprintf(CommDbg,"ADC Counter: %u ADC Val : %lu\r\n"adcCounter, adcArr[adcCounter]);
adcCounter++;
adcSum=0;
for (genCounter=0;genCounter<10 gencounter="" p=""> {
adcSum += adcArr[genCounter];
// fprintf(CommDbg,"genCounter: %lu ADC Val : %lu\r\n"genCounter, adcArr[genCounter]);
}
adcAvrg=adcSum /10;
fprintf(CommDbg,"ADC Avrg: %f\r\n"adcAvrg);
}
firstExtInt=1;
/*
output_high(Pin_C2);
delay_ms(DELAY);
adcVal=read_adc();
fprintf(CommDbg,"ADC Val on: %lu\r\n"adcVal);
*/
}
}
10> 60>60>
Pcblerinden teker teker bahsetmiştim. Şimdi toplanmış hali ve yazılımının bitmemiş hali ile Masa Lambası daha doğrusu tam adı ile Uzaktan Kontrollü Aydınlatma Projesini kodlarını ve fotoğraflarını paylaşıyorum.
50mm çapında şeffaf boruya kartları takmak için ray ekledim.
SMPS devresinin altında ölçüm yapan analog okuma yapıldığı için oluşabilecek gürültüden etkinmemesi için aliminyum levha ile filtre yaptım.
Sonra devreleri borunun içine yerleştirmeye başladım.
Led Aydınlatma Panelini sabitlemek için vidaladım.
Montajın ilk hali
Sonrasında anten için bir parça daha ekleyip montajı bitirdim.
Yazılım kısmına bakacak olursak:
//Kütüphaneler
#include #include
#include
#include
#include
#include
#include
//Kesmeler
#INT_RTCC
void RTCC_isr(void)
{
}
#INT_TIMER0
void TIMER0_isr(void)
{
}
#INT_TIMER1
void TIMER1_isr(void)
{
}
#INT_TIMER2
void TIMER2_isr(void)
{
}
#INT_TIMER3
void TIMER3_isr(void)
{
}
#INT_EXT
void EXT_isr(void)
{
intExtState=1;
}
#INT_EXT1
void EXT1_isr(void)
{
intExt1State=1;
}
#INT_EXT2
void EXT2_isr(void)
{
intExt2State=1;
}
//Seri Port veri alma
#INT_RDA
void RDA_isr(void)
{
hiX(intRda);
if (firstRdaInt==0)
{
firstRdaInt=1;
genCounter=0;
while(kbhit(commRf))
{
tempbuffer[genCounter]=getch(commRf);
genCounter++;
}
tempbuffer[genCounter]='\0';
fprintf(commdbg,"HMTRP Text: %s\r\n",tempBuffer);
}
else
{
fgets(rdaData,commRf);
}
loX(intRda);
intRdaState=1;
}
#INT_RDA2
void RDA2_isr(void)
{
hiX(intRda2);
fgets(rda2Data,commDbg);
loX(intRda2);
intRda2State=1;
}
//Ana Program Bloğu
void main()
{
setup_adc_ports(sAN15);
setup_adc(ADC_CLOCK_DIV_64|ADC_TAD_MUL_0);
/*
enable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(INT_TIMER3);
*/
hmtrp(disable);
bekle(tKisa);
hmtrp(enable);
bekle(tUzun);
//Example blinking LED program
fprintf(commDbg,"FiDeNet\r\n");
set_adc_channel(15);
delay_ms(2);
enable_interrupts(INT_RDA);
enable_interrupts(INT_RDA2);
//Başlangıç için debug bildirimleri
fprintf(commRf,"FiDeNet HMTRP TEST\r\n");
fprintf(commDbg,"Debug Port TEST\r\n");
//eepromWrTest();
//eepromRdTest();
//Led Driver Conf
digiPotInit();
digiPotReset();
adcCounter=0;
adcSum=0;
adcAvrg=0;
processPlanner=0;
ext_int_edge(0,H_to_L);
ext_int_edge(1,H_to_L);
ext_int_edge(2,H_to_L);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL);
dimmValue=20;
onOffState=1;
setDigiPotValue(dimmValue);
bekle(tOrta);
// Ayarlar faslı bittikten sonra interruptlar aktif olsun.
hiX(iAmAlive);
//Device ID var mı? kontrol et.
readDevIDOk=readDevID();
if (readDevIDOk==1)
{
fprintf(commDbg,"DevID:%s\r\n"devID);
}
else
{
fprintf(commDbg,"DevID:N/A\r\n");
}
//devID=
while(true)
{
//eğer ilk interrupt geldiğinde firstExtInt ilk defa çalışıyorsa intExtState değişkenlerini sıfırla.
//While döngüsü ilk turundan sonra interrupt gelirse onları al
if (firstExtInt==0)
{
intExtState=0;
intExt1State=0;
intExt2State=0;
}
if (intExtState==1)
{
intExtState=0;
hiX(general);
fprintf(commDbg," onOffState\r\n");
onOffstate=!onOffState;
if (onOffstate)
{
setDigiPotValue(dimmValue);
}
else
{
setDigiPotValue(0);
}
fprintf(commDbg," onOffState:%u dimm:%u\r\n"onOffState,dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt1State==1)
{
intExt1State=0;
hiX(general);
fprintf(commDbg,"Dimm -- \r\n");
if (dimmValue>3)
{
dimmValue-=3;
}
else
{
dimmValue=0;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt2State==1)
{
intExt2State=0;
hiX(general);
fprintf(commDbg,"Dimm ++ \r\n");
if (dimmValue<60 p=""> {
dimmValue+=3;
}
else
{
dimmValue=63;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if (intExt2State==1)
{
hiX(general);
fprintf(commDbg,"Dimm ++ \r\n");
if (dimmValue<60 p=""> {
dimmValue+=3;
}
else
{
dimmValue=63;
}
setDigiPotValue(dimmValue);
fprintf(commDbg,"Dimm:%u\r\n",dimmValue);
bekle(2*tOrta);
loX(general);
}
if( intRdaState==1)
{
intRdaState=0;
fprintf(commDbg,"rdaData: %s\r\n"rdaData);
strcpy(tempBuffer, myCommands[cAT].str);
//gelen Komut ATL ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"OK\r\n");
}
strcpy(tempBuffer, myCommands[cATLLev].str);
//gelen Komut ATLLev ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"ATLLev=%3.0f\r\n" adcAvrg);
}
strcpy(tempBuffer, myCommands[cATDmV].str);
//gelen Komut ATDmV ise
if (strcmp(rdaData,tempBuffer)==0)
{
fprintf(commRf,"ATDmV=%u\r\n" dimmValue);
}
strcpy(tempBuffer, myCommands[cATDm].str);
//gelen Komut ATDm ise
if (strncmp(rdaData,tempBuffer,5)==0)
{
strDataLen=strLen(rdaData);
equalSeq=0;
returnSeq=0;
for (genCounter=0;genCounter
if(rdaData[genCounter]=='=')
{
equalSeq=genCounter;
}
if(rdaData[genCounter]=='\r')
{
returnSeq=genCounter;
}
}
fprintf(CommDbg," EqualSeq=%u; ReturnSeq=%u\r\n,"equalSeq, returnSeq);
if((returnSeq>0)&&(equalSeq>0))
{
if (returnSeq-equalSeq==2)
{
tempBuffer[0]=rdaData[equalSeq+1];
tempBuffer[1]='\0';
}
else
{
tempBuffer[0]=rdaData[equalSeq+1];
tempBuffer[1]=rdaData[equalSeq+2];
tempBuffer[2]='\0';
}
dimmValue=atoi(tempBuffer);
setDigiPotValue(dimmValue);
fprintf(commRf,"ATDm=%u\r\n"dimmValue );
}
}
strcpy(tempBuffer, myCommands[cATID].str);
//gelen Komut ATID ise
if (strcmp(rdaData,tempBuffer)==0)
{
if (readDevIDOk==1)
{
fprintf(commRf,"ATID=%s\r\n"devID);
}
else
{
fprintf(commRf,"ATID=N/A\r\n");
}
}
}
if( intRda2State==1)
{
intRda2State=0;
fprintf(commDbg,"rda2Data: %s\r\n"rda2Data);
strcpy(tempBuffer, myCommands[cATMfc].str);
//gelen Komut ATMfc ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATMfc: %s\r\n" deviceData[mfc].str);
}
strcpy(tempBuffer, myCommands[cATHwID].str);
//gelen Komut ATHwID ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATHwID: %s\r\n" deviceData[cHWID].str);
}
strcpy(tempBuffer, myCommands[cATSw].str);
//gelen Komut ATSw ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATSw: %s\r\n" deviceData[cSWVersion].str);
}
strcpy(tempBuffer, myCommands[cATHwR].str);
//gelen Komut ATHwR ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATHwR: %s\r\n" deviceData[cHwR].str);
}
strcpy(tempBuffer, myCommands[cATLLev].str);
//gelen Komut ATLLev ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATLLev: %3.0f\r\n"adcAvrg);
}
strcpy(tempBuffer, myCommands[cReBoot].str);
//gelen Komut ReBoot ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ReBoot: %s\r\n" deviceData[cReBoot].str);
bekle(tUzun),
reset_cpu();
}
strcpy(tempBuffer, myCommands[cATID].str);
//gelen Komut ATID ise
if (strcmp(rda2Data,tempBuffer)==0)
{
fprintf(commDbg,"ATID=%s\r\n" devID);
}
strcpy(tempBuffer, myCommands[cATIDW].str);
//gelen Komut ATIDW= ise
if (strncmp(rda2Data,tempBuffer,5)==0)
{
strDataLen=strLen(rda2Data);
equalSeq=0;
returnSeq=0;
for (genCounter=0;genCounter
if(rda2Data[genCounter]=='=')
{
equalSeq=genCounter;
}
if(rda2Data[genCounter]=='\r')
{
returnSeq=genCounter;
}
}
fprintf(CommDbg," EqualSeq=%u; ReturnSeq=%u\r\n,"equalSeq, returnSeq);
strcpy(tempBuffer,"");
for (genCounter=0;genCounter<(returnSeq-equalSeq-1);genCounter++)
{
tempBuffer[genCounter]=rda2Data[genCounter+equalSeq+1];
}
tempBuffer[genCounter]='\0';
fprintf(CommDbg," tempBuffer %s\r\n,"tempBuffer);
if((returnSeq>0)&&(equalSeq>0))
{
strcpy(devID,tempBuffer);
writeDevId();
setDigiPotValue(1);
bekle(tUzun);
setDigiPotValue(0);
bekle(tUzun);
setDigiPotValue(1);
bekle(tUzun);
reset_cpu();
}
}
strcpy(tempBuffer, myCommands[cATIDC].str);
//gelen Komut ATIDC= ise
if (strcmp(rda2Data,tempBuffer)==0)
{
clearDevID();
fprintf(commDbg,"Device ID Silindi.");
bekle(tUzun);
reset_cpu();
}
}
processPlanner++;
if( (processPlanner % 1000)==0) //500 döngüde bir ADC ölçümü al
{
if (adcCounter>9)
{
adcCounter=0;
}
//delay_ms(tOrta);
adcArr[adcCounter]=read_adc();
//fprintf(CommDbg,"ADC Counter: %u ADC Val : %lu\r\n"adcCounter, adcArr[adcCounter]);
adcCounter++;
adcSum=0;
for (genCounter=0;genCounter<10 gencounter="" p=""> {
adcSum += adcArr[genCounter];
// fprintf(CommDbg,"genCounter: %lu ADC Val : %lu\r\n"genCounter, adcArr[genCounter]);
}
adcAvrg=adcSum /10;
fprintf(CommDbg,"ADC Avrg: %f\r\n"adcAvrg);
}
firstExtInt=1;
/*
output_high(Pin_C2);
delay_ms(DELAY);
adcVal=read_adc();
fprintf(CommDbg,"ADC Val on: %lu\r\n"adcVal);
*/
}
}
10>
//Kütüphaneler
//def.h
typedef int1 u1;
typedef unsigned int8 u8;
typedef volatile unsigned int8 vu8;
typedef unsigned int16 u16;
typedef volatile unsigned int16 vu16;
typedef unsigned int32 u32;
#define bekle(x) delay_ms(x)
#define rfEnable Pin_C1
#define rfConf Pin_C0
#define hiX(x) output_high(x)
#define loX(x) output_low(x)
#define disable 0
#define enable 1
#define mcpCs Pin_C5
#define mcpUd Pin_B3
#define tpsEn Pin_C4
#define debug
#define digiPotMaxValue 64
#define iAmAlive Pin_A0
#define intRda Pin_A1
#define intRda2 Pin_A2
#define general Pin_A3
//#define lcdBacklight Pin_B14
#define tSn 1000
#define tUzun 500
#define tOrta 100
#define tKisa 50
#define tMini 10
#define tMicro 1
//regs.h
/*Cihaz ile ilgili kullanılacak sabitler*/
enum sabitler{
cHWID,
cSWVersion,
cHwR,
mfc, //manifacturer
};
typedef struct hw_strings{
u8 sbt;
char str[20];
}myHwStrings;
myHwStrings const deviceData[10]={
cHWID,{"FD.RCL7W.MCU.R01"},
cSWVersion,{"1.0.0"},
cHwR,{"1.0.1"},
mfc,{"FiDeNet UKoSis"},
};
enum enumCommands{
cAT,
cATHwID,
cATSw,
cATHwR,
cATMfc, //manifacturer
cATID,
cATIDW,
cATIDC,
cATLLev,
cATDmV,
cATDm,
cReBoot,
};
typedef struct strctCommandText{
u8 sbt;
char str[20];
}myHwCommands;
myHwCommands const MyCommands[15]={
cAT,{"AT\r"},
cATHwID,{"ATHwID\r"},
cATSw,{"ATSw\r"},
cATHwR,{"ATHwR\r"},
cATMfc,{"ATMfc\r"},
cATID,{"ATID\r"},
cATIDW,{"ATIDW="},
cATIDC,{"ATIDC\r"},
cATLLev,{"ATLLev\r"},
cATDmV,{"ATDmV\r"},
cATDm,{"ATDm="}
cReBoot,{"ReBoot\r"}
};
char tempBuffer[30]; // id yazma için kullanılan ara değişken
u16 counterGen; //genel sayaç
u8 readDevIDOk=0;
u8 devIDAddr=10;
char devID[30];
u16 adcVal;
u16 adcArr[10];
u8 adcCounter;
float adcAvrg;
u16 adcSum;
u16 processPlanner;
u1 intRdaState=0;
u1 intRda2State=0;
u1 intExtState=0;
u1 intExt1State=0;
u1 intExt2State=0;
u1 firstExtInt=0;
u1 firstRdaInt=0;
char rdaData[100];
char rda2Data[100];
char strGen1[10];
u16 genCounter;
u8 genCounter2;
float temperature;
u16 backlightVal;
u8 digiPotValue;
u1 onOffState=0;
u8 dimmValue=0;
u8 strDataLen;
u8 equalSeq;
u8 returnSeq;
u8 recDimmValue;
//digipot.c
void digiPotInit(void)
{
output_drive(mcpUd ); //CS ve UD pinlerini çıkış yap
output_drive(mcpCs);
bekle(tMicro);
digiPotValue=31; // Açılış değeri
//i2c_yaz(digi_pot_addr,digi_pot_value);
}
void digiPotInc(u8 value)
{
u8 sayac;
//Pinleri yüksek yap
hiX(mcpCs);
hiX(mcpUd );
bekle(tMicro);
//CS pini ile işe başla
loX(mcpCs);
bekle(tMicro);
for (sayac=0;sayac!=value;sayac++)
{
loX(mcpUd );
bekle(tMicro);
hiX(mcpUd );
bekle(tMicro);
}
//CS pini yüksek yap işi bitir
hiX(mcpCs);
}
void digiPotDec(u8 value)
{
u8 sayac;
//Pinleri yüksek yap
hiX(mcpCs);
loX(mcpUd );
bekle(tMicro);
//CS pini ile işe başla
loX(mcpCs);
bekle(tMicro);
for (sayac=0;sayac!=value;sayac++)
{
hiX(mcpUd );
bekle(tMicro);
loX(mcpUd );
bekle(tMicro);
}
//CS pini yüksek yap işi bitir
hiX(mcpCs);
}
void setDigiPotValue(u8 value)
{
u8 sayac;
//digi_pot_value=i2c_oku(digi_pot_addr);
//pwm_value değeri sensor okuması kısmında hata algılanırsa karşıma çıkacak
//eğer bu değer 0 dan farklı ise led voltajlarını o zaman kontrol edeceğim. Böylece
//sistem kapalı iken led voltajı hatası (kısadevre ) vermeyecek
//pwm_value=value;
if(value
{
if(value>digiPotValue)
{
#IFDEF debug
fprintf(CommDbg,"buyuk digi_pot_value: %u value:%u\r\n"digiPotValue,value);
#ENDIF
sayac=value-digiPotValue;
digiPotInc(sayac);
digiPotValue=value;
//i2c_yaz(digi_pot_addr,digi_pot_value);
}
if(value
{
#IFDEF debug
fprintf(commDbg,"kucuk digi_pot_value: %u value:%u\r\n"digiPotValue,value);
#ENDIF
sayac=digiPotValue-value;
digiPotDec(sayac);
digiPotValue=value;
//i2c_yaz(digi_pot_addr,digi_pot_value);
}
}
else
{
#IFDEF debug
fprintf(commDbg,"digi_pot_max_value out of range\r\n");
#ENDIF
}
#IFDEF debug
fprintf(commDbg,"digi_pot_value: %u\r\n"digiPotValue);
#ENDIF
if(digiPotValue==0)
{
loX(tpsEn);
#IFDEF debug
fprintf(commDbg,"Pin_drv_enable:0 \r\n");
#ENDIF
}
else
{
hiX(tpsEn); //Sabit akım led sürücü devresini Pin_drv_enable 1 yapılıp açılır
}
}
void digiPotReset(void)
{
digiPotDec(70); // digi_pot_hangi değerde olursa olsun değeri 0'a çek
digiPotValue=0;
loX(tpsEn);
//i2c_yaz(digi_pot_addr, digi_pot_value);
}
//func.c
void hmtrp(u8 state)
{
if (state==disable)
{
hiX(rfEnable);
hiX(rfConf);
}
if(state==enable)
{
loX(rfEnable);
hiX(rfConf);
}
}
Yazılım kısmı henüz bitmedi. Her cihaza tekil cihaz numarası (unique ID) verilip ya yana iki cihazın ayrı ayrı kontrolünü sağlamak için geliştirmeler yapılacak.
Bunun için bilgisayar arayüzünde de iyileştirmeler yapılacak.
Yapınca onları da eklemeyi planlıyorum.
Bunun için bilgisayar arayüzünde de iyileştirmeler yapılacak.
Yapınca onları da eklemeyi planlıyorum.