WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

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

P.S. гугль знает все, ну так он пусть и напишет на форуме :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

так вроде писали
http://www.radiokot.ru/forum/viewtopic. ... &start=600
http://kazus.ru/forums/showthread.php?t=17495&page=9
не, незачет как 4 применение
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение BCluster »

Как же я люблю срач, но даже меня он начинает уставать ))))
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а): что ж, выход один - снова подкорректировать константу, которая соответствует "чистой" задержке в1 микросекунду, т.е. взять не 0.8, а меньше. т.е. в моих опытах вместо 100-101-102 и т.п. задержек получалось примерно (десятые доли откидываю) 112-113-114 и т.д.
:))) т.е. получается вы опять не угадали? который раз приходится править "банальный пример", чтобы он заработал?
Подскажите, и что же надо запихнуть в _delay_us() в вашей функции, чтобы получить желаемый результат для 100, 200 и т.д. мкс? Вряд ли ошибусь, если скажу что ничего не получится.
Чтобы не быть голословным:
Частота 10Мгц, измеряю на "задержке 100мкс": значение 0.8 дает 120мкс, 0.5 - 90мкс.
Частота 16Мгц, измеряю на "задержке 100мкс": значение 0.8 дает 113мкс, 0.7 - 94мкс.
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: WinAvr в вопросах и ответах

Сообщение danger3466 »

Не могу получить символ из юарт, отправляю без проблем
Инициализация:

Код: Выделить всё

void UART_Init(void)
{
   UBRRH = UBRRH_VALUE;
   UBRRL = UBRRL_VALUE;
   UCSRB = (1 << TXEN) | (1 << RXEN);
   UCSRC = (1 << USBS) | (3 << UCSZ0);
   stdin = &UART_console;
   stdout = &UART_console;
}

Код: Выделить всё

void getstring(char *a, char size){
   char ch, i = 0;
   do{
      //ch = fgetc(stdin);
      //ch = getchar(stdin);
      while ( !(UCSRA & (1<<RXC)) )
         ch = UDR;

      if(ch == '\n' || ch == '\r') ch = '\0';

      if(i == size) ch = '\0';
      
      a[(int)i] = ch;
      i++;

   } while(ch != '\0' && i <= size);
}

в main:

Код: Выделить всё

puts("Hello\r");
char a[bufersize];
getstring(a, bufersize);
//puts(a);

bufersize в дефайне

даже puts("Hello\r"); не работает, если не закомментировать getstring(a, bufersize);
а в этот момент ВЫВОДИТ в юарт артефакт "g", независимо каким способом получать символ, видимо тут все ломается

Код: Выделить всё

//ch = fgetc(stdin);
//ch = getchar(stdin);
while ( !(UCSRA & (1<<RXC)) )
   ch = UDR;
Вложения
source.zip
(3.75 КБ) 190 скачиваний
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):который раз приходится править "банальный пример", чтобы он заработал?
Подскажите, и что же надо запихнуть в _delay_us() в вашей функции, чтобы получить желаемый результат для 100, 200 и т.д. мкс? Вряд ли ошибусь, если скажу что ничего не получится.
если не ошибетесь - это будет первое очко в вашу пользу :) а мне надоело перед вами бисер метать. захотите явного соревнования - перчатка где-то у вас под ногами валяется.

urry писал(а):так вроде писали
http://www.radiokot.ru/forum/viewtopic. ... &start=600
http://kazus.ru/forums/showthread.php?t=17495&page=9
не, незачет как 4 применение
там писали не совсем об этой теме. здесь, очевидно, нерешаемая задача в рамках WinAVR - возможно, на чистом ассемблере и можно добиться почти нормального решения, но на Си - маловероятно. кратко: здесь идет речь о функциях ПРОГРАММНОЙ задержки, задаваемой значением переменной. причем кое-кому хочется иметь возможность получать задержки с шагом в 1 микросекунду в диапазоне от 1 микросекунды до часов и более :)

в микросекундном диапазоне и тем более с ПРОГРАММНЫМИ задержками (т.е. без аппаратных таймеров) Брезенхам неуместен.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение BCluster »

С новым годом господа! Не деритесь :)
PeLeg
Родился
Сообщения: 13
Зарегистрирован: Сб окт 22, 2011 06:05:22

Re: WinAvr в вопросах и ответах

Сообщение PeLeg »

Привет всем! Господа не могу найти ошибку: после компиляции выскакивает вот такая ошибка main.c:undefined reference to 'имя функции'.
Ситуация такая: есть главный файл main.c и заголовочный uart.h,который я подключаю как #include "uart.h",функция,имя которой высвечивается в ошибке определена в этом заголовочном файле. В чем может быть проблема? :)
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

включить в makefile uart.c, возможно.
PeLeg
Родился
Сообщения: 13
Зарегистрирован: Сб окт 22, 2011 06:05:22

Re: WinAvr в вопросах и ответах

Сообщение PeLeg »

urry писал(а):включить в makefile uart.c, возможно.

А куда его включать-то :( ? вот допустим майкфайл:

Код: Выделить всё

...
# Target file name (without extension).
TARGET = main


# Object files directory
#     To put object files in current directory, use a dot (.), do NOT make
#     this an empty or blank macro!
OBJDIR = .


# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c


# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =
...

а куда включать заголовочный файл,вернее куда вписать его имя? :)
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

приложите мейкфайл
PeLeg
Родился
Сообщения: 13
Зарегистрирован: Сб окт 22, 2011 06:05:22

Re: WinAvr в вопросах и ответах

Сообщение PeLeg »

urry писал(а):приложите мейкфайл

:) Все,спасибо, японял,надо было дописать в мейкфайле имя сишного файла uart.c для заголовка uart.h,если я правильно понял вот так:

Код: Выделить всё

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c uart.c

Подправьте меня,если что не так.вроде бы скомпилился :))
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

это как бы немного неправильно, при очистке может не задеть объектный файл, все как-то проще.
мой мейкфайл от чего-то там

Код: Выделить всё

TARGET         = rom_winavr_mob
F_CPU = 20000000
CSRC           = main.c  lmx2322.c
ASRC           =
MCU_TARGET     = atmega48
OPTIMIZE       = -Os -mcall-prologues
DEFS           =
LIBS           =
DEBUG          = dwarf-2

CC             = avr-gcc
ASFLAGS        = -Wa,-adhlns=$(<:.S=.lst),-gstabs $(DEFS)
ALL_ASFLAGS    = -mmcu=$(MCU_TARGET) -I. -x assembler-with-cpp $(ASFLAGS)
CFLAGS         = -g$(DEBUG) -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
LDFLAGS        = -Wl,-Map,$(TARGET).map
OBJ            = $(CSRC:.c=.o) $(ASRC:.S=.o)

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump
SIZE           = avr-size


all:   clean $(TARGET).elf lst text size

$(TARGET).elf: $(OBJ)
   $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)


clean:
   rm -rf *.o $(TARGET).elf *.eps *.bak *.a
   rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
   rm -rf $(TARGET).hex

size: $(TARGET).elf
   $(SIZE) -C --mcu=$(MCU_TARGET) $(TARGET).elf

lst:  $(TARGET).lst
%.lst: %.elf
   $(OBJDUMP) -h -S $< > $@

%.o : %.S
   $(CC) -c $(ALL_ASFLAGS) $< -o $@

text: hex
hex:  $(TARGET).hex

%.hex: %.elf
   $(OBJCOPY) -j .text -j .data -O ihex $< $@
PeLeg
Родился
Сообщения: 13
Зарегистрирован: Сб окт 22, 2011 06:05:22

Re: WinAvr в вопросах и ответах

Сообщение PeLeg »

urry писал(а):это как бы немного неправильно, при очистке может не задеть объектный файл, все как-то проще.
кусок мой мейкфайл от чего-то там

:( Немножко непонятно,а что вы туда новенького добавили кроме имени заголовочного файла?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

не понял вопрос - куда именно ???
в мейк файле выставляется частота, тип контроллера, оптимизация, сишные файлы и при необходимости - ассемблерные вставки (*.S) и еепром.
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: WinAvr в вопросах и ответах

Сообщение shurikss123 »

Привет всем, есть вопрос по поводу работы внутренней eepprom.
в интернетах надыбал что если задать переменную так volatile int EEMEM butt1=0; то он сформирует файл с данными eeprom, и его можно записать, так вот а как задать адрес этой переменной (чтоб он эти данные засунул не в первую ячейку, а к примеру в 20-ю).
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение BCluster »

Ну в винавр я не знаю если возможно, в IAR возможно точно. Вопрос - а зачем вам это нужно? Может есть другой способ решить проблему?
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: WinAvr в вопросах и ответах

Сообщение shurikss123 »

BCluster писал(а):Ну в винавр я не знаю если возможно, в IAR возможно точно. Вопрос - а зачем вам это нужно? Может есть другой способ решить проблему?

может и можно, просто вдруг я страшный извращенец, я спросил, и жду ответа. да или нет, если да то как?
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение BCluster »

Можно сделать массив на весь объем еепрома и тогда можно адресовать как угодно :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

shurikss123 писал(а):Привет всем, есть вопрос по поводу работы внутренней eepprom.
в интернетах надыбал что если задать переменную так volatile int EEMEM butt1=0; то он сформирует файл с данными eeprom, и его можно записать, так вот а как задать адрес этой переменной (чтоб он эти данные засунул не в первую ячейку, а к примеру в 20-ю).

если вам в жизни не хватает геморроя, то можно его получить. WinAVR для задуманного вами предоставляет 2 способа:
1. определить для вашей переменной отдельную секцию, а затем в командной строке указать линкеру адрес, по которому эту секцию размещать. способ непростой, имхо.
2. определить в программе указатель, присвоить ему нужный адрес, и работать с ним, как с указателем (т.е. адресом) вашей переменной - в этом случае все значительно проще, имхо.
битва с дураками проиграна, победители торжествуют. слава победителям!
Ответить

Вернуться в «AVR»