Технический форум по робототехнике.
bod » 12 сен 2011, 22:10
Добрый день!
Требуется помощь! Не считываются показания цифрового компаса.
Имеется:
Arduino Uno SMD
IO Expansion Shield For Arduino(V5)
Цифровой компас CMPS-03
Компас может отдавать значения по интерфейсам l2c и PWM.
Пытаюсь считать значения PWM.
Из документации:
The PWM signal is a pulse width modulated signal with the positive width of the pulse representing the angle.
The pulse width varies from 1mS (0° ) to 36.99mS (359.9° ) – in other words 100uS/° with a +1mS offset. The
signal goes low for 65mS between pulses, so the cycle time is 65mS + the pulse width - ie. 66ms-102ms. The
pulse is generated by a 16 bit timer in the processor giving a 1uS resolution, however I would not recommend
measuring this to anything better than 0.1° (10uS). Make sure you connect the I2C pins, SCL and SDA, to the
5v supply if you are using the PWM, as there are no pull-up resistors on these pins.
Компас подлключен на цифровой порт 3. Проблема в том , что на вход всегда идет "1".
Проверял следующим кодом:
const int pwm_pin = 3;
int pwm_val = 0;
int pwm_val_t = 0;
void setup()
{
Serial.begin(9600);
pinMode(pwm_pin, INPUT);
}
void loop() {
pwm_val=digitalRead(pwm_pin);
//if (pwm_val=0) pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
if ( pwm_val=0) Serial.print(0); ;
//Serial.println();
//delay(200);
}
Что я не так делаю ?
=DeaD= » 12 сен 2011, 22:29
Через PulseIn вроде надо читать PWM...
bod » 12 сен 2011, 22:33
через PulseIn не получилось, см. закомментареный код.
Мне кажется все из-за того, что на вход постоянно идет "1"
=DeaD= » 12 сен 2011, 22:40
Кстати, а вы зачем вот тут:
if ( pwm_val=0) Serial.print(0); ;
Грохаете переменную pwm_val, устанавливая её в ноль?
Это же Си, тут надо писать:
if ( pwm_val==0) Serial.print(0); ;
bod » 12 сен 2011, 22:54
с "=" вместо "==" поправил, это конечно ошибна.
Но все равно не пашет.
Вот такой код:
- Код: Выделить всё • Развернуть
const int pwm_pin = 3;
int pwm_val = 0;
int pwm_val_t = 0;
void setup() {
Serial.begin(9600);
pinMode(pwm_pin, INPUT);
}
void loop() {
pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
Serial.print(pwm_val_t);
//pwm_val=digitalRead(pwm_pin);
//if (pwm_val==0) pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
// if ( pwm_val==0) Serial.print(0); ;
//Serial.println();
delay(200);
}
pwm_val_t всегда "0"
А вот такой код:
- Код: Выделить всё • Развернуть
const int pwm_pin = 3;
int pwm_val = 0;
int pwm_val_t = 0;
void setup() {
Serial.begin(9600);
pinMode(pwm_pin, INPUT);
}
void loop() {
//pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
//Serial.print(pwm_val_t);
pwm_val=digitalRead(pwm_pin);
//if (pwm_val==0) pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
if ( pwm_val==0) Serial.print(0); ;
//Serial.println();
//delay(200);
}
вообще ничего в serial не пишет
=DeaD= » 12 сен 2011, 22:57
Компас то правильно подключили? 4 пином к PWM-IN ? линии SCL,SDA и 5V зацепили на 5 вольт? Земля подцеплена?
По поводу SCL,SDA:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.
bod » 12 сен 2011, 23:31
шилд распаяный уже
http://www.inexglobal.com/products.php?type=addon&cat=app_sensors&model=cmps03трудно ошибиться, разъемы стандартные
Кроме варианта с кривыми руками , у меня еще есть следующие варианты:
Грешу все же на IO Expansion Shield For Arduino(V5), т.к. если подключаю кнопку
http://www.megachip.ru/item.php?item_id=2466000 то в нажатом состоянии с нее приходит сигнал "0", а в состоянии покоя "1".
Добавлено спустя 9 минут 44 секунды:SCL,SDA еще не подключал, т.к. в соответствии с докой сигнал можно снимать как с l2c, так и с pwm
Vooon » 13 сен 2011, 10:27
Хм, есть нормальный цифровой интерфейс, зачем с шимом мучаться то?
avr123.nm.ru » 13 сен 2011, 11:06
У вас ножка назначена входом?
=DeaD= » 13 сен 2011, 11:12
Вроде да: pinMode(pwm_pin, INPUT);
Я думаю у него просто SCL и SDA не подтянуты к 5В, как требуется по даташиту.
avr123.nm.ru » 13 сен 2011, 11:28
т.е. сам модуль не снижает ШИМ - тогда использовать ФНЧ - резистор 10 кОм и конденсатор подключить и померить мультиметром напряжение.
bod » 14 сен 2011, 00:15
Vooon писал(а):Хм, есть нормальный цифровой интерфейс, зачем с шимом мучаться то?
Сейчас под рукой нет соответствующих проводочков, да и хотел разобраться как считывать PWM
Добавлено спустя 1 минуту 13 секунд:вот как все подключено, см. вложение
Добавлено спустя 1 минуту 59 секунд:=DeaD= писал(а):Я думаю у него просто SCL и SDA не подтянуты к 5В, как требуется по даташиту.
А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.
- Вложения
-
=DeaD= » 14 сен 2011, 00:53
bod писал(а):А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.
В документации написано:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.
bod » 14 сен 2011, 10:52
=DeaD= писал(а):bod писал(а):А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.
В документации написано:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.
На основании вот этой инфы из доки:
There are two ways of getting the bearing from the module. A PWM signal is available on pin 4, or an I2C interface is provided on pins 2,3.
я делаю вывод , что можно использовать только pwm
=DeaD= » 14 сен 2011, 11:10
Так и питание тогда не подавайте, в приведенном вами предложении про питание ведь тоже не слова!