-
Постов
2 227 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Весь контент Дмитрий Вас
-
Ага, канал нужно менять как то по другому.
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
теперь такой вопрос. измерение тока хочу сделать с помощью усилителя в микроконтроллере. не понятен алгоритм работы, в дш не нашел описания. все что я понял так это: обнулем канал, задаем канал, запускаем преобразование, получаем результат, и последовательно выполняется преобразование по каналам. //вычисляем значение напряжения unsigned int voltage_dimension(unsigned char channel) { static unsigned long int value; Start_conv_channel(channel); while((ADCSRA & (1<<ADSC)));// ждем окончание преобразования АЦП value = ADC; volt = value*500>>10; return volt; } //вычисляем значение тока unsigned int current_dimension (unsigned char channel) { static unsigned long int value; Start_amplified_conv_channel(channel); while((ADCSRB & (1<<ADSC)));// ждем окончание преобразования АЦП value = ADC; amper = value*100>>10; return amper; } #define Start_amplified_conv() (ADCSRB |= (1<<ADSC) )//стр 253 дш (- By setting the ADSC (ADC Start conversion) bit in the ADCSRB register on AT90PWM2B/3B.) #define Start_amplified_conv_channel(channel) (Select_adc_channel(channel), Start_amplified_conv() ) может нужно каждый раз останавливать измерение? #define Stop_amplified_conv() (ADCSRB &= ~(1<<ADSC) )
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
все нашел причину, сам дурак... на опорное приходит 4в вместо 5
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@COKPOWEHEU хорошая идея. ацп выдал при 3,3в 830 а должен был 676. выходит что и те 5в он показывал скорей просто что больше не мог. спасибо есть о чем думать
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@Alexя не знаю как это сделать в отрыве от камня
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Сейчас времени совсем не хватает. Попробовал сдвиг: ADC*500>>10; При 5в получил 499, это меня устраивает. Но при 3,3в так же 400. Так это уже без деления! Остатков нет! Чтобы округлять. Отладка всего не доступна на моем камне. Пробовать только кусок кода на другом камне смысла не вижу. Попробую другой канал АЦП и сделать через другую переменную которую изначально приравнять к нулю. u_int a=0; a=ADC; a*500>>10;
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
гениально. просто и гениально. частота 62кгц, получается по расчетам или вы имеете ввиду среднее высчитать?
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@dasZebraвсе равно мои вычисления так не проходят. В моем случае я получаю результат 400. @mail_robotЯ вывожу поразрядно с виртуальной точкой. Я получаю 500 и вывожу на экран 50,0 чтобы предел был 50 вольт. Я должен получить число 330 вывести на экран 33,0 при 3,3 вольтах на входе. Такая задумка. Но получаю 400. И не укладывается в голове в каком месте идёт округление.
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Я в курсе что целочисленная отбрасывает остаток. Но... ADC= 330*1023/500= 675,18 округляем до целочисленного 675. Теперь идём от обратного. Vin = 675*500/1023= 329,9 округляется до целочисленного 330. По любому 3,3 вольта должно выдать. Видимо я не до конца понимаю как работают эти переменные.
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Перечитал по переменным. Ничего нового не узнал...
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Вроде бы все ясно и понятно мне с переменными. Честно не понятно что не так?
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@Влад Иванович что не так то опять? unsigned long int value
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@MechanicV пока на авр, смотрел в сторону стм32 но меня питон зацепил, со своим машинным зрением и машинным обучением
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
интересен процесс, да. не профессионально конечно, но весьма интересно
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
и все же. при 5в получаю 500, при 3,3в получаю 400. использовал и 8 бит и 10 бит, все равно одинаково. unsigned int ADC_voltage_result(unsigned long int value) { volt = value*500/1023; return volt; } unsigned int volt; вопрос почему округляет?
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Все разобрался, опять невнимательность
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
теперь другая проблема, измеряет пару секунд (цифры меняются) и останавливается. while (1)// это в основном цикле { lcd_gotoxy(0,0); lcd_chisla(ADC_voltage_result(ADC_read(5))); }
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
unsigned int это от 0 до 65535, что туда не влазит? Все... Дошло. В милливольтах!
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@Влад Иванович не понял. умоляю разъясните
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
они у меня все unsigned int, причем и функции принимают такие "форматы"
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
@_abk_ кого куда?
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
не-а все равно чушь получается
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
но она у меня unsigned int volt;//измеренное напряжение аааа у меня значение ацп 8бит
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
ставлю вот так volt = value*500/255; получаю 242 ставлю так volt = value*50/255; получаю 50 что за нах?
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом:
-
Что бы определять где мы находимся нужно правильно посчитать. Какое значение будет соответствовать 5в и исходя из этого считать.
- 8 951 ответ
-
- Микроконтроллер
- МК
-
(и ещё 2 )
C тегом: