Дискриминация по типу ардуино.

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Есть задача реализовать шим на дуине. Cкачал библу PWM.h. 

Пишу скетч, компиллирую для нано - все проходит нормально. Компиллирую для леонардо - ругается на строку:

pwmWrite(5, sensorValue / 4);

Че за дискриминация?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013
Geronimo
Offline
Зарегистрирован: 06.05.2013

Так исправте ошибку и будет вам щастье

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Если Вы про analogWrite, так для леонардо не ругается.

Мне интересно, почему один и тот скетч под нано компилится нормально, а под леонардо чуть ли не матом кроет?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

МК разные. Таймеры разные. У Леонардо больше PWM выходов.

Самое тупое, посмотреть, что говорит компилятор и исправить ошибку, Вам уже про это сказали.

 

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013
Вот что пишет:
r2/sketch_may19a.ino:76: undefined reference to `pwmWrite(unsigned char, unsigned char)'
 
Клапауций
Offline
Зарегистрирован: 10.02.2013

так в чём проблема - есть желание впихнуть невпихуемое и что бы невпихуемое не крыло тебя матом?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Клапауций пишет:

так в чём проблема - есть желание впихнуть невпихуемое и что бы невпихуемое не крыло тебя матом?

дадада, я кузнец, я кую, я не могу не куя!

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Клапауций пишет:

так в чём проблема - есть желание впихнуть невпихуемое и что бы невпихуемое не крыло тебя матом?

То, что есть какая-то ошибка, это и так понятно, как понятно и то, что будет щастье если его исправить. Так же понятно что ругается на несоответствие типов. Просто не понятно, почему с нано оно впихуемо, а с леонардо невпихуемо?

tmr
Offline
Зарегистрирован: 19.05.2014

У Леонардо другие таймеры и в PWM.h нет определения для __AVR_ATmega32U4__, думаю дело в этом

Клапауций
Offline
Зарегистрирован: 10.02.2013

Puhlyaviy пишет:

дадада, я кузнец, я кую, я не могу не куя!

http://pleer.com/tracks/4199303G5tC

Geronimo
Offline
Зарегистрирован: 06.05.2013

А если так:

pwmWrite(((uint8_t)5, (uint8_t)(sensorValue / 4));

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Без изменений!

Клапауций
Offline
Зарегистрирован: 10.02.2013

берём гаечный ключ(зачёркнуто)... текстовый редактор, открываем файлег PWM.h и шо мы там видим?

мистические руны:

defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__)

что произойдёт, если пробовать библиотеку с этими строками компилить для МК ATmega328 и ATmega32u4?

знаю одно - впихнуть невпихуемое не получится.

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Клапауций пишет:

что произойдёт, если пробовать библиотеку с этими строками компилить для МК ATmega328 и ATmega32u4?

попробовал этот вариант сразу после сообщения

tmr пишет:

У Леонардо другие таймеры и в PWM.h нет определения для __AVR_ATmega32U4__, думаю дело в этом

Так ругается и на библу.

tmr
Offline
Зарегистрирован: 19.05.2014

Так правильно ругается - ф-ция pwmWrite реализована в ATimerDefs.cpp и BTimerDefs.cpp и обернута в дефайн платы. Т.о. для 32u4 код ф-ции pmwWrite не будет подгружен и компилятор будет ругаться.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Тима пишет:

попробовал этот вариант сразу после сообщения

какой "вариант"?

ты видишь, что AVR_ATmega32U4 отсутсвует в библиотеке или нет?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Клапауций пишет:

какой "вариант"?

попробовал скомпилировать для дуины с процем ATmega328, с ней компилится. попробовал для ATmega32U4 не компилится.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Тима пишет:

попробовал скомпилировать для дуины с процем ATmega328, с ней компилится. попробовал для ATmega32U4 не компилится.

я не буду обзываться плохими словами и попытаюсь пояснить, по возможности, вежливо.

в тексте библиотеки видишь ATmega32U4?

чего? не видно? - с какого хрена библитека должна работать с ATmega32U4?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

плохими не надо... Просто Ты спросил что произойдет, я ответил что произошло!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

- Ты в баню?
- Нет, я в баню
- Аааа, я думал ты в баню

Кто за попкорном сгоняет? Кончается уже

Клапауций
Offline
Зарегистрирован: 10.02.2013

kisoft пишет:

Кто за попкорном сгоняет? Кончается уже

взял бы объяснил ТП, что не дуину компилить нужно, а мосг, если чего непонятно.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Как я ему могу объяснить, если он отвечает не на все вопросы, а только на те, что хочет отвечать.

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

kisoft пишет:

Как я ему могу объяснить, если он отвечает не на все вопросы, а только на те, что хочет отвечать.

Подождите, а на какой вопрос я не ответил?

Я  задал вопрос, почему "там" компилится, а "нетам" нет. Первый ответ - гениальный!

Geronimo пишет:
Так исправте ошибку и будет вам щастье

Это универсальный ответ на 90% вопросов, задаваемых здесь.

Второй пост дает ответ на вопрос, но не решает его.

Далше идет флуд про кузнецов и пихание непихуемого. Ну тут мой косяк, не спросил влоб "а можно ли подправить эту библу, чтоб заработало с леонардо?".

Дальше предложение:

Geronimo пишет:

А если так:

pwmWrite(((uint8_t)5, (uint8_t)(sensorValue / 4));

Низкий поклон(без всякого сарказма, хоть что-то предложил!)!

И еще, по поводу пихания непихуемого... Недавно купил экранчик, а библу под него найти не смог. Перепробовал несколько библитек с разных сайтов - нивпихуется ни куя. Начал ковать дальше... Матрица управлялась процем ILI9163. Полез в библу - нету его там. Начал изучать и пробовать разные варианты. В итоге с горем пополам впихнул невпихуемое. Но, радости от этого мало, т.к. после того как впихнул на дуине места ни куя не осталось. Начал ковать дальше, выкинул из библы экрана и шрифта все лишнее и впихнул невпихуемое так, что освободилось места почти на 10 кБ. Это я к тому, что не лезу на форум, пока не удостоверюсь, что сам не справлюсь!

По поводу ТП и кузнецов... Хотелось бы взглянуть в глаза того, кто никогда не ошибался, не задавал глупых вопросов и родившегося с лично запрограммированным МК в руках....

Теперь, Уважаемые форумчане! Помогите разобраться. Можно ли эту библу перешаманить под леонардо?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а я вот непойму. вам не хватает шимов в леонардо что вы библиотеку прикручиваете?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Нет! Хватает!

Встречный, возможно глупый вопрос: В чем разница в работе команд "analogWrite" и "pwmWrite" через библиотеку PWM.h?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

незнаю какая частота шима в библиотеке PWM, если одинаковая разницы нет.

ну разве что микроконтроллер более загружен, так как программный шим обычно многовато ресурсов кушает

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Нужна частота порядка 25-30 кГц.

Программный - это через "analogWrite"?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Кстати, с библиотекой PWM.h частоту шим задаешь в скетче строкой:

int32_t frequency = 25000;

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Тима, слабо прочитать вот это? http://arduino.ru/Hardware/ArduinoBoardLeonardo

Там русским по белому написано, сколько у Леонардо ШИМ выходов (аппаратных) и какой командой можно вывести ШИМ на эти ноги. Если потыкаться по ссылкам на указанной мной страничке, можно почитать и про ШИМ и фиг с ним.

PS На какие вопросы Вы не ответили я не буду терять своё время, чтобы бы Вам это доказать, ищите сами, мне придумывать ни к чему, я с Вами не знаком, чтобы на Вас наезжать.

 

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Я это все уже прочитал и не раз. Мне нужно 3 выхода ШИМ. С количеством и нумерацией выходов вопросов нет! По ссылке написано "Частота ШИМ сигнала приблизительно 490 Hz." Мне этого мало! Поэтому и извращаюсь с библиотекой!

По поводу вопросов без ответа, переспросил не для того, чтобы Вы мне что-то доказали. Может мой ответ на вопрос прояснит ситуацию?!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Можно сделать аппаратный ШИМ примерно 32КГц. Пожалуйста, поищите по форуму, я уже несколько раз объяснял как это сделать. Если найдете и будет непонятно, а также покажете скетч, то я готов помочь, объяснить и проверить на своей лошадке (см.ниже).

3 выхода с ШИМ - легко, особенно на Леонардо (у меня он тоже есть, моя первая рабочая лошадка).

 

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Ок! буду лазеть дальше. Если что - отпишусь!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Нашел, вот здесь мой первоисточник: http://arduino.ru/forum/proekty/arduinoide-i-atmega16-korrektiruem-yadro?page=1#comment-47102

Я посмотрел, теоретически что для Leonardo, что для ATmega16 одинаково таймер 1, потому можно добавить строку:

TCCR1B = _BV(CS10);

и получить на таймере 1 частоту ШИМ примерно 31КГц

Соответственно, на первом таймере у Леонардо выходы на 9 и 10 пинах. Можете пробовать.

PS функцию tone не используйте, а то таймер перепрограммируется и частота ШИМ вернется на штатную.

 

ImaSoft
ImaSoft аватар
Offline
Зарегистрирован: 22.09.2015

Вопрос тоже меня этот заинтересовал, решил вот попробовать платформу ARDUINO pro micro(ATmega32u4)(Базовая Leonardo), так вот тоже начал на грабли наступать, в моих проектах используется библиотека PWM.h, для реализации ШИМ с большей частотой, нежели 497гц, Таймеры-1 и 2, выводы для UNO; pro Mini; NANO; на ATmega328p; таймер-0(5-6выводы, частота 976Гц (Менять_ее_нельзя)); ТАЙМЕР-1(9-10выводы, частота по умолчанию 497Гц); ТАЙМЕР-2(3-11выводы, 11 - не_используется в либе PWM; частота 497Гц), то есть для таймеров ТАЙМЕР-1 и 2 можно задавать произвольную частоту через либу PWM.h

Как выше было сказано, в этой либе нет поддержки ATmega32u4, так вот вопрос, может уже в природе есть правленая либа (от автора) или кто-то уже для себя правил, буду за любую информацию признателен, или ссылку на либу.