роботы робототехника микроконтроллеры


 Страниц (5): « 1 2 3 [4] 5 »   

> Без описания
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



skyburn пишет:
ммм можете подсказать, какой тип данных использовать при отправке данных из делфи в МК?


обычно тот который требуется в функции отправки данных
объявление функции отправки сюда напишите

а так то в дельфе есть даже BYTE

и запись
CODE:

var
bit:byte;
вполне уместна
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Не ну то ясен пень, в каком виде мне отправлять то? Мне нужно отправить 32 байта.
(Добавление)
Я имею в виду в шестадцетеричном представлении, или в десятичном?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



skyburn пишет:
ммм можете подсказать, какой тип данных использовать при отправке данных из делфи в МК?
такой, какой требует выбранный модуль работы с СОМ портом.
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



кароч сделал так, что будет из моей матрицы 16х16 формировать двоичный код, который конвертируется в 10ю систему, и которая будет передаваться =)
Теперь вопрос по юарту.
А именно прерывание по приему....
CODE:
#include <avr/io.h> //библиотека ввода/вывода
#include <avr/interrupt.h> //библиотека прерываний

#define nop() {asm("nop");}

unsigned int ms,x; //декларирование переменных

// функция задержки
void delay_ms(int ms)
{
for (x=ms; x>0; x--)
nop (); //задержка на один такт
}

//обработка прерываний
SIGNAL(SIG_INTERRUPT0)
{
//Тут размещается текст программы
//которую надо выполнить
//при срабатывании прерывания INT0
}

int main( void ) //главная программа
{
GIMSK=0b01000000; //разрешаем прерывание int0 - кнопка
MCUCR=0x03; // срабатывание по нарастанию фронта - для кнопки

sei(); //глобальное разрешение прерываний

for(;;) //бесконечный цикл
{
//Тут размещают программу
//которая выполняется/
//в свободное от выполнения
//обработчика прерывания
}
}

