Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 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  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

Не я другое имею ввиду. Если просто присвоить(одной строкой) StringForSend = "12345";
и потом это передать.
А если использовать StringForSend как массив, то тогда же 12345 мы запишем как:
i=0
StringForSend[i]="1"
StringForSend[i+1]="2"
StringForSend[i+2]="3"
Или я что-то не понимаю?Ну т.е. вопрос в том можно ли не создавать массив, а сделать все одной строкой и потом передать строку по байтам?
kruftin вне форума  
Непрочитано 07.04.2012, 22:15  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: UART + atmega32

Да нет. Всё правильно.

uint8_t const __flash str_adr[] = "Адрес: ";

Вы учебник то почитайте ...
SasaVitebsk вне форума  
Непрочитано 07.04.2012, 23:01  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию 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.
kruftin вне форума  
Непрочитано 07.04.2012, 23:28  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию 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.
Удачи.
SasaVitebsk вне форума  
Непрочитано 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  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

У меня компилятор CVAVR, взял книжку лебедева программирование на си под AVR.
Ну у меня задачи по разбору кода от GPS модуля. В принципе даже код есть готовый из статьи(правда его надо модернизировать под мой модуль), но я хотел еще посмотреть на возможности по работе с uart. Просто я думал существуют указания как писать на си под атмегу, ведь не все функции си компилятор для авр поддерживает.
Если вопросы по uart еще будут, напиши в эту тему. Всем спасибо!
kruftin вне форума  
Непрочитано 09.04.2012, 22:00  
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию 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.
kruftin вне форума  
Непрочитано 11.04.2012, 15:55  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию 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.
OlegNZH вне форума  
Непрочитано 11.04.2012, 16:16  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию 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.
OlegNZH вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot