질문과 답변

소프트웨어 ★프로그래머님께...헬프점여~~~~

2014.05.26 09:35

거거거3 조회:1414

avr studio4로 프로그램한건데요..

중간중간에 빠진게 있는데여..이걸 돌릴려면 완성되어야 한다는데요.

저도 받은거라.ㅠㅠ;;이걸 돌아 갈 수 있도록 첨가? 부탁드려도 될까요?ㅠㅠ;;

 

 

Hardware timer
Trigger_Timer ; 1sec
Drop_Timer ; 3sec
Button_Timer(time) ; 0~1sec
Constant
ADCperDB = 0x000A ; 1dB = 0x000A (ADC)
AGCreference = 0x0316 ; -10dBm level
Averagingfactor = 3 ; averaging factor 2^3
Alternateprotector = 3 * (ADCperDB<Averagingfactor) ; extended 3dB
Global Variable
unsigned char; Button, Buttonprocess, Triggercolor, Manualmode, AGCprocessdone
signed short; Phaseoffset, Phaseoffsetzero, HMC5, HMC6
unsigned long Forwardpower, Reversepower
signed long; Frequency, Returnloss, AD5
unsigned long long Forwardpoweraverage, Reversepoweraverage ; extended by Averagingfactor
Function
Load_Phaseoffsetzero
Value = read from EEPROM
return Value
Read_ADC(port)
return ADC(port) ; 10bit
Phase_Adjust(Value) ; Phase limit 6bit (0x00 ~ 0x3F)
while Value < 0x00
Value += 0x40
while Value > 0x3F
Value -= 0x40
return Value
Check_Drop
return Drop
Check_Frontbutton
return "Auto/Manual", "DAC up", "DAC down", "Phase Offset up", "Phase Offset down", "Phase Offset zero", "no button"
procedure
Save_Phaseoffsetzero
save Phaseoffsetzero to EEPROM
Write_AD5
write AD5 ; 16bit
Write_HMC5&HMC6
unsigned char Value
Value = not HMC5 ; negative logic
HMC6 = Phase_Adjust(Phaseoffsetzero + Phaseoffset)
write Value & Value & HMC6 ; 6bit + 6bit + 6bit
Display_Attenuator(Color)
usingend short; Value
switch Color
case "red"
turn on red LED
break
case "yellow"
turn on green LED 63
turn on red LED 315.0
break 63
case "default"
turn off green LED
turn off red LED
break
Value = 5 * HMC5 ; 0x3F -> 315
display Value to front pannel LED window ; 0x3F -> 315 -> "31.5"
Display_Trigger
switch Triggercolor
case "red"
turn on red LED
break
case "green"
turn on green LED
break
case "default"
turn off green LED
turn off red LED
break
Display_DAC(Led)
switch Led
case "up"
turn on up LED
break
case "down"
turn on down LED
break
case "manual"
turn on up LED
turn on down LED
break
case "default"
turn off up LED
turn off down LED
break
display AD5 to front pannel LED window ; -32768 ~ 0 ~ +32767
Display_Returnloss
signed long; Value
Value = Returnloss / ADCperDB ; ADC -> dB
display Value to front pannel LED window ; +12.5 dB - 2.5 dB
Display_Phaseoffset(Value)
Value *= 5.625
display Value to front pannel LED window ; ±5.6 °
Button_Reaction
switch Manualmode
case "auto"
switch Button
case "Auto/Manual"
Manualmode = "manual"
Display_DAC("manual")
break
case "Phase Offset up"
Phaseoffset += 1
if Phaseoffset > 0x3F then phaseoffset = 0x3F ; phase offset limit
Display_Phaseoffset(Phaseoffset)
Write_HMC5&HMC6
break
case "Phase Offset down"
Phaseoffset -= 1
if Phaseoffset < -0x3F then Phaseoffset = -0x3F ; phase offset limit
Display_Phaseoffset(Phaseoffset)
Write_HMC5&HMC6
break
case "Phase Offset zero"
Phaseoffsetzero += Phaseoffset
Phaseoffset = 0
Phaseoffsetzero = Phase_Adjust(Phaseoffsetzero)
display_phaseoffset(Phaseoffsetzero)
Save_Phaseoffsetzero
break
case "default"
Display_Phaseoffset(Phaseoffset)
break
break
case "manual"
switch Button
case "Auto/Manual"
Manualmode = "auto"
Display_DAC("auto")
break
case "DAC up"
AD5 += 1
if AD5 > 0xFFFF then AD5 = 0xFFFF ; AD5 limit
Display_DAC("manual")
Write_AD5
break
case "DAC down"
AD5 -= 1
if AD5 < 0x0000 then AD5 = 0x0000 ; AD5 limit
Display_DAC("manual")
Write_AD5
break
case "default"
break
break
case "default"
break
Button_Process
static unsigned long; Counter, Counterbase, Speed, Debouncecounter
Button = Check_Frontbutton
if Buttonprocess = "no button" then
if Button <> "no button" then ; 1st button
Debouncecounter = 0x000F
Buttonprocess = Button
Counterbase = 10
Counter = Counterbase
Speed = 0.5sec
turn on Button_Timer(Speed)
else
if Button = "no button" then ; button release
if Debouncecounter = 0 then
Buttonprocess = "no button"
else ; debounce
Debouncecounter -= 1
else if Button <> Buttonprocess then ; improper button
Buttonprocess = "no button"
turn off Button_Timer
else if Button_Timer not finished then ; button pressing
Debouncecounter = 0x000F
else ; button accepted
Button_Reaction
Counter -= 1
if Counter = 0 then
Counterbase <= 2
Speed >= 2
switch Manualmode
case "manual"
Counterbase = minimum(Counterbase, 10 * 1024)
Speed = maximum(Speed, 0.5sec / 1024)
break
case "auto"
Counterbase = minimum(Counterbase, 10 * 4)
Speed = maximum(Speed, 0.5sec / 4)
break
Counter = Counterbase
turn on Button_Timer(Speed) ; repeatitive action protect
AGC_Process
signed Attenuatoraverage
unsigned long Forwardvalue, Reversevalue
signed long Alternatecompensation
Alternatecompensation = Forwardpoweraverage - (Forwardpower + Alterateprotector) ; Alternate mode protection
Alternatecompensation = maximum(Alternatecompensation, 0)
Forwardvalue = Forwardpower + Alternatecompensation
Reversevalue = Reversepower + Alternatecompensation
Forwardpoweraverage *= (2^Averagingfactor - 1) ; averaging
Forwardpoweraverage += Forwardvalue
Forwardpoweraverage >= Averagingfactor
Reversepoweraverage *= (2^Averagingfactor - 1)
Reversepoweraverage += Reversevalue
Reversepoweraverage >= Averagingfactor
Forwardvalue = Forwardpoweraverage > Averagingfactor ; reduced Forwardpoweraverge
Attenuatoraverage = (Forwardvalue - AGCreference) / (ADCperDB>1) ; AGC reference, ADC -> 0.5dB conversion
if (Attenuatoraverage > (HMC5 + 1)) or (Attenuatoraverage < (HMC5 - 1)) then ; hysteresis ±0.5dB
HMC5 = Attenuatoraverage
if HMC5 >= 0x3F then ; high power
HMC5 = 0x3F
Display_Attenuator("red")
else if HMC5 <= 0 then ; low power
HMC5 = 0x00
Display_Attenuator("yellow")
else ; normal power
Display_Attenuator("normal")
Write_HMC5&HMC6
Reversevalue = Reversepoweraverage > Averagingfactor ; reduced Reversepoweraverage
Returnloss = Forwardvalue - Reversevalue
Display_Returnloss
AGCprocessdone = "done"
AFC_Process
unsigned char; Led, Counter, Step
signed char; UpDown
static unsigned char; i
unsigned char; j
static signed char; History[3..0]
i += 1
if i > 3 then i = 0
Counter = 0 ; check resonance
for (j = 0; j <= 3; j++)
if History[j] < 0 then Counter++
if (Counter = 4 or Counter = 0) then
Step = 0x0F ; wide step
else
Step = 0x01 ; narrow step
if Returnloss > (3 * ADCperDB) then ; detector select
Frequency = Read_ADC(forward_frequency_port) - Read_ADC(reverse_frequency_port)
if Frequency > 0 then ; low frequency
UpDown = 1
else if Frequency < 0 then ; high frequency
UpDown = -1
else
Frequency = Read_ADC(PFD_port)
if Frequency > 0x02FF then ; high frequency
UpDown = -1
else if Frequency < 0x00FF then ; low frequency
UpDown = 1
History[i] = UpDown
UpDown *= Step
AD5 += UpDown
if AD5 > 0xFFFF then
Led = "up"
AD5 = 0xFFFF
else if AD5 < 0x0000 then
Led = "down"
AD5 = 0x0000
else
Led = "normal"
Write_AD5
Display_DAC(Led)
Interrupt_Trigger_Process
Forwardpower = Read_ADC(forward_port) < Averagingfactor ; extended Forwardpower
Reversepower = Read_ADC(reverse_port) < Averagingfactor ; extended Reversepower
AGCprocessdone = "not done"
if Manualmode = "auto" then
AFC_Process ; AFC
switch Check_Drop
case "drop"
Triggercolor = "red" ; drop trigger
Display_Trigger
turn on Drop_Timer
break
case "default" ; normal trigger
break
turn on Trigger_Timer
clear triggered
main()
HMC5 = 0x3F ; 31.5dB Attenuation
Phaseoffsetzero = Load_Phaseoffsetzero
HMC6 = Phaseoffsetzero
Write_HMC5&HMC6
Display_Attenuator("red")
AD5 = 0x8000 ; AFC 0V out
Write_AD5
Display_DAC("auto")
Forwardpoweraverage = 0x03FF < Averagingfactor ; extended maximum power (10bit < x)
Reversepoweraverage = 0x03FF < Averagingfactor
Buttonprocess = "no button" ; no Button
Manualmode = "auto" ; auto mode
AGCprocessdone = "done"
Initialize interrupt ; turn on Trigger interrupt
while(1) ; infinite loop
if Drop_Timer not finished then ; drop trigger
Triggercolor = "red"
else if Trigger_Timer not finished then ; nomal trigger
Triggercolor = "green"
else ; no trigger
Triggercolor = "no trigger"
Display_Trigger
if AGCprocessdone = "not done" then
AGC_Process
Button_process

번호 제목 글쓴이 조회 등록일
[공지] 질문과 답변 게시판 이용간 유의사항 gooddew - -
49376 기 타| 카리스마조님 Ultimate PE 배경화면 질문 [2] 사나이가는 1818 05-30
49375 기 타| <word파일> 삭제 후 복구 그리고 파일손상 해결방안? [4] 염감-2 1214 05-30
49374 하드웨어| 물리적하드 2개 윈도우 64비트 설치시 하드가? [6] 하얀나비 1292 05-30
49373 소프트웨어| CD 데이터를 PC에 자동 복사하기 [1] mandoo 1155 05-30
49372 소프트웨어| directory snoop 문의... 수앤수 1188 05-30
49371 윈 도 우| 윈8에서 Shutdown 명령때 이 메시지 안뜨게 하는 방법 없나요? [7] 메리아 1738 05-30
49370 윈 도 우| 백업/복구 소프트웨어, 파티션사이즈 변경하면 [4] CT 1260 05-30
49369 소프트웨어| 아크로벳 XI 프로가 자꾸 풀립니다 [8] joe 4043 05-30
49368 윈 도 우| WTG를 PE로 만들기 위한 과정 문의 라푸아 1142 05-30
49367 소프트웨어| avg백신에 시작프로그램으로 ctfmon.exe 이거 삭제해도 되나요 [2] 8.1 1412 05-30
49366 윈 도 우| unsecapp.exe 이게 도대체 무슨 프로세스 입니까?? [3] 8.1 8313 05-30
49365 윈 도 우| 익스플로어에는 광고차단 기능이 없을까요? [3] 클라크 1279 05-30
49364 하드웨어| 요즘껀, 부팅로고가 모니터 한쪽에만 뜨나요? [2] 트루스토리 1547 05-30
49363 윈 도 우| 이거이유가뭐나요.? 꼭,클릭두번해야 하네요. [1] 어사또 1094 05-30
49362 하드웨어| MBR GPT 혼용문제 문의입니다 [5] 메리아 1854 05-30
49361 윈 도 우| 8.1 폴더 소유자 되돌리는 방법이 있나요? 제로스님 1051 05-30
49360 기 타| 8인치 소형 아톰컴퓨터에서도 vhd로 멀티부팅 되나요? [2] LittleHeav 1450 05-30
49359 윈 도 우| 사타2, 사타3 OS 체감성능 차이 많은가요? [4] CT 1723 05-30
49358 기 타| 백업과 복구를 한번에 할 순 없을까요? [4] 루루라라 1146 05-30
49357 기 타| TrueCrypt나 FileVault2로 시스템/드라이브 전체 암호화 하... [6] rt402 1068 05-30
XE1.11.6 Layout1.4.8