Аналоговые входы на arduino: atmega32?

whoim
Offline
Зарегистрирован: 03.11.2011

 Не получается сделать простейший вольтметр через 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 на аналоговый режим?

76region
Offline
Зарегистрирован: 08.07.2011

whoim пишет:

На analogRead перепробовал все, либо 0 либо хаотичные значения в районе 60-90 из 255 (/4). 

Что я мог упустить? Может, надо как то особым образом переключить ADC на аналоговый режим?

А резисторы к выводам подключал когда искал входы (PA0-PA7 аналоговые входы) , на землю чтоб было 0 или на "+" чтоб 255? Если оставить выводы в "воздухе" как раз будет случайное значение при analogRead

whoim
Offline
Зарегистрирован: 03.11.2011

76region пишет:

whoim пишет:

На analogRead перепробовал все, либо 0 либо хаотичные значения в районе 60-90 из 255 (/4). 

Что я мог упустить? Может, надо как то особым образом переключить ADC на аналоговый режим?

А резисторы к выводам подключал когда искал входы (PA0-PA7 аналоговые входы) , на землю чтоб было 0 или на "+" чтоб 255? Если оставить выводы в "воздухе" как раз будет случайное значение при analogRead

Пробовал на гнд, но не все. Надо по порядку еще раз попробовать. Я правильно понимаю, что один из ADC подтягиваю на гнд 10 ком, пишу в него цифрой HIGH и после читаю analogRead?

76region
Offline
Зарегистрирован: 08.07.2011

 нет не надо HIGH,  просто analogRead

76region
Offline
Зарегистрирован: 08.07.2011
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 не используются

 

 

whoim
Offline
Зарегистрирован: 03.11.2011
Serial.begin(9600);              //  установка связи по serial

имеет отношение к этому делу?

Вроде так analogPin = 0 нога -40,1=нога -39, 2 =нога- 38, 3= нога- 37, 4= нога- 36 и пин 5= нога 35 всего 6 шт а PA6 и PA7

ну да.. попробую.

76region
Offline
Зарегистрирован: 08.07.2011

Serial.begin()

Инициирует последовательное соединение и задает скорость передачи данных в бит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. При соединение через порты вход/выхода 0 и 1 могут быть использованы другие значения скорости, требуемые устройством с которым будет осуществляться обмен данными.

 

whoim
Offline
Зарегистрирован: 03.11.2011

 В общем так..

Нога микросхемы = Название ноги = пин в АналогРеад

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) Вывод - цифровые и аналоговые пины в Ардуино номерами не совпадают при одних ногах (кто ж знал!)

whoim
Offline
Зарегистрирован: 03.11.2011

 Пойдем дальше. Нужен вольтметр. Вот как работает:

int Rs = 1000; //номинал шунтирующего резистора (между GND и аналоговым входом)
byte Vo = 5.00; //опорное напряжение (5в)
lcd.print((Vo * analogRead(7)) / Rs);

Вопрос: как в математике теперь учесть резистор делителя, который будет втыкаться между измеряемым + и входом, при наличии шунтирующего?

whoim
Offline
Зарегистрирован: 03.11.2011

Разобрался, спасибо интернету и школьному курсу математики.

 

    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("В");