Нашел вот такой вот пример по прерыванию на Int0. Подскажите, как сделать на UART интерфейс
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Еще одна странность. Что то между двумя программами бред всякий передается. Ну подключил ЮСБ шнурок, и использовал провод от передатчика который на программатор шел. Так передается всякая вигня не понятная. Передаю просто 1, приходит 01100111, передаю 2, приходит 00110011, передаю 3 - 01100110.
Не могу понять, в коком виде мне данные отправлять =(
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



skyburn пишет:
будет из моей матрицы 16х16 формировать двоичный код, который конвертируется в 10ю систему, и которая будет передаваться
лучше конвертируйте в ASCII , так на компе удобнее всё же с нормальными буквами.
skyburn пишет:
Нашел вот такой вот пример по прерыванию на Int0. Подскажите, как сделать на UART
... а там в хелпе к вашему компилятору ничего нет ? Улыбка

Где то так:

CODE:
/* receiving data (single bytes) from PC and taking "actions" */
SIGNAL(SIG_UART_RECV)
{
uint8_t data;
data=UDR;
; вот "data" - это и есть приплывший байт
}
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



А в каком виде приниматься будут данный в МК? Если я пошлю число к примеру 200 или 153, и тд?
(Добавление)
И почему между двумя КОМ портами данный передаются без ошибок, а вот от МК часто фарш попадается какой то. Может я что то не учел, когда подключал. Я просто припаял контакты к TXD и RXD
(Добавление)
ммм ну сглюками разобрался, то USB шнурок выделывается. При приеме. А передает вродь нормально.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



skyburn пишет:
Я просто припаял контакты к TXD и RXD
через конвертер уровней то хоть ? Улыбка
skyburn пишет:
А в каком виде приниматься будут данный в МК? Если я пошлю число к примеру 200 или 153, и тд?
передаются байты. если 200 - это десятичное число - то и передастся 200.
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Цитата:
через конвертер уровней то хоть ?

Ну контакты на МК
Я шнур использую с конвертером
(Добавление)
Все не как не могу разобраться с этим вот ЮАРТОМ =((((((
(Добавление)
Можете помочь с кодом, очень нужно. Уже кучу всего перепробовал. Ничего не выходит((( а защита диплома через неделю =((((

CODE:
#include <tiny2313.h>
#include <delay.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

int a=0,b=0;
char d;
unsigned char buf,buf2;
unsigned char mas[2][16];
unsigned char min[2][16]={
{0b01111111,0b10111111,0b11011111,0b11101111,
0b11110111,0b11111011,0b11111101,0b11111110,
0b11111111,0b11111111,0b11111111,0b11111111,
0b11111111,0b11111111,0b11111111,0b11111111},
{0b11111111,0b11111111,0b11111111,0b11111111,
0b11111111,0b11111111,0b11111111,0b11111111,
0b01111111,0b10111111,0b11011111,0b11101111,
0b11110111,0b11111011,0b11111101,0b11111110}};

// Глобальная переменная - полученные даные от устройства
// Эсли FromGCnDevice==0 - ничего не получено
char FromGCnDevice;

// Обработка прерывания окончания приема байта
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status;
// Получаем байт статуса и данных
status=UCSRA;
FromGCnDevice=UDR;
if (a<16)

{mas[0][a]=FromGCnDevice;
a++;}
else
if ((a>16)&&(a<32)) {
mas[1][b]=FromGCnDevice;
a++;
b++;}
else {a=0;b=0;}


// Если произошла ошибка при приеме байта то FromGCnDevice=0
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))!=0)FromGCnDevice=0;
}

void draw(){
for (a=0;a<16;a++)

{
buf=min[0][a];
buf2=min[1][a];
for (b=0;b<8;b++)
{PORTB=buf;
PORTD.4=0;
PORTD.4=1;
buf=buf>>1;
}
for(b=0;b<8;b++)
{PORTB=buf2;
PORTD.4=0;
PORTD.4=1;
buf2=buf2>>1;
}


buf=mas[0][a];
buf2=mas[1][a];
for (b=0;b<8;b++)
{PORTB=buf;
PORTD.4=0;
PORTD.4=1;
buf=buf>>1;
}
for(b=0;b<8;b++)
{PORTB=buf2;
PORTD.4=0;
PORTD.4=1;
buf2=buf2>>1;
}
PORTD.5=1;
PORTD.5=0;



}
}

// Процедура передачи байта
void ToGCnDevice (char c)
{
// Ждем окончания передачи предідущего байта
while ((UCSRA & DATA_REGISTER_EMPTY)==0);
// Передаем байт
UDR=c;
}

// Standard Input/Output functions

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, Even Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x26;
UBRRH=0x00;
UBRRL=0x33;

// Global enable interrupts
#asm("sei")

while (1)
{
draw();


};
}

Вот код. Думаю ошибок здесь много. Я бы изучил UART подробней, но к сожалению сейчас мало времени осталось до сдачи =((((((
Пожалуйста помогите.
Нужно принять и записать в масссив mas 32 байта, и при помощи draw вывести(draw работает)
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Какова тактовая частота МК?
USART рассчитан на 9600 bps исходя из 8MHz тактовой частоты.
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Да, тактовая частота 8, от внутреннего генератора.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Точно? По программе этого не видно. Меняли fuse bits?
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Да да, воспользовался калькулятором fuse битов. мм И при создании проэкта тоже устанавливал 8мгц тактовую. Делитель на 8 выключен.
(Добавление)
Только что с генерировал код, с прерыванием на прием. Странно то, что до основного цыкла программа так и не дошла
(Добавление)
Такое впечатление, что юарт кучу помех ловит, непонятные данные принимаются с воздуха
CODE:

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
mas[0][0]=data;/* присваиваю первой половине
первой строки полученный байт. В итоге строка мигает
как гирлянда, что говорит о том, что туда поступает
куча всякого мусора(помехи что ли?) */
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



skyburn пишет:
Такое впечатление, что юарт кучу помех ловит, непонятные данные принимаются с воздуха
притяните ногу Rx к плюсу через 10 кОм


ну и проверте установки чётности, стоп-биты, размерность байтов. В передающей части и в приёмной части они должны быть одинаковыми
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Я забыл припаять минус от шнурка с ЮАРТом не в себе (((((
(Добавление)
Цитата:
ну и проверте установки чётности, стоп-биты, размерность байтов в передающей части и в приёмной части

Уже 2 дня как проверяю =)
По идее дело в минусе было
Ща паяльник нагреется, и буду пробовать
(Добавление)
да! Дело было в минусе!! Я даже и не думал что он играет такую ролЬ!
Но теперь какая то странность появилось. Когда подключаю ЮАРТ он начинает немного питать МК и светодиоды еле еле светятся. Это нормально?
И еще, передаю к примеру 100, а засвечивается как будто пол байта!
(Добавление)
хммм такое впечатление, что он принимает а ASCII. Потому что старшая пара бит начинает менять когда всякие символы-буквы шлешь.
(Добавление)
Это можно выключить как то?
(Добавление)
Или мне кодировать лучше мою матрицу в АССИИ?
(Добавление)
Интересная штука. Ставишь перед десятичным числом "&#" и все) Просто берешь свои десятичные значения и к ним подставляешь такую вот штуку)) Круто)
 
 Top
Страниц (5): « 1 2 3 [4] 5 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru