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

Обсуждаем контроллеры компании Atmel.
maxmihan
Родился
Сообщения: 3
Зарегистрирован: Пт июн 03, 2011 17:14:24

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

Сообщение maxmihan »

ОК, вопрос исчерпан. Спасибо кстати за ссылку.
Реклама
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

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

Сообщение dinets »

проблема
установил WinAVR AVR Studio
выбираю контролёр тини24
и мне пишет ошибки что переменная не объявлена
../usiuart.c:16: error: 'DDB4' undeclared (first use in this function)
меняю тип контроллера на тини 45 всё работает
посоветуйте где ему эти определения подложить и где их взять?
или каким контролёром можно подменить тини 24 дабы всё скомпилилось и работало на нём?
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

DDB4 означает 4-бит регистра DDRB - вас не смущает, что у выбранного вами контроллера физически отсутсвует 4-й бит этого порта? если не смущает, вы можете описать упомянутую константу при помощи #define
битва с дураками проиграна, победители торжествуют. слава победителям!
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

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

Сообщение dinets »

хм...... точно
но не смущает у меня там ничего не объявлено!
Build started 16.6.2011 at 20:51:52
avr-gcc -mmcu=attiny24 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT mainnew.o -MF dep/mainnew.o.d -c ../mainnew.c
../mainnew.c:33:20: error: tiny24.h: No such file or directory
../mainnew.c: In function 'set_ports':
../mainnew.c:40: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:40: error: (Each undeclared identifier is reported only once
../mainnew.c:40: error: for each function it appears in.)
../mainnew.c:40: error: 'DDB3' undeclared (first use in this function)
../mainnew.c:41: error: 'PORTB' undeclared (first use in this function)
../mainnew.c: At top level:
../mainnew.c:43: warning: return type of 'main' is not 'int'
../mainnew.c: In function 'main':
../mainnew.c:48: warning: ignoring #pragma optsize
../mainnew.c:49: error: 'CLKPR' undeclared (first use in this function)
../mainnew.c:59: error: 'PORTA' undeclared (first use in this function)
../mainnew.c:60: error: 'DDRA' undeclared (first use in this function)
../mainnew.c:65: error: 'PORTB' undeclared (first use in this function)
../mainnew.c:66: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:74: error: 'TCCR0A' undeclared (first use in this function)
../mainnew.c:75: error: 'TCCR0B' undeclared (first use in this function)
../mainnew.c:76: error: 'TCNT0' undeclared (first use in this function)
../mainnew.c:77: error: 'OCR0A' undeclared (first use in this function)
../mainnew.c:78: error: 'OCR0B' undeclared (first use in this function)
../mainnew.c:92: error: 'TCCR1A' undeclared (first use in this function)
../mainnew.c:93: error: 'TCCR1B' undeclared (first use in this function)
../mainnew.c:94: error: 'TCNT1H' undeclared (first use in this function)
../mainnew.c:95: error: 'TCNT1L' undeclared (first use in this function)
../mainnew.c:96: error: 'ICR1H' undeclared (first use in this function)
../mainnew.c:97: error: 'ICR1L' undeclared (first use in this function)
../mainnew.c:98: error: 'OCR1AH' undeclared (first use in this function)
../mainnew.c:99: error: 'OCR1AL' undeclared (first use in this function)
../mainnew.c:100: error: 'OCR1BH' undeclared (first use in this function)
../mainnew.c:101: error: 'OCR1BL' undeclared (first use in this function)
../mainnew.c:107: error: 'MCUCR' undeclared (first use in this function)
../mainnew.c:108: error: 'GIMSK' undeclared (first use in this function)
../mainnew.c:111: error: 'TIMSK0' undeclared (first use in this function)
../mainnew.c:113: error: 'TIMSK1' undeclared (first use in this function)
../mainnew.c:119: error: 'USICR' undeclared (first use in this function)
../mainnew.c:124: error: 'ACSR' undeclared (first use in this function)
../mainnew.c:125: error: 'ADCSRB' undeclared (first use in this function)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

dinets писал(а):хм...... точно
но не смущает у меня там ничего не объявлено!
... а кому компилятор пишет tiny24.h: No such file or directory ? ... поэтому и "не объявлено".
Реклама
alex1991
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср апр 14, 2010 20:42:24
Откуда: Молдова г,Кишинев

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

Сообщение alex1991 »

Всем добрый вечер!
Есть пару вопросов по WinAvr
Сейчас разбираюсь со SPI и пытаюсь ради эксперимента связать две меги Atmega16-master и Atmega8-слейв и мне хотелось понять как мне отослать какие то данные в слейв тоесть какой формат кода должен быть и как в слейве проверить пришел нужные данные или нет чтоб их обработать
Вот код из даташита я так понял SPDR-регистр отвечавший за прием и отправку данных ?
А cData - сами данные
Ну вот есть у меня команда к слейву 0х10 подскажите как отправить и принять пожалуйста

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

void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}


Код слейва на прием

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

char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)))
;
/* Return data register */
return SPDR;
}

