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

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

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

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

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

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


 
Опции темы

Помощь в WinAvr

Непрочитано 18.11.2010, 14:03  
WartKert
Частый гость
 
Регистрация: 12.07.2009
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
WartKert на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от Cybermaker Посмотреть сообщение
У вас же в конце мэйна нет бесконечного цикла - вот процессор и бежит до конца памяти, а потом начинает программу сначала.
Так он после выполнения ф-ции прерывания должен должен ведь вернуться в цикл(delay()), а не начинать программу сначала.
Реклама:
WartKert вне форума  
Непрочитано 18.11.2010, 14:08  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от WartKert Посмотреть сообщение
Так он после выполнения ф-ции прерывания должен должен ведь вернуться в цикл(delay()), а не начинать программу сначала.
А где у вас "цикл(delay())" ? Я не вижу там цикла.
st_1 вне форума  
Непрочитано 18.11.2010, 14:13  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Я все же для AGAT0365 отпишусь.
По умолчанию printf в ВинАвр выводит символы в поток stderr. Но это поток-пустышка. Там нет реальных функций вывода. В PC обычно вывод идет в консоль, а вот в микроконтроллерах обычно консоли нет. Поэтому если очень хочется выводить именно через printf, то надо такой поток создать - определить реальные функции записи в поток. Пример есть прямо в самом WinAvr- WinAVR\doc\avr-libc\examples\stdiodemo Там вывод через printf в UART.
Но в любом случае лучше не пользоваться прямым выводом из printf, если цель - вывод в UART. Посимвольный вывод идет очень медленно, ведь он основан на поллинге флага готовности UART, а не по прерываниям. Допустим выводим 20 символов при скорости 9600 - это 20 миллисекунд 100% загрузки контроллера. При наличии аппаратного UART! ИМХО это ни куда не годится. Да, кроме функций ввода/вывода в поток нужно еще и аппаратный ресурс инициализировать. Тот же UART например. printf понятия не имеет куда идет вывод и сама ничего не настроит. Типа скорости, бита четности, количества стопбитов. Да и просто включить UART было бы неплохо до вывода в него.
Если уж так нужен форматированный вывод в UART, то есть sprintf. Функция аналогичная printf, но выводит символы в строку по переданному ей указателю. Дальше с этой строкой можно делать что угодно, в том числе и передать по UART, но уже нормально - по прерываниям.
kison вне форума  
Непрочитано 18.11.2010, 16:29  
WartKert
Частый гость
 
Регистрация: 12.07.2009
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
WartKert на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от st_1 Посмотреть сообщение
А где у вас "цикл(delay())" ? Я не вижу там цикла.
Может я не правильно выразился, но в функции delay(10) есть цикл, где вообще и разрешается прерывания. И условие выхода из цикла, когда переменная cycl ›= 10.
WartKert вне форума  
Непрочитано 18.11.2010, 16:41  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от WartKert Посмотреть сообщение
И условие выхода из цикла, когда переменная cycl ›= 10.
И куда будет выход?
Добавьте while(1){}; после Вашего цикла. Точнее - после вызова delay(10);
cycl объявлена с volatile?
Запрещать прерывания внутри обработчика не надо - они и так запрещены.
И reti() там тоже не надо делать!
kison вне форума  
Непрочитано 18.11.2010, 21:44  
AGAT0365
Прописка
 
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
AGAT0365 на пути к лучшему
По умолчанию Re: Помощь в WinAvr

kison я благодарин за такой содержательный ответ. Но я не могу понять почему так сложно, мне надо отправлять на комп двухзначную цифру через COM порт с пареодичностью 5 мин ( спец.вывод TxD). И что такое ИМХО?
AGAT0365 вне форума  
Непрочитано 18.11.2010, 23:02  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от AGAT0365 Посмотреть сообщение
И что такое ИМХО?
Надо же, думал в Рунете это уже все знают.
http://ru.wikipedia.org/wiki/ИМХО

Сообщение от AGAT0365 Посмотреть сообщение
мне надо отправлять на комп двухзначную цифру через COM порт с пареодичностью 5 мин
Для этого не нужен printf. Опишите задачу подробнее - что за число и в каком виде его надо отправлять. Подскажем как это сделать.
А сложность с printf кажущаяся. Посмотрите все же пример из каталога WinAvr.
kison вне форума  
Непрочитано 19.11.2010, 08:30  
Cybermaker
Вид на жительство
 
Регистрация: 21.08.2007
Сообщений: 318
Сказал спасибо: 12
Сказали Спасибо 67 раз(а) в 61 сообщении(ях)
Cybermaker на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Глянул более внимательно на листинг. Признаюсь - был не прав. Надо думать что тут к чему. Удаление reti не помогло ?

Последний раз редактировалось Cybermaker; 19.11.2010 в 08:38.
Cybermaker вне форума  
Непрочитано 19.11.2010, 23:37  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Для того, чтобы заставить работать printf достаточно
(проц Атмега 16, кварц на 11,0592 MHz)
Код:
// cpu: ATMega16
// speed: 11.0592 MHz

#include ‹stdio.h›
#include ‹avr/io.h›

//Подготовка UART
static int uart_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);

static int uart_putchar(char c, FILE *stream)
{
   loop_until_bit_is_set(UCSRA, UDRE);
   UDR = c;
   return 0;
}
В main выполнить выполнить инициализацию СОМ порта
Код:
// usart '0'
// settings: 57600 8-n-1
UCSRA = 0;
UCSRB = (1‹‹TXEN);
UCSRC = (1‹‹URSEL)|(1‹‹UCSZ1)|(1‹‹UCSZ0);
UBRRH = 0;
UBRRL = 11;
и уже можете использовать printf
Код:
printf("Hello, world!"]);
CodeNameHawk вне форума  
Эти 2 пользователя(ей) сказали Спасибо CodeNameHawk за это сообщение:
Cyber_RAT (20.11.2010), hostel6psu (07.02.2011)
Непрочитано 20.11.2010, 02:22  
WartKert
Частый гость
 
Регистрация: 12.07.2009
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
WartKert на пути к лучшему
По умолчанию Re: Помощь в WinAvr

Сообщение от Cybermaker Посмотреть сообщение
Удаление reti не помогло ?
Помогло вместе с добавлением While(1). Кстате если можете, объясните тогда что reti() делает? И возможно ли в #define такое написание? А то что-то у меня условие всегда выполняется, хотя вроде бы не должно.
Цитата:
#define Knopka1 PINB=PINB & 0x01 //PB0
void main(){
DDRB=0x00;
PORTB=0xE7;
while(1){
if (Knopka1==0)
{
OCR0A=speed;
}
}
}
WartKert вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06
На WinAVR + AVR Studio c CVAVR Vetal-soft Embedd С 87 03.03.2013 20:31
WinAVR: Cи vs C++ vovan_zh Микроконтроллеры, АЦП, память и т.д 3 08.10.2010 23:06
WinAVR не нравится символ '\' vovan_zh Микроконтроллеры, АЦП, память и т.д 10 10.09.2010 20:48
помогите начинающему по WinAVR umkamaks Микроконтроллеры, АЦП, память и т.д 4 05.05.2010 21:01


Часовой пояс GMT +4, время: 01:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.