Проблема со скоростью UART, ставлю 9600 а работает на 19200

gresha74277
Offline
Зарегистрирован: 18.03.2013

 

Подскажите пожалуйста что за фигня. Из-за этого не могу сконектить его с другим устройством.

а вот код:



int out[10] = {0,1,2,3,4,5,6,7,8,9};     // все порты на выход
int stat[10] = {0};     // статусы портов                
int data[10] = {'\0'};  // приход с UART
int bits = 0;           
void setup()
{
  for (int i=0; i<10; i++)
  {
    pinMode(out[i], OUTPUT);
  }  
  Serial.begin(57600); // у меня почемуто работает на скорости 115200
  Serial.print("Upravlenie portami:\nDostupnye porty (0 - 9)\nKomandy: \ns - Sostoianie portov\no - Vikluchit' vse\n ");
}

void loop()
{
  digitalWrite(13, LOW);
  
  if(Serial.available())
  {
    bits = Serial.available();
    for(int i=0; i <= bits; i++)
    {
      digitalWrite(13, HIGH);
      data[i] = Serial.read();
      digitalWrite(13, LOW);
    }
    data[bits+1] = '\0';
  }
  if (data[0] != '\0')
    {
      Obrabotka();
    }
}

void Obrabotka () 
{
}

 

step962
Offline
Зарегистрирован: 23.05.2011

Ну, во-первых, вы не на 9600 "ставите", а на 57600.

Во-вторых, в терминале тоже надо "ставить" на те же самые 9600 (или все же 57600?).

Для этого откройте обведенный вами выпадающий список и таки выберите правильную скорость передачи.

gresha74277
Offline
Зарегистрирован: 18.03.2013

ну так происходит с любой скоростью, скорость которую забиваю в контроллер (к примеру 57600) в сериал мониторе работает на 115200, т.е. в 2 раза больше. А если пытаюсь схитрить, ставлю в программе скорость 4800, чтобы в мониторе получить 9600, получаю мусор на обеих скоростях.

ustas
Offline
Зарегистрирован: 12.03.2012

а с платой не шаманили? не заводили без кварца? с кварцем на 8МГц?

загрузчик штатный прошейте...

step962
Offline
Зарегистрирован: 23.05.2011

Ваши настройки в скетче никак не влияют на скорость, с которой сериал монитор будет принимать/отправлять данные. Необходимо и в скетче, и в мониторе указать одинаковые значения.

Внимательно читаем описание Serial на этом сайте. Особенно второй абзац.

Затем думаем.

Пробуем еще раз.

maksim
Offline
Зарегистрирован: 12.02.2012

Шаманить - можно и не шаманить, а например не верно плату указать

 

gresha74277 пишет:
Подскажите пожалуйста что за фигня. Из-за этого не могу сконектить его с другим устройством.
Кого его? Какая у вас дуина?

gresha74277
Offline
Зарегистрирован: 18.03.2013

 

ustas пишет:

а с платой не шаманили? не заводили без кварца? с кварцем на 8МГц?

загрузчик штатный прошейте...

С платой не шаманил, как говорится "из-коробочки" фьюзы не трогал, частоту не менял

maksim пишет:

Шаманить - можно и не шаманить, а например не верно плату указать

 

gresha74277 пишет:
Подскажите пожалуйста что за фигня. Из-за этого не могу сконектить его с другим устройством.
Кого его? Какая у вас дуина?

Кристал ATmega168PA-PU на плате Freeduino-2009

maksim
Offline
Зарегистрирован: 12.02.2012

Так и какую дуину из списка вы выбираете?

gresha74277
Offline
Зарегистрирован: 18.03.2013

step962 пишет:

... Необходимо и в скетче, и в мониторе указать одинаковые значения.

В этом то и проблема, когда в скетче, и в мониторе указываю одинаковые значения, 

в порт сыпется мусор, а если указанную в скетче скорость умножить на 2 и полученный результат указать в мониторе, то тогда иногда прокатывает и я получаю\передаю данные из\в контроллер.

бардак =)

gresha74277
Offline
Зарегистрирован: 18.03.2013

maksim пишет:

Так и какую дуину из списка вы выбираете?

maksim
Offline
Зарегистрирован: 12.02.2012

Так естественно! LilyPad работает от 8 МГц. Выбирать нужно Duemilanove.
Вторая строка описания Freeduino 2009:
      Модуль является полным аналогом Arduino Duemilanove...

gresha74277
Offline
Зарегистрирован: 18.03.2013

Да тут я затупил. Смотрел только на процессор

Блин, но проблема осталась, поставил Duemilanove теперь вообще не на одной скорости не работает.

 

maksim
Offline
Зарегистрирован: 12.02.2012

Так не бывает. Укажите одинаковые скорости и все будет работать.

gresha74277
Offline
Зарегистрирован: 18.03.2013

блин, мужики ну вот смотрите, на картинке все:

gresha74277
Offline
Зарегистрирован: 18.03.2013

ОО.. а програматор какой должен стоять?

maksim
Offline
Зарегистрирован: 12.02.2012

Скачайте версию IDE 1.0.х и попробуйте в ней.

maksim
Offline
Зарегистрирован: 12.02.2012

gresha74277 пишет:

ОО.. а програматор какой должен стоять?

Без разницы, вы не программатором шьете.

gresha74277
Offline
Зарегистрирован: 18.03.2013

maksim пишет:

Скачайте версию IDE 1.0.х и попробуйте в ней.

ОК, сейчас попробую

gresha74277
Offline
Зарегистрирован: 18.03.2013

Попробывал в версии 1.0.2

Тот же результат =(

maksim
Offline
Зарегистрирован: 12.02.2012

А что написано на кварце на дуине? 16.000 ?

gresha74277
Offline
Зарегистрирован: 18.03.2013

Да 16.0RG9

gresha74277
Offline
Зарегистрирован: 18.03.2013

А на библиотеке SoftwareSerial работает вроде. Правда только от контроллера в комп.

maksim
Offline
Зарегистрирован: 12.02.2012

Странно все это. А покажите-ка весь код, с которым иероглифы в монитор летят.

gresha74277
Offline
Зарегистрирован: 18.03.2013

 правда он сейчас на виртуальный слегка переделан:

иероглифы летят с 16 строки

 









#include <SoftwareSerial.h>

SoftwareSerial SSerial(3,4);

int out[10] = {0,1,2,3,4,5,6,7,8,9}; // все порты на выход
int stat[10] = {0};     // статусы портов                
int data[10] = {'\0'};
int bits = 0;
void setup()
{
  for (int i=0; i<10; i++)
  {
    pinMode(out[i], OUTPUT);
  }  
  SSerial.begin(9600); // у меня почемуто работает на скорости 115200
  SSerial.print("Upravlenie portami:\nDostupnye porty (0 - 9)\nKomandy: \ns - Sostoianie portov\no - Vikluchit' vse\n ");
}

void loop()
{
  digitalWrite(13, LOW);

  if(SSerial.available())
  {
    bits = SSerial.available();
    for(int i=0; i <= bits; i++)
    {
      digitalWrite(13, HIGH);
      data[i] = SSerial.read();
      digitalWrite(13, LOW);
    }
    data[bits+1] = '\0';
  }
  if (data[0] != '\0')
  {
    Obrabotka();
  }
}

void Obrabotka ()
{ 
  SSerial.print(*data);

  for(int i=0; data[i]!='\0' || i < 10; i++) // Чистка data
  {
    data[i]='\0';
  }
}
 
maksim
Offline
Зарегистрирован: 12.02.2012

Попробуйте вот такой пример:

void setup()
 {
  Serial.begin(9600);
  Serial.println("Hello!");
}
void loop() {}

 

gresha74277
Offline
Зарегистрирован: 18.03.2013

а так работает =)

думаете дело в знаке переноса строки?

leshak
Offline
Зарегистрирован: 29.09.2011

А бутлоадер шить или  фьюзами игратся не пробовали? Не всмысле "попробуйте", а "было такое?". Что-то кроме "заливаю скетч" еще с этой платой делали?

gresha74277
Offline
Зарегистрирован: 18.03.2013

leshak пишет:

А бутлоадер шить или  фьюзами игратся не пробовали? Не всмысле "попробуйте", а "было такое?". Что-то кроме "заливаю скетч" еще с этой платой делали?

Нет, только скетчи

leshak
Offline
Зарегистрирован: 29.09.2011
int out[10] = {0,1,2,3,4,5,6,7,8,9}; // все порты на выход

А это че такое?

Хорошо еще что не упалили.

0 и 1 - на них же серил висит. Не нужно ему мешать собственной самодеятельности. Пусть он сам решает какой режим этим пинам выставлять.

maksim
Offline
Зарегистрирован: 12.02.2012

Так что с примером выше?

leshak
Offline
Зарегистрирован: 29.09.2011

Вообщем когда используете Serial - забудте что у вас есть пины 0 и 1. В коде с ними ничего не делайте, не трогайте. 

Да в любом случае забудте про их использование, если не хотите потом выяснять "почему скетч льется через раз". Забудте про них. 

gresha74277
Offline
Зарегистрирован: 18.03.2013

leshak пишет:



int out[10] = {0,1,2,3,4,5,6,7,8,9}; // все порты на выход

А это че такое?

Хорошо еще что не упалили.

0 и 1 - на них же серил висит. Не нужно ему мешать собственной самодеятельности. Пусть он сам решает какой режим этим пинам выставлять.

блин верно, а я подума об этом, а потом решил что если трогать их не буду то все ОК будет и как то позабыл

сейчас исправлю и попробую

leshak
Offline
Зарегистрирован: 29.09.2011

Кстати, когда используете SoftwareSerial(3,4), то самому пины 3,4 уже тоже использовать не желательно.

gresha74277
Offline
Зарегистрирован: 18.03.2013

Вот, что значит невнимательность и свежий глаз. =)

все решилось! ураа

СПАСИБО ОГРОМНОЕ!