И вообше можно код мастера организовывать без прерывания или не стоит ?
Вы уж простите чайника за тупые вопросы ну если можете подскажите
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
alex1991
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср апр 14, 2010 20:42:24
Откуда: Молдова г,Кишинев

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

Сообщение alex1991 »

ARV спасибо за ответ теперь понятно по поводу прерывания

А на счет отправки и приема какой то команды подскажите пожалуйста
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

alex1991 писал(а):А на счет отправки и приема какой то команды подскажите пожалуйста

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

Мой уютный бложик... заходите!
alex1991
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср апр 14, 2010 20:42:24
Откуда: Молдова г,Кишинев

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

Сообщение alex1991 »

Вот весь код Мастера он должен отправлять слейву команду 255 Проверьте пожалуйста если не сложно

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

#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>


#define PORT_SS          4
#define PORT_MOSI      5
#define PORT_MISO      6
#define PORT_SCK      7

#define PORT_SPI    PORTB
//#define DDR_SPI      DDRB


                             //Функции
//******************************************************************************************
/*
INTERRUPT(SIG_SPI)
{

unsigned char data;

data = SPDR ;   
//printf ("\n\r%d", data ) ;
           
}
*/

//Инициализация SPI_MasterInit
void SPI_MasterInit(void)
{
/*  MOSI и SCK выход, остальные входы */
PORT_SPI = (1<<PORT_MOSI)|(1<<PORT_SCK);
/* Включить SPI,работает как Master, скорость SCK 125,000 kHz */
SPCR = (1<<SPE)|(1<<MSTR);
}
//Иниализация SPI_MasterTransmit
void SPI_MasterTransmit(char cData)
{
PORTB&=~_BV(PORT_SS);//сбрасываем SS в нуль
SPDR = cData;//начинаем передачу
/* Дожидаемся полной передачи */
while(!(SPSR & (1<<SPIF)));
PORTB|=_BV(PORT_SS);//поднимаем ногу SS в единицу
}
                                //Оснавная программа
//******************************************************************************************

int main(void)  // Input/Output Ports initialization

{
DDRB = 0b11110000;
PORTB = 0b00000000;

SPI_MasterInit();// Инициализация SPI_MasterInit
 



while (1)
      {
       SPI_MasterTransmit(255);//отправка слейву 255
         
     } };





И вообше будет код работать ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

INTERRUPT(SIG_SPI) - устарело, надо использовать макрос ISR(xxxx_vect) - см. документацию WinAVR

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

while (1){ 
       SPI_MasterTransmit(255);//отправка слейву 255
}
этот код будет посылать 255 непрерывно и постоянно.

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

Мой уютный бложик... заходите!
alex1991
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср апр 14, 2010 20:42:24
Откуда: Молдова г,Кишинев

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

Сообщение alex1991 »

ARV у меня пока код без прерывания будет если что потом добавлю а пока попытаться хоть что то отправить
Тогда со слейв-ом буду разбираться если с мастером все нормально
Vaspit
Родился
Сообщения: 2
Зарегистрирован: Сб июл 16, 2011 21:37:29

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

Сообщение Vaspit »

Скачал последний WinAvr, настроил его так же как и в статье на этом http://myrobot.ru/stepbystep/mc_makefile.php сайте. А для большей надёжности вообще скачал makefile из той же статьи.

И всё равно вылазет вот эта ошибка: make.exe: *** No rule to make target `all'. Stop. Причём не важно какой код (мой или готовый, с любого сайта).

Подскажите, пожалуйста что я делаю не так?
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Вероятно, make.exe просто не видит makefile. Может, не в том каталоге запускается.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Vaspit
Родился
Сообщения: 2
Зарегистрирован: Сб июл 16, 2011 21:37:29

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

Сообщение Vaspit »

avreal писал(а):Может, не в том каталоге запускается.


Всмысле? А в какой каталог нужно кидать проект?
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

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

Сообщение sachok »

У меня есть опрос по AVR-GCC. После компиляции проверяется величина кода, на выходе я получаю такую информацию:

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

Output size is 6.04 KB
Running project post-build steps
avr-size bin/Debug/1.elf
   text  data   bss    dec  hex   filename
     70    0         0        70    46   bin/Debug/1.elf

Как понять сколько занято памяти МК? Я так понял что 70 байт, это верно?
Сама програмка ( :)) ) :

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

#include <avr/io.h>
int main(void)
{
    while(1);
    return 0;
}
Я не Сашок!!!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

попробуйте использовать такой формат запуска avr-size (отредактируйте makefile):
avr-size --format=avr --mcu=attiny2313 bin/Debug/1.elf
разумеется, в --mcu= напишите ваш МК, как для проекта задано
битва с дураками проиграна, победители торжествуют. слава победителям!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

ARV писал(а):формально char это не uint8_t вот и все.

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

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

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

TICLIR писал(а):
ARV писал(а):формально char это не uint8_t вот и все.

А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.

делайте выводы сами
битва с дураками проиграна, победители торжествуют. слава победителям!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Мастер Ломастер писал(а):
TICLIR писал(а):
ARV писал(а):формально char это не uint8_t вот и все.

А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.

делайте выводы сами

Спасибо, интересно было узнать.
Ответить

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