Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.04.2012, 16:48
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: UART + atmega32
Сообщение от kruftin
|
а для avr нету в си строковых типов переменных??
_Артём_, большое спасибо за код.
|
Зависит от того на чём писать.
Думаю что для AVRGCC всё есть, да и для остальных C тоже наверняка есть.
Сообщение от kruftin
|
Чтобы unsigned string StringForSend; - и в строке лежит несколько байт
И вот ее надо передать.
|
Код:
|
unsigned char StringForSend[];
void SendString(void)
{
unsigned char i=0;
while (StringForSend[i]) SendByte(StringForSend[i++]);
} |
Или вы что-то по другое хотите посылать?
Сообщение от kruftin
|
Руководство по написанию программ на си для atmega32 существует официльное или надо читать переводы на русском?
_Артём_, большое спасибо за код.
|
Специально для M32 несуществует. Переводов тоже мало.
Есть книги по программированию АВР, но в основном на асм или переводы даташитов.
Читать лучше Кернигана и Ритчи и Страуструп и тд: АВР - такой же МК как другие. И доку к компилятору.
|
|
|
|
07.04.2012, 21:39
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
Не я другое имею ввиду. Если просто присвоить(одной строкой) StringForSend = "12345";
и потом это передать.
А если использовать StringForSend как массив, то тогда же 12345 мы запишем как:
i=0
StringForSend[i]="1"
StringForSend[i+1]="2"
StringForSend[i+2]="3"
Или я что-то не понимаю?Ну т.е. вопрос в том можно ли не создавать массив, а сделать все одной строкой и потом передать строку по байтам?
|
|
|
|
07.04.2012, 22:15
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: UART + atmega32
Да нет. Всё правильно.
uint8_t const __flash str_adr[] = "Адрес: ";
Вы учебник то почитайте ...
|
|
|
|
07.04.2012, 23:01
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
Дак подскажите нормальный учебник).
uint8_t const __flash str_adr[] = "Адрес: ";
В результате в uint8_t const __flash str_adr[0] будет лежать "A",
uint8_t const __flash str_adr[1] будет "Д" ?
В принципе того что уже понаписано мне хватит для решения всех задач по uart.
|
|
|
|
07.04.2012, 23:28
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: UART + atmega32
Сообщение от kruftin
|
Дак подскажите нормальный учебник).
|
Вам _Артём_ уже подсказал. Я бы также Шилдта предложил. Уж очень мне в нём изложение нравится
Цитата:
|
uint8_t const __flash str_adr[] = "Адрес: ";
В результате в uint8_t const __flash str_adr[0] будет лежать "A",
uint8_t const __flash str_adr[1] будет "Д" ?
|
Всё правильно. А последним символом будет 0.
Цитата:
|
В принципе того что уже понаписано мне хватит для решения всех задач по uart.
|
Удачи.
|
|
|
|
07.04.2012, 23:53
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: UART + atmega32
Сообщение от kruftin
|
Дак подскажите нормальный учебник).
|
Керниган, Ритчи "Язык программирования Си"
Но про АВР там ничего не будет, поэтому нужно смотреть описание компилятора.
Сообщение от kruftin
|
uint8_t const __flash str_adr[] = "Адрес: ";
В результате в uint8_t const __flash str_adr[0] будет лежать "A",
uint8_t const __flash str_adr[1] будет "Д" ?
|
Да.
Но это для IAR AVR, если у вас другой компилятор, то смотрите в описании на него.
Сообщение от kruftin
|
В принципе того что уже понаписано мне хватит для решения всех задач по uart.
|
Ну так уж и всех.
|
|
|
|
08.04.2012, 09:57
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
У меня компилятор CVAVR, взял книжку лебедева программирование на си под AVR.
Ну у меня задачи по разбору кода от GPS модуля. В принципе даже код есть готовый из статьи(правда его надо модернизировать под мой модуль), но я хотел еще посмотреть на возможности по работе с uart. Просто я думал существуют указания как писать на си под атмегу, ведь не все функции си компилятор для авр поддерживает.
Если вопросы по uart еще будут, напиши в эту тему. Всем спасибо!
|
|
|
|
09.04.2012, 22:00
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
Написал вот такой код в Codevision AVR, все нормальное выдается по терминалу, кроме двух строчек с массивом(там буква г маленькая):
unsigned char gga_data[2]={1,2};
while(1){
unsigned char j;
j = gga_data[0];
sym = USART_GetChar(); //читаем буфер
h = 123;
if (1){ //если что-то приняли, то
USART_SendChar('p'); //отвечаем компу "Ok "
USART_SendChar('r');
USART_SendChar('i');
USART_SendChar('v');
USART_SendChar('e');
USART_SendChar('t');
USART_SendChar('!');
USART_SendChar(j);
USART_SendChar(gga_data[1]);
USART_SendChar(sym);
delay_ms(500);
}
}
А вот если так пишу unsigned char gga_data[2]={'1','2'}; то все норм
Последний раз редактировалось kruftin; 09.04.2012 в 22:20.
|
|
|
|
11.04.2012, 15:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: UART + atmega32
Сообщение от _Артём_
|
Посмотрел файлы.
Вряд ли в этом дело, но так:
Код:
|
UBRRH = 0;
UBRRL = 51; //скорость обмена 9600 бод |
неправильно.
Надо так (могу ошибаться, сверьтесь с ДШ):
Код:
|
UBRRL = 51; //скорость обмена 9600 бод
UBRRH = 0; |
|
Ошибаетесь.Сначала пишется старший байт,затем младший.Запись UBRRL инициирует перезапись в регистр UBRR новых данных.
Сообщение от kruftin
|
fuse ckdiv8 равен 1, т.е. не установлен. Скорости совпадают, перепроверил.
|
Не понял - откуда в Mege32 CKDIV8 ? Он в Tiny2313.
Да и там программно может ставится
// Crystal Oscillator division factor: 1
CLKPR=0x80;
CLKPR=0x00;
Последний раз редактировалось OlegNZH; 11.04.2012 в 16:04.
|
|
|
|
11.04.2012, 16:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: UART + atmega32
Сообщение от kruftin
|
Написал вот такой код в Codevision AVR, все нормальное выдается по терминалу, кроме двух строчек с массивом(там буква г маленькая):
unsigned char gga_data[2]={1,2};
...
А вот если так пишу unsigned char gga_data[2]={'1','2'}; то все норм
|
В первом случае Вы передаёте числа 0x01 и 0x02, Терминал не может их отобразить буквой, заменяет на 'г' , во втором Вы посылаете 0x31,0x32 (Коды литер '1' и '2'). Вы включите в Терминале отображение и HEX и ASCII.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Прошивка atmega32
|
kruftin |
Микроконтроллеры, АЦП, память и т.д |
10 |
17.02.2012 17:22 |
Atmega32 и энкодер
|
Pevek80 |
Микроконтроллеры, АЦП, память и т.д |
21 |
06.03.2011 20:46 |
Atmega32 и LCD
|
DEJL1985 |
Делимся опытом |
8 |
20.06.2010 14:35 |
ATmega32
|
NCy |
Микроконтроллеры, АЦП, память и т.д |
20 |
28.04.2007 00:44 |
Внутренее АЦП в ATmega32
|
Ztman |
Микроконтроллеры, АЦП, память и т.д |
0 |
25.04.2007 22:51 |
Часовой пояс GMT +4, время: 04:57.
|
|