реклама на сайте
подробности

 
 
10 страниц V  « < 7 8 9 10 >  
Reply to this topicStart new topic
> Нужен учитель, Если кто-то согласен стать он-лайн учителем, прошу помочь.
David_Ali
сообщение Apr 24 2013, 12:51
Сообщение #121


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(_Артём_ @ Apr 24 2013, 17:09) *
Как у вас сейчас программа выглядит?
Эхо идёт правильно?
В симуляторе не пробовали запускать?

Да эхо работает правильно. Но дело в том что когда я его отключаю оно все равно работает :-)


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 24 2013, 13:29
Сообщение #122


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(David_Ali @ Apr 24 2013, 15:51) *
Но дело в том что когда я его отключаю оно все равно работает :-)

Может RX с TX закорочены?
Попробуйте стереть МК и посмотрите будут ли тогда ехо.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 24 2013, 15:56
Сообщение #123


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(David_Ali @ Apr 24 2013, 14:43) *
осталное не работает, на атмеге 16 работает, а когда переделываю для 8ки не работает, от чего может быть? МК тоже разнве брал, все 8ки одно и тоже делают (

Коротыш на макетной плате м/у RXD и TXD ?
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 24 2013, 17:39
Сообщение #124


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(kovigor @ Apr 24 2013, 20:56) *
Коротыш на макетной плате м/у RXD и TXD ?

да нет ничего не коротит.. что то с кодом кажет не так.. или с настройками блютуз модуля..


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 24 2013, 19:25
Сообщение #125


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



#include <avr/io.h>
#include <avr/interrupt.h>


#define FOSC 8000000L//Тактовая частота
#define BAUD 9600L //Скорость порта
#define MYUBRR FOSC/16/BAUD-1


void USART_Transmit( unsigned char data );
void USART_Init( unsigned int ubrr);



//Обработка прерывания чтения USART
ISR(USART_RXC_vect)
{
int b;
b = UDR;
USART_Transmit( b ) ;//Отправляем то, что получили
}


//Инициализация модуля USART
void USART_Init( unsigned int ubrr)
{
//Задаем скорость работы USART
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;

UCSRB=(1<<RXEN)|( 1<<TXEN); //разращён прием и передача
UCSRB |= (1<<RXCIE); //прерывание при чтении

//URSEL,UMSEL=0 асинхронный,UPM01=0 Parity нет, USBS=0 1 стоп бит,UCSZ012 = 3 8бит данных

UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);


}


//Функция отправки данных
void USART_Transmit( unsigned char data )
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}

int main(void)
{
USART_Init (MYUBRR);
sei();//разрешаем прерывания

while(1)//вечный цикл
{ }


}

вот это рабочий пример для меги16, тут же меняю порты и регистры для меги8, беру из ДШ, ничего не работает, возвращает все символы. как думаете изза чего?

Сообщение отредактировал David_Ali - Apr 24 2013, 19:26


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 24 2013, 19:36
Сообщение #126


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(David_Ali @ Apr 24 2013, 20:39) *
... или с настройками блютуз модуля..

Или. Например, в телефонных модемах был отключаемый режим эха (echo). Не ваш ли это случай ?
При наличии осциллографа проверить эту гипотезу очень просто - достаточно отключить передатчик модуля от приемника МК и на вход приемника модуля подать ваши символы. Если модуль тут же их возвращает (это и покажет осциллограф, но до МК эти возвращенные символы не дойдут), то вопрос оказывается исчерпанным ...
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 25 2013, 04:02
Сообщение #127


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(kovigor @ Apr 25 2013, 00:36) *
Или. Например, в телефонных модемах был отключаемый режим эха (echo). Не ваш ли это случай ?
При наличии осциллографа проверить эту гипотезу очень просто - достаточно отключить передатчик модуля от приемника МК и на вход приемника модуля подать ваши символы. Если модуль тут же их возвращает (это и покажет осциллограф, но до МК эти возвращенные символы не дойдут), то вопрос оказывается исчерпанным ...

В таком случае другие МК тоже не работали бы. А они то работают.


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 25 2013, 09:34
Сообщение #128


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(David_Ali @ Apr 25 2013, 08:02) *
В таком случае другие МК тоже не работали бы. А они то работают.
ваш последний продемонстрированный код ДОЛЖЕН всегда выдавать принятый символ. если он не выдает этот символ, то увидеть, что программа "работает" попросту невозможно, так как кроме этого ваша программа ничего не делает.

