Технический форум по робототехнике.
sergKyrnosov » 19 мар 2013, 15:11
Купил FEZ Cerduino Bee (
http://www.ghielectronics.com/catalog/product/351)
Установил все ПО, создал пробную прогу. (моргание светодиода) в visual studio.
Запускаю построение - пишет что все нормально, но светодиод не моргает.
Подскажите кто программировал такие платы, что нужно посмотреть?
Angel71 » 19 мар 2013, 18:44
вопрос пока ни о чём. какой пин, что в коде, пересекается ли этот пин с чем-нибудь, что теоретически может быть задействовано или подключено к чему-нибудь (юсб или сд карта, больше там на плате вроде инчего нет).
на ф4 дискавери недавно словил кайф - до мэйна прописал public static serialport и плата наглухо потеряла возможность общения со студией и дфу. пришлось несколько раз перезаливать дотнет (пока выяснял, это просто чтот слетело или именно из-за паблик статик). не помню, дискавери у вас есть или нет (в смысле заюзать его стлинк), но навсякий предупреждаю, что могут проблемы (икс его как такая же строчка на вашей плате с тем дотнетом поведёт себя).
sergKyrnosov » 20 мар 2013, 07:18
спасибо вроде заработало, просто заново создал проект и набил код.
странно вроде все тоже что и было, но теперь работает.
elmot » 20 мар 2013, 09:45
Скорее всего мелочь какая-нибудь была. На stm32 очень навороченная периферия, все время забываешь то настроить, то тактирование подать, то еще чего-нибудь.
sergKyrnosov » 20 мар 2013, 13:03
Я решил использовать FEZ Cerduino Bee (
http://www.ghielectronics.com/catalog/product/351), так как у меня под нее модуль xbee есть.
А еще такой вопрос:
Есть ли библиотеки для работы с сервами и сонарами в net micro framework, как для ардуино?
elmot » 20 мар 2013, 13:30
Госсподи, там же алгоритмы простые как 3 рубля. Все делается аппаратно таймером стмки за час-другой(в смысле обе задачи). Библиотеку дольше искать.
sergKyrnosov » 20 мар 2013, 13:41
да вот уже пытаюсь делать.
время совсем нет, на работе перебежками делаю, начну, брошу, потом опять пока вспомню что делал куча времени уходит.
elmot » 20 мар 2013, 13:42
В таком режиме библиотека делу не поможет
sergKyrnosov » 20 мар 2013, 16:15
хотя бы процесс ускорит. да ладно начал попытки делать.
Добавлено спустя 2 часа 24 минуты 43 секунды:
Ну вот в первом приближении сделал, управляю сервой и измеряю расстояние.
В качестве сонара использую HC-SR04, для управления используются два порта.
Но они работают по очереди, можно как то использовать один, для экономии?
elmot » 20 мар 2013, 16:30
что значит 2 порта? у меня бы оно меряло 2 или 3 каналами таймера.
можно ни одного не использовать, сделать на прерываниях и задержках, но что там экономить-то? периферии на этом камне хоть завались.
Кстати, sr-04 требует питания ровно 5В. Я у китайцев нашел похожую схему, которой вроде как может питаться от 3В, но еще оно не приехало еще.
sergKyrnosov » 20 мар 2013, 16:35
Я же писал тут, что у меня плата FEZ Cerduino Bee
Это по разъемам как ардуина, только внутри net micro стоит и программируется на C#.
количество портов на этой плате как на ардуине, не так много
elmot » 20 мар 2013, 16:39
Понятно. Нe ну если прямо так приперло, можно попробовать изобразить схему да диодах и резисторах подтяжки, но это костыль жуткий.
Можно сильно сэкономить пины, если предполагается пачка дальномеров. Тогда можно обойтись не 2N портов, а N+1.
Angel71 » 20 мар 2013, 16:46
elmot, платка с дотнетом, а дотнет это не си. как работают некоторые вещи на низком уровне особо знать не нужно, например так же как на си не нужно настраивать что-то или тактировать. это с одной стороны очень удобно, с другой можно выхватить .
- Код: Выделить всё • Развернуть
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.IO.Ports;
using System.Text;
namespace MFConsoleApplication1
{
public class Program
{
public static byte[] data;
public static void Main()
{
OutputPort led = new OutputPort((Cpu.Pin)61, false);
SerialPort port;
data = new byte[0];
port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.DataReceived += new SerialDataReceivedEventHandler(ReceiveData);
while (true)
{
led.Write(true);
Thread.Sleep(1000);
led.Write(false);
Thread.Sleep(1000);
if (data.Length > 0)
{
port.Write(data, 0, data.Length);
data = new byte[0];
byte[] b = Encoding.UTF8.GetBytes(DateTime.Now.ToString());
port.Write(b, 0, b.Length - 1);
port.Flush();
}
}
//port.Close();
//port.Dispose();
}
public static void ReceiveData(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
if(sp.BytesToRead>0)
{
int btr = sp.BytesToRead;
data = new byte[btr];
int i = sp.Read(data, 0, btr);
}
}
}
}
- Код: Выделить всё • Развернуть
using System;
using Microsoft.SPOT;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHI.Premium.Hardware;
namespace MFConsoleApplication1
{
public class Program
{
static PWM MyFader = new PWM(Cpu.PWMChannel.PWM_3,10000,0.1,false);
public static void Main()
{
double i = 0.0;
while (true)
{
MyFader.DutyCycle = i;
// DutyCycle is not dynamic so we must make a call to Start() to refresh the object
MyFader.Start();
if ((i += 0.1) >= 1.0)
i = 0.0;
Thread.Sleep(10);
}
}
}
}
- Код: Выделить всё • Развернуть
using System.Threading;
using Microsoft.SPOT;
using System;
public class Program
{
static void RunMe(object o)
{
Debug.Print("From timer!");
}
public static void Main()
{
Timer MyTimer =
new Timer(new TimerCallback(RunMe), null, 5000, 1000);
Debug.Print(
"The timer will fire in 5 seconds and then fire priodically every 1 second");
Thread.Sleep(Timeout.Infinite);
}
}
Добавлено спустя 4 минуты 47 секунд:sergKyrnosov, поиском пользуйтесь, помогает. работать с дальномером или управлять одной сервой это элементарно, а вот несколькими сервами... тут подумать нужно. общим поиском, если нужно будет сами воспользуетесь, а пока могу посоветовать поискать тут
http://www.tinyclr.com/codeshare. несколько примеров работы с дальномерами и сервами точно есть.
elmot » 20 мар 2013, 16:47
Гы. Забавно. Мож мне тоже на дискавери попробовать?
Angel71 » 20 мар 2013, 17:10
ради интереса почему бы и не попробовать?