Страница 40 из 111

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

Добавлено: Пн июн 06, 2011 10:29:51
maxmihan
ОК, вопрос исчерпан. Спасибо кстати за ссылку.

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

Добавлено: Чт июн 16, 2011 18:59:14
dinets
проблема
установил WinAVR AVR Studio
выбираю контролёр тини24
и мне пишет ошибки что переменная не объявлена
../usiuart.c:16: error: 'DDB4' undeclared (first use in this function)
меняю тип контроллера на тини 45 всё работает
посоветуйте где ему эти определения подложить и где их взять?
или каким контролёром можно подменить тини 24 дабы всё скомпилилось и работало на нём?

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

Добавлено: Чт июн 16, 2011 20:35:34
Мастер Ломастер
DDB4 означает 4-бит регистра DDRB - вас не смущает, что у выбранного вами контроллера физически отсутсвует 4-й бит этого порта? если не смущает, вы можете описать упомянутую константу при помощи #define

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

Добавлено: Чт июн 16, 2011 21:11:24
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)

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

Добавлено: Чт июн 16, 2011 22:00:13
ChipKiller
dinets писал(а):хм...... точно
но не смущает у меня там ничего не объявлено!
... а кому компилятор пишет tiny24.h: No such file or directory ? ... поэтому и "не объявлено".

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

Добавлено: Вт июл 12, 2011 23:06:04
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;
}
И вообше можно код мастера организовывать без прерывания или не стоит ?
Вы уж простите чайника за тупые вопросы ну если можете подскажите

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

Добавлено: Ср июл 13, 2011 07:55:10
ARV
код мастера без прерываний вполне возможен, если мастер не сильно загружен работой. а вот приемник лучше делать по прерываниям, иначе из вашей функции при остуствии приходящих данных выхода не будет...

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

Добавлено: Ср июл 13, 2011 12:13:23
alex1991
ARV спасибо за ответ теперь понятно по поводу прерывания

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

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

Добавлено: Ср июл 13, 2011 13:18:48
ARV
alex1991 писал(а):А на счет отправки и приема какой то команды подскажите пожалуйста
так что за проблема-то? вы показали код функций из даташита - что еще нужно? пользуйтесь ими. не забудьте только, что кроме этой пары есть еще пара для инициализации мастера и приемника.

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

Добавлено: Ср июл 13, 2011 13:50:39
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
          
     } };




И вообше будет код работать ?

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

Добавлено: Ср июл 13, 2011 14:31:04
ARV
INTERRUPT(SIG_SPI) - устарело, надо использовать макрос ISR(xxxx_vect) - см. документацию WinAVR

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

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

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

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

Добавлено: Ср июл 13, 2011 14:36:20
alex1991
ARV у меня пока код без прерывания будет если что потом добавлю а пока попытаться хоть что то отправить
Тогда со слейв-ом буду разбираться если с мастером все нормально

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

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

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

Подскажите, пожалуйста что я делаю не так?

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

Добавлено: Сб июл 16, 2011 22:17:50
avreal
Вероятно, make.exe просто не видит makefile. Может, не в том каталоге запускается.

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

Добавлено: Сб июл 16, 2011 22:47:04
Vaspit
avreal писал(а):Может, не в том каталоге запускается.
Всмысле? А в какой каталог нужно кидать проект?

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

Добавлено: Вс июл 31, 2011 19:11:45
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;
}

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

Добавлено: Пн авг 01, 2011 07:14:11
Мастер Ломастер
попробуйте использовать такой формат запуска avr-size (отредактируйте makefile):
avr-size --format=avr --mcu=attiny2313 bin/Debug/1.elf
разумеется, в --mcu= напишите ваш МК, как для проекта задано

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

Добавлено: Вс авг 07, 2011 17:48:16
TICLIR
ARV писал(а):формально char это не uint8_t вот и все.
А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?

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

Добавлено: Вс авг 07, 2011 21:02:22
Мастер Ломастер
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 - как раз такой) генерируют правильный код для правильной размерности на любой платформе.

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

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

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

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