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


 Страниц (1): [1]   

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


Рядовой


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



Хочу настроить отправку данных (просто цифры) с компьютера на МК и обратно по COM-порту. Подскажите где можно скачать готовый проект для WinAVR ?

проблема в получении данных с компьютера ! ! !
отправку я настроил всё работает. а при получении данных МК как будто зависает. не могу понять в чем дело.
 
 Top
cjA Post Id



Генерал


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



буфер наверное, комп ждет +-12, а МК только 3.3 выдает
(Добавление)
Оно?
http://easyelectronics.ru/avr-uc...cherez-uart.html
не winavr, конечно но может поможет
 
 Top
Denis800 Post Id


Рядовой


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



как раз на компьютер я всё отлично передаю !
я не могу передать с компа на Мегу16.

микросхему согласования уровня MAX232AEPE я использую !
иначе бы не получилось !
т.е. в одну сторну у меня идет а в другую нет !

мне бы какой нибудь проект, я бы из него выковырнул то что мне надо !
 
 Top
cjA Post Id



Генерал


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



показывайте что вы там заливаете на МК, вот просто уверен что где то бит забыли поднять потому он и не просыпается когда ему сигнал приходит.
(Добавление)

чебы не получилось? пять проводков и два стабилитрона, им можно и МК прошивать и туда-сюда общаться
 
 Top
Denis800 Post Id


Рядовой


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



Вот сам модуль, его смысл: при загрузке МК зажигаем светодиод 2, потом пауза светодиод 3, при получении символа зажигаем все 8 светодиодов порта А. и отвечаем компьютеру цирой "1".

//***************************************************************************
#include <avr/io.h>
#include <avr/interrupt.h>
#include "usart.h"
#include "lcd_lib.h"

int main( void )
{
unsigned char sym;


DDRA = 255;
PORTA = 2;
_delay_ms(500);

USART_Init();

PORTA = 4;
_delay_ms(500);


USART_Init();
//LCD_Init();
sei();
//LCD_SendString("uart:");

while(1){
sym = USART_GetChar(); //читаем буфер
if (sym){ //если что-то приняли, то

PORTA = 255;
_delay_ms(1000);

USART_SendChar('1'); //отвечаем компу "Ok "
//USART_SendChar('k');
//USART_SendChar(' ');
}
}
return 0;
}


модуль usart.c
#include "usart.h"

//однобайтный буфер
volatile unsigned char usartRxBuf = 0;

//инициализация usart`a
void USART_Init(void)
{
UBRRH=0;
UBRRL=74; //скорость обмена 9600 бод
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //разр. прерыв при приеме, разр приема, разр передачи.
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //размер слова 8 разрядов
}

//отправка символа по usart`у
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}

//прием символа по usart`у в буфер
ISR(USART_RX_vect)
{
usartRxBuf = UDR;
}

//чтение буфера
unsigned char USART_GetChar(void)
{
unsigned char tmp;

ATOMIC_BLOCK(ATOMIC_FORCEON)
{
tmp = usartRxBuf;
usartRxBuf = 0;
}

return tmp;
}

при включении получается так: зажигается светодиод 2, потом 3, и так будт пока я не отправлю что то с компьютера, при отправке любого символа, на компьютер "1" не возвращается, и сам МК как будто "зависает" и выглядит это так: постоянно как будто в цикле (которого нет) зажигается светодиод 2 потом 3, и так длиться бесконечно, откуда берется такое чудо мне не понятно ! ! !

P.S. если мой микроконтроллер прошить простенькой прошивкой для отправки символов на компьютер, то компьютер всё принимает ! это я написал для того чтобы подтвердить что всё исправно, и информация с МК на компьютер идёт, а обранто нет !
 
 Top
Denis800 Post Id


Рядовой


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



вот вам проект на WinAWR
Скачать файл: usart1-WinAvr.zip
Скачан раз: 398
 
 Top
Denis800 Post Id


Рядовой


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



неужели никто не поделиться ссылкой на готовый проект ?
я остальное всё сделаю сам !

подскажите как принять данные по USART на МК с обычного компа ? проект с
http://chipenable.ru/index.php/f...sons-winavr.html
не работает.

(Отредактировано автором: 26 Ноября, 2011 - 18:28:48)

 
 Top
cjA Post Id



Генерал


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



попробовать перевернуть МК от клавы?
просто не знаю зачем мне их столько? раз она может на комп посылать, может может и обратно?
(Добавление)
Denis800 пишет:
и информация с МК на компьютер идёт, а обранто нет !

а согласование уровней? мах232 или как там?
комп понимает МК, а МК комповские +-12V не понимает, для него все это еденица.
(Добавление)
ну вот нужно было мах распаять так чтоб можно было и так и наоборот пдсоеденить. Может второй порт бракованый, кто знает.

Denis800 пишет:
usartRxBuf = UDR;

не очень понимаю в Си, но помоему это не будет работать... Смущение
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



cjA пишет:
не очень понимаю в Си, но помоему это не будет работать...

"Солженицына я не читал, но его творчество осуждаю..."(с)
 
 Top
cjA Post Id



Генерал


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



Роботов
ирония тут не уместна. нигде не сказано что внешний доступ к этому регистру разрешен UDR
Может в Си это автоматически делается, тогда простите.
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



cjA пишет:
нигде не сказано что внешний доступ к этому регистру разрешен

В даташите сказано. и пример на Си приведён. Читайте. Подмигивающий
cjA пишет:
Может в Си это автоматически делается, тогда простите.

Делается

(Отредактировано автором: 01 Декабря, 2011 - 23:03:35)

 
 Top
cjA Post Id



Генерал


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



Роботов пишет:
Делается

Вот почему я и не люблю Си, в нем слишком много делается автоматически.(в асме все входы по резету закрыты, кроме самого резета)
А если у меня на портД другие датчики навешаны? (эт я утрирую...)
Хотя уже близок к тому чтобы дописать свой последний код на асме (очень тягомотно полкило кода на асме) и выбрать повыше язык...
 
 Top
Denis800 Post Id


Рядовой


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



микросхему MAX232 я естественно подключил с самого начала.
порт COM - работает, я с него прошиваю программатором Громова этот самый микроконтроллер !

если я замкну ножки МК 14 и 15 (просто отверткой или проводком), то на компьютер вернётся всё что я отправил на МК, значит вся электрическая цепочка исправна !

проблема в программе, то что я ничего не могу принять на МК, а отправляется только по одному символу ! ! !
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Согласно даташита приём должен выглядеть так:
CODE:

unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) );
/* Get and return received data from buffer */
return UDR;
}

У вас же строки "ждать полученых данных" нет. Может в этом проблемма?
(Добавление)
Denis800 пишет:
а отправляется только по одному символу ! ! !

Организуйте цикл, и отправляйте сколько угодно символов.
 
 Top
Страниц (1): [1]
« С чего начать? »


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





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