есть предложение перестать тратить попусту время всех, кто пытается вам помочь, за счет демонстрации "полноценного" исходника, а не усеченного каким-то способом (я подозреваю, что вы его слегка укорачиваете, прежде чем выложить здесь), причем в варианте "работает" и в варианте "не работает". заниматься догадками о том, что и как вы меняете, что у вас есть "работает", а что нет, нет совершенно никакого желания.

P.S. на сколько мне не изменяет память, в WinAVR принято тактовую частоту МК определять макросом F_CPU, а не FOSC... то есть в своей программе вы можете брать уже готовый макрос F_CPU, а не задавать его самостоятельно. кроме того, есть специальный модуль util/setbaud.h, который призван сделать за вас все вычисления констант для настройки модуля USART, рекомендую пользоваться.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 25 2013, 14:19
Сообщение #129


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(ARV @ Apr 25 2013, 14:34) *
ваш последний продемонстрированный код ДОЛЖЕН всегда выдавать принятый символ. если он не выдает этот символ, то увидеть, что программа "работает" попросту невозможно, так как кроме этого ваша программа ничего не делает.

есть предложение перестать тратить попусту время всех, кто пытается вам помочь, за счет демонстрации "полноценного" исходника, а не усеченного каким-то способом (я подозреваю, что вы его слегка укорачиваете, прежде чем выложить здесь), причем в варианте "работает" и в варианте "не работает". заниматься догадками о том, что и как вы меняете, что у вас есть "работает", а что нет, нет совершенно никакого желания.

P.S. на сколько мне не изменяет память, в WinAVR принято тактовую частоту МК определять макросом F_CPU, а не FOSC... то есть в своей программе вы можете брать уже готовый макрос F_CPU, а не задавать его самостоятельно. кроме того, есть специальный модуль util/setbaud.h, который призван сделать за вас все вычисления констант для настройки модуля USART, рекомендую пользоваться.

Я не тот код послал. Извините. Приду домой сразу вышлю.


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 25 2013, 16:38
Сообщение #130


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(David_Ali @ Apr 25 2013, 19:19) *
Я не тот код послал. Извините. Приду домой сразу вышлю.

#include <avr/io.h>
#include <avr/interrupt.h>


#define FOSC 8000000L//Тактовая частота
#define BAUD 9600L //Скорость порта
#define MYUBRR FOSC/16/BAUD-1


void USART_Transmit( unsigned char data );
void USART_Init( unsigned int ubrr);




ISR(USART_RXC_vect)
{
int b;
b = UDR;
USART_Transmit( B );
}



void USART_Init( unsigned int ubrr)
{

UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;

UCSRB=(1<<RXEN)|( 1<<TXEN);
UCSRB |= (1<<RXCIE);



UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);


}


void USART_Transmit( unsigned char data )
{
while ( !(UCSRA & (1<<UDRE)) );
UDR = data;
}

int main(void)
{
char data;
PORTB=0x00;
DDRB=0xFF;

PORTD=0x00;
DDRD=0x00;
USART_Init (MYUBRR);
sei();

while(1)
{

data=UDR;

if(data=='A')
{
PORTB=0x1;
}
if(data=='B')
{
PORTB=0x00;
}

}
}

вот это рабочий код на атмега16. на атмега восемь он не работает(естественно я меняю что надо по ДШ на мегу 8). кто знает что там нужно поменять скажите, и объясните почему!!)
прошу учить, а не поучать!
P.S. GGC AVRом компилирую. потому что код вижн не дает мне хекс файлов, хоть в настройках я и указываю оутпут файлы хексами. и как использовать <util/setbaud.h>??

Сообщение отредактировал David_Ali - Apr 25 2013, 16:57


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 25 2013, 17:11
Сообщение #131


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(David_Ali @ Apr 25 2013, 19:38) *
вот это рабочий код на атмега16. на атмега восемь он не работает(естественно я меняю что надо по ДШ на мегу 8). кто знает что там нужно поменять скажите, и объясните почему!!)

Что-то вы или не то копипастите, или ещё что...
Ваш код не только работать не может, он даже не откомпилируется.

Цитата(David_Ali @ Apr 25 2013, 19:38) *
ISR(USART_RXC_vect)
{
int b;
b = UDR;
USART_Transmit( B );
}
Какая такая переменная B? GCC не возражает?
Насчёт остального тут (проблемы с определением переменной data). Оптимизатор весь while из main выкинул.

тут
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 25 2013, 17:17
Сообщение #132


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(David_Ali @ Apr 25 2013, 20:38) *
вот это рабочий код на атмега16. на атмега восемь он не работает(естественно я меняю что надо по ДШ на мегу 8). кто знает что там нужно поменять скажите, и объясните почему!!)
прошу учить, а не поучать!
P.S. GGC AVRом компилирую. потому что код вижн не дает мне хекс файлов, хоть в настройках я и указываю оутпут файлы хексами. и как использовать <util/setbaud.h>??

это не рабочий код. если он вдруг ведет себя так, как вы предполагаете, то это свидетельствует только об одном из двух: либо вы даже и не предполагаете, как он должен себя вести, либо чисто случайно все выглядит по-вашему. поясню, почему я так считаю.

1. у вас есть прерывание ПО ПРИЕМУ символа. внутри обработчика этого прерывания вы незамедлительно считываете UDR и выдаете принятое обратно. это называется ЭХО. в терминале вы обязаны получать обратно то, что передали.


2. в основном цикле вы непрерывано и постоянно считываете UDR, при этом абсолютно не заботясь о том, есть там данные или нет. честно говоря, я никогда не интересовался, что будет происходить, если во время приема байта считывать UDR... это порочная практика. но могу предположить, что в меге8 UDR не имеет двойной буфферизации, а в меге16 он буфферизирован. т.е. при наличии двойной буфферизации до тех пор, пока что-то не будет принято, вы считываете НОЛЬ из буфера. если же буферизации нет, то что вы считываете во время приема - я не могу даже предположить (а читать даташит не хочется, лень).

3. итак, у вас есть две точки в программе, где вы НЕЗАВИСИМО считываете UDR. по-вашему, это нормально? приведу пример: по конвейеру едут пирожки, а по бокам конвейера стоят Вася и Петя. вы надеетесь, что им обоим достанется поровну пирожков, но на самом деле это зависит от ловкости каждого. Если Вася более ловкий, то Петя останется голодным, ну возможно, иной раз все-таки что-то и ему перепадет... так вот, обработчик прерывания - это у вас шустрый Вася, а основной цикл - тормоз Петя...

вам уже намекали, что нормальная практика - это либо работать с UDR исключительно через прерывания, либо исключительно из основного цикла. но вы решили поступить по-своему. обучение всегда начинается с того, что ученик строго следует наказам учителя, и только освоив учительские методы полностью, может попытаться пойти своим путем. рекомендую и в случае с МК поступать так же точно.

P.S. как пользоваться util/setbaud.h, написано в документации к WinAVR. так же можете почитать и мои скромные попытки рассказать об этом: http://www.simple-devices.ru/attachments/a...AVR_02_2011.pdf
так же есть еще немного по родственным темам: http://www.simple-devices.ru/articles/7-so...navr-console-io (тут как раз есть исходники с примером использования setbaud.h).




--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 25 2013, 17:28
Сообщение #133


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(ARV @ Apr 25 2013, 22:17) *
это не рабочий код.

Рабочий!! я его скомпилировал, залил в МК и все работает так как мне надо. как это не рабочий..

Цитата(_Артём_ @ Apr 25 2013, 22:11) *
Что-то вы или не то копипастите, или ещё что...
Ваш код не только работать не может, он даже не откомпилируется.


тут

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

Цитата(ARV @ Apr 25 2013, 22:17) *
P.S. как пользоваться util/setbaud.h, написано в документации к WinAVR. так же можете почитать и мои скромные попытки рассказать об этом: http://www.simple-devices.ru/attachments/a...AVR_02_2011.pdf
так же есть еще немного по родственным темам: http://www.simple-devices.ru/articles/7-so...navr-console-io (тут как раз есть исходники с примером использования setbaud.h).

Спасибо за информацию!


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 25 2013, 17:52
Сообщение #134


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(David_Ali @ Apr 25 2013, 21:28) *
Рабочий!! я его скомпилировал, залил в МК и все работает так как мне надо. как это не рабочий..
читайте мои словесные излияния. если описанное мною вам и нужно - я пас, не жалуйтесь. так нормальные программисты не пишут, извините.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
David_Ali
сообщение Apr 25 2013, 18:06
Сообщение #135


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 28-02-13
Пользователь №: 75 833



Цитата(ARV @ Apr 25 2013, 22:52) *
читайте мои словесные излияния. если описанное мною вам и нужно - я пас, не жалуйтесь. так нормальные программисты не пишут, извините.

Не доделанное добро это не есть добро.. Пас есть пас.. Спасибо за все. Сам разберусь.


--------------------
Viva la resistance!
Go to the top of the page
 
+Quote Post

10 страниц V  « < 7 8 9 10 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 17:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01544 секунд с 7
ELECTRONIX ©2004-2016