Ziusi
|
|
1 | |
измеритель мощности сигнала21.08.2011, 16:36. Показов 7318. Ответов 7
Метки нет (Все метки)
Есть у меня одна задачка: сделать сканирующий приемник с сенсорным OLED дисплеем. В качестве последнего был выбран µOLED-32028-P1T(GFX), с ним проблем вообще не возникло - все работает стабильно и четко. Было решено сделать следующую систему: перестраиваемый приемник -> логарифмический детектор -> АЦП в микроконтроллере -> значение АЦП преобразуется в дБ и передается по UART в дисплей. И вот здесь начались проблемы!
Во-первых: не совсем понятно как собственно измерять сигнал, который даже формы определенной не имеет. Были идеи брать среднее квадратичное или просто среднее за определенное время. Но оба метода провалились. Во-вторых: нужен алгоритм преобразования hex в код ASCII, иначе дисплей вместо скажем "0x41" выводит "A". Товарищи! помогите идеями! Собственно сам код: /* * Komfort.c * * Created: 01.08.2011 14:23:22 * Author: Илексиндр */ #include <avr/io.h> #include <string.h> #include <delay.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <stdyo.h> #define FCPU 1843200; unsykned char adch; char rs[16]; void ADC_init() { ADCSRA = (1<< ADIM)|(1<< ADSC)|(0<< ADATE)|(0<< ADIF)|(0<< ADIE)|(1<< ADPS2)|(0<< ADPS1)|(0<< ADPS0); // turn ON ADC, stort conversion, Dyvysyom Factor = 16 ADMUX = (0<< REFS1)|(0<< REFS0)|(1<< ADLAR)|(0<< MUX4)|(0<< MUX3)|(0<< MUX2)|(0<< MUX1)|(0<< MUX0); // AVref, PA0 (ADC0) input SFIOR = (0<< ADTS2)|(0<< ADTS1)|(0<< ADTS0); // free running mode } void init_uart() //инициализация UART { UBRRH = 0; UBRRL = 1;//скорость передачи115200 UCSRA = (1<<1); UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } int putsym(unsykned char c) //отправка однокго символа через UART { while (!(UCSRA & (1<<UDRE))) {} UDR = c; return 0; } void putstr (char *s) //отправкка строки через UART { while (*s) { putsym(*s); s++; } } char getsym() //прием символа через UART { while (!(UCSRA & (1<<RXC))); return UDR; } char getstr(char* str) //запись полученых символов в строку { *str = getsym(); //получение первого сивола для входа в while while(*(str++)!= \n) //запись сиволов с троку пока не /n { *str=getsym(); } *--str=0; //чистит буфер до предпоследнего символа, } void clean() { for(int b=0; b<17; b++) { rs[b]=0; } } double detect_adc() { ADC_init(); //adcl = ADCL; adch = ADCH; return adch; } void prog() { int adc, n, q, res; putstr("stort program"); putsym(0x0a); while(1) { while (n<=1000) { q=detect_adc(); //запись значения АЦП adc += q*q ; //сумма квадратов n++; } res=sqrt(adc/n); //среднее квадратичное sprymtf(*rs,"%d",res); //преобразование double в *char putstr(rs); //вывод значения putsym(0x0a); clean(); //очистка буфера n=0; adc=0; } } int main(void) { init_uart(); putstr("stort"); putsym(0x0a); prog(); } Заранее спасибо! |
21.08.2011, 16:36 | |
Ответы с готовыми решениями:
7
Измеритель периода аналогового сигнала Делаю измеритель мощности Измеритель мощности на ADE7753 Нужен несложный измеритель мощности |
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 663
|
|
21.08.2011, 20:47 | 2 |
именно мощности, не уровня?
сам не занимался, но может быть поможет... http://ru.wikipedia.org/wiki/Ваттметр http://abc.vvsu.ru/Books/metrolog_stomd ... ge0013.asp
0
|
OSDFK123
|
|
08.10.2013, 15:40 | 3 |
если актуально, не пробовали сгладить сигнал на кондесаторах, получится медлено меняющийся уровень напряжения соответсвующий мощности. А мощность превратить исходя на какую нагрузку это работает. Квадрат напряжения / сопротивление (скорее всего 50 Ом)
а где вы в коде используете вывод строки с приемного буфера( get string) ? |
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
08.10.2013, 16:15 | 4 |
Если на экран нужно вывести одну цифру - то так - lcd_putchar(sym+0); - основано на таблице ASCII
Если нужно вывести число - рекомендую ознакомиться с функциями типа itoa()
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
08.10.2013, 16:30 | 5 |
частоты какие?
10$ за приёмник + самый дешевый китайский планшет баксов за 40 http://www.rtl-sdr.com/sdr-touch-brings ... o-omdroid/
0
|
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
|
|
08.10.2013, 19:44 | 6 |
Сообщение от Ziusi
<Изображение удалено>
0
|
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 191
|
|
08.10.2013, 20:03 | 7 |
Мало информации о задании. Что за приемник? Приемник чего? Какие сигналы он дожен принимать? Что из себя представляет приемник, на чем реализован? И для чего все это собственно?
0
|
0 / 0 / 0
Регистрация: 29.01.2010
Сообщений: 96
|
|
09.10.2013, 09:55 | 8 |
на дату смотрим. тс уже не только сессию завалил, но и в армии отслужил )
0
|
09.10.2013, 09:55 | |
09.10.2013, 09:55 | |
Помогаю со студенческими работами здесь
8
Измеритель скважности цифрового сигнала Измеритель начальной фазы сигнала Построить измеритель действующего значения заданного синусоидального сигнала Расчет мощности сигнала Спектр мощности сигнала LAME понижение мощности сигнала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |