Аналоговые входы на arduino: atmega32?
- Войдите на сайт для отправки комментариев
Не получается сделать простейший вольтметр через analogRead(), все пины уже перепробовал..
Плата: http://robozone.su/2008/06/01/universalnyjj-robo-kontroller-mrc-40.html
Бутлоадер и доработки arduino software: http://www.thaieasyelec.net/index.php/Arduino/ATmega32-Dev-Board-Arduino-Diecimila-Compatible-DIP-28-DIP-40-/p_133.html
Я правильно понимаю, что мне нужны входы ADC? Методом светодиодного тыка и digitalWrite нашел почти все пины. Не нашел PB6,PB7, PA0, PA1 (не отзываются на плате). На analogRead перепробовал все, либо 0 либо хаотичные значения в районе 60-90 из 255 (/4). Пробовал устанавливать HIGH и LOW на пин, пробовал переключать на INPUT - нет эффекта.
Что я мог упустить? Может, надо как то особым образом переключить ADC на аналоговый режим?
На analogRead перепробовал все, либо 0 либо хаотичные значения в районе 60-90 из 255 (/4).
Что я мог упустить? Может, надо как то особым образом переключить ADC на аналоговый режим?
А резисторы к выводам подключал когда искал входы (PA0-PA7 аналоговые входы) , на землю чтоб было 0 или на "+" чтоб 255? Если оставить выводы в "воздухе" как раз будет случайное значение при analogRead
На analogRead перепробовал все, либо 0 либо хаотичные значения в районе 60-90 из 255 (/4).
Что я мог упустить? Может, надо как то особым образом переключить ADC на аналоговый режим?
А резисторы к выводам подключал когда искал входы (PA0-PA7 аналоговые входы) , на землю чтоб было 0 или на "+" чтоб 255? Если оставить выводы в "воздухе" как раз будет случайное значение при analogRead
Пробовал на гнд, но не все. Надо по порядку еще раз попробовать. Я правильно понимаю, что один из ADC подтягиваю на гнд 10 ком, пишу в него цифрой HIGH и после читаю analogRead?
нет не надо HIGH, просто analogRead
int analogPin = 3; // номер порта к которому подключен потенциометр это нога 37 атмеги int val = 0; // переменная для хранения считываемого значения void setup() { Serial.begin(9600); // установка связи по serial } void loop() { val = analogRead(analogPin); // считываем значение Serial.println(val); // выводим полученное значениеВроде так analogPin = 0 нога -40,1=нога -39, 2 =нога- 38, 3= нога- 37, 4= нога- 36 и пин 5= нога 35 всего 6 шт а PA6 и PA7 в Arduino не используются
имеет отношение к этому делу?
Вроде так analogPin = 0 нога -40,1=нога -39, 2 =нога- 38, 3= нога- 37, 4= нога- 36 и пин 5= нога 35 всего 6 шт а PA6 и PA7
ну да.. попробую.
Serial.begin()
Инициирует последовательное соединение и задает скорость передачи данных в бит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. При соединение через порты вход/выхода 0 и 1 могут быть использованы другие значения скорости, требуемые устройством с которым будет осуществляться обмен данными.
В общем так..
Нога микросхемы = Название ноги = пин в АналогРеад
33 = PA7 = 0
34 = PA6 = 1
35 = PA5 = 2
x = x = 3 (не нашлась)
37 = PA3 = 4
38 = PA2 = 5
39 = PA1 = 6
40 = PA0 = 7
1) Вывод - PA4 я сжег
2) Вывод - цифровые и аналоговые пины в Ардуино номерами не совпадают при одних ногах (кто ж знал!)
Пойдем дальше. Нужен вольтметр. Вот как работает:
Вопрос: как в математике теперь учесть резистор делителя, который будет втыкаться между измеряемым + и входом, при наличии шунтирующего?
Разобрался, спасибо интернету и школьному курсу математики.
float Rs = 1000.0; //номинал шунтирующего резистора (между GND и аналоговым входом) float Rd = 10000.0; //номинал резистора делителя (между входом и измеряемым напряжением) float Vo = 5.00; //опорное напряжение (5в) U2 = Vo * analogRead(7) / Rs; //Напряжение без Rd lcd.setCursor(0,1); lcd.print("U2: "); lcd.print(U2); lcd.print("В"); U1 = U2 / ( Rs / ( Rd + Rs )); //Расчитываем по делителю lcd.setCursor(0,2); lcd.print("U1: "); lcd.print(U1); lcd.print("В");