이것 좀 봐주세요..ㅠㅠ;;
가온누리
질문 제목 : 질문 내용 :
자동으로 시스템을 돌아가게만든것인데요..
저두 받은거라..ㅠㅠ;;아래 코드 알고리즘인데...이거는 안돌아간다고 하더라구요.ㅠㅠ;;
그럼 어케 해야 할까요?ㅠㅠ;;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 * (adcperdbaveragingfactor) ; 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 thenn 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) / (adcperdb1) ; 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
-
딸기향
글제목을 말하는 겁니다.
-
아잉
그런거도 잇나요...
그럼 아이콘이 특수한 아이콘 별 아이콘 하면 탈퇴 되나요?님처럼요..? -
볼수록매력
혹시 글 제목에 불필요한 특수문자를 사용하면 탈퇴가 된다는 사실을 알고 있나요?
-
여신
ㅇㅇ네...중간중간에 정의 하는게 빠진건데
돌려져야한데ㅡㅡ알고리즘만 쓴거에요.
ㅜㅜ -
뿡뿡
c언어가맞나요?
-
sin
저거..마이크로컨트롤러...에 서 작업하는거에요.
즉, atmel 사에서 나온거요. -
달달항사탕
괄호는 전부생략에, c 가맞는지도 의문이네요 ㅎㅎ
질문게시판 잘못올리신건아닌지?
게다가 무슨시스템이엇는지,
어떻게 돌아갓어야햇는지 아무것도 모르는데
돌아가게만들어달라..
답변 기다리시는것보다
다시 정성스럽게 질문하시는게 훨씬 빠르겠네요.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2694069 | unsigned 질문입니다. | 힘차 | 2025-05-07 |
2694012 | 전공 비전공자 개발자 (10) | 말글 | 2025-05-07 |
2693984 | 오버로딩이 무엇인가요? (2) | 헛매질 | 2025-05-07 |
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |