CodeVision AVR в вопросах и ответах

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

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

ARV писал(а):а вам на самом деле важно, чтобы контроллер не простаивал? ;)

В принципе передача и без прерывания работает.Но если есть - чего не использовать....
С уважением...
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

На самом деле при передаче быстрее работать без прерываний, т.к. прерывание подразумевает вход и выход из обработчика и это на каждый байт передачи, плюс другие прерывания в это время обработаться не могут. Лучше в основном цикле проверять флаг готовности буфера передачи, и если готов, передать очередной байт и дальше идти по программе, если еще не готов передавать, тогда просто пропускать и идти дальше по программе.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Создал структуру тип Cel и переменную Cell
struct Cel
{
unsigned int V; //Voltage
unsigned int Va; //Absolute Voltage
unsigned int Vas[5]; //Absolute Voltage Array
unsigned int Vr; //Real Voltage (Excluding Voltage aplayed to intRes)
unsigned int intRes; // Internal Resistance
unsigned char BMS_ON;
unsigned char FTc; //first time and counter
}
Cell[4];

Теперь хочу в функцию передать указатель например на Cell[1]

Создал такую функцию
void FTC(struct Cel *A){
*A.V=1;

}

И пытаюсь работать с переменной А в функции но возникает ошибка
the first argument of the "." operator must be of struct

Если переменная типа Cel и не указатель то все ок. Но мне то нужен указатель.

все нашел решение
Чтобы с помощью указателя на структуру получить доступ к ее членам, необходимо использовать оператор стрелка ->.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

amd9800 писал(а):Чтобы с помощью указателя на структуру получить доступ к ее членам, необходимо использовать оператор стрелка ->.

Да, если a - указатель на структуру, то доступ к её элементам либо через a->item; либо через (*a).item.
Первый вариант - это лишь синтаксический сахар для более общего второго, наподобие как в массивах a[i] равносильно *(a + i), что даёт более читабельный для человека код.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Не могу понять

for (char i=0;i<5;i++) { };

error: undefined simbol char

получается мне i надо объявить в начале программы.

Хотя по стандарту С могу переменную объявить в цикле for. И будет жить переменная ровно сколько цикл for.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Одновременно объявлять и использовать переменные внутри циклов можно только в C++, если не ошибаюсь, но не в C.

P.S. У меня подобное приводит к:

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

main.c:57:1: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
 for (char i=0;i<5;i++) { };
 ^
main.c:57:1: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

Так что в C, получается, тоже можно, но только в при использовании стандарта 99 года и более поздних.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

теперь понятно. Спасибо!
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

zero648 писал(а):На самом деле при передаче быстрее работать без прерываний, т.к. прерывание подразумевает вход и выход из обработчика и это на каждый байт передачи, плюс другие прерывания в это время обработаться не могут. Лучше в основном цикле проверять флаг готовности буфера передачи, и если готов, передать очередной байт и дальше идти по программе, если еще не готов передавать, тогда просто пропускать и идти дальше по программе.


Да я как-то к прерыванию и иду чтоб без проверок и безгеморойней...Да и время как-то распределится.Вот эту чудную строку как-то хочется попрерывать... :))
sprintf(string_out,"%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u",s_out1,s_out2,s_out3,s_out4,s_out5,s_out6,s_out7,s_out8,s_out9,s_out10,s_out11,s_out12,s_out13,s_out14,s_out15,s_out16);
puts(string_out);....
С уважением...
Аватара пользователя
redram55
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт мар 16, 2010 20:30:29

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

Сообщение redram55 »

Доброго всем дня
Где посмотреть как пошагово с описанием настроить ацп Atiny13 в CAVR,видео или описание,или дайте кусок кода.
пожалуйста не пишите только читай даташит,нихрена я там не пойму :( только начал изучать...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

нихрена я там не пойму
Значит надо читать до такой степени, пока не поймёте. Ибо это должна быть настольная книга, к которой нужно постоянно обращаться за помощью.
Без понимания литературы не стоит садиться за программирование, т.к. метод тыка тут не прокатывает.
Аватара пользователя
redram55
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт мар 16, 2010 20:30:29

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

Сообщение redram55 »

Ну вот опять,нужно не нужно.
Просьбу я изложил,а модератор опять - книги,читать ,библия програмиста даташит.
теперь изза пустого смысла моего и предыдущего поста их нужно сносить.
Хотите помочь помогите,форум ведь- вопросы и ответы а не посылание в библиотеку
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

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

Хотите помочь помогите
Вы считаете, что подобные ответы - не помощь ? Или Вы хотите видеть в ответах только то, что хотите видеть ? Тут уж извините, это форум, а не индивидуальные курсы обучения.
Да даже если бы Вы были на каких-нибудь курсах, нормальный преподаватель в первую очередь научил бы пользоваться литературой, а не тупо давал бы куски кода для бездумного копипаста.
Аватара пользователя
redram55
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт мар 16, 2010 20:30:29

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

Сообщение redram55 »

спасибо,я пошел
тут http://avr-start.ru/category/avr-учебный-курс/
кстати именно изза готовых примеров и обьяснений автора "индивидуально"у меня да и у многих сдвинулось с мертвого места...писал себе бакомер для газа и немог сделать усреднение в баке,автор помог куском кода,обьяснил.теперь использую этот принцип далее в своих"быдлокодах",так ведь вы профи их зовете
а тут форум целый и никто вам не будет обьяснять говорите:(
В общем кто ламер как и я заходите по ссылке выше.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Ну вот, видите, можете же если захотите. Только нужно это было сделать с самого начала, а потом уже, столкнувшись с проблемами, идти на форум с конкретными вопросами.
Удачи в освоении !
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Вот уже второй день мучаюсь с режимами sleep на атмега 8 и одни грабли.

Походу всему виной codevisionAVR.

Если я использую встроенную библиотеку sleep то режимы сна работают но там отсутствует режим ADC Noise Reduction.

Если использую классический метод то он не работает.

Настраиваю в регистре MCUCR биты SM2 SM1 и SM0

например 000 для idle

и потом устанавливаю бит SE в 1.

Режим сна должен запустится. Но эффект ноль.

Если же включаю библиотеку sleep и использую функцию idle() - эффект на лицо.
В чем же проблема?
кроме даташита использовал и данный материал
http://samou4ka.net/page/spjashhij-rezh ... llerov-avr
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Без исходного кода гадать можно долго, но судя по вашему описанию пропущен самый главный шаг - команда SLEEP.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

А разве команда #asm("sleep") это не установка бита SE в 1 в регистре MCUCR. ?

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

#define p_on  PWRD=0;TIMSK=0b00000100;ADC_Enable;delay_ms(10);ScreenLEDCount=0;
#define p_off lcd_clear();delay_ms(10);TIMSK=0b00000000;ADC_Disable;PWRD=2;
#define ADC_Int_Enable  (ADCSRA=ADCSRA|0b00001000)
#define ADC_Int_Disable (ADCSRA=ADCSRA&0b11110111)

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{TimeCount++;
 if (PWRD==0)
 {
  if (testing<1)
  {                       
   //ADC_Start;
   if (PIND.3==0) {ButPressCount++;ScreenLEDCount=0;} else {ButPressCount=0;ScreenLEDCount++;}
   if (ScreenLEDCount>ScreenLEDmax) {PORTB.1=0;}
   if (ScreenLEDCount>PowerDownMax) {ScreenLEDCount=PowerDownMax+1;p_off;}
   else {LCDscreen();
         ADC_Int_Enable;
         idle();
         }
                                               
  }
 }
}


interrupt [EXT_INT1] void ext_int1_isr(void)
 {
  if (PWRD==2){p_on}
  if (testing<1)
  {
   if (PINB.1==1)
    {
     menu++; if (menu>4) {menu=0;}
     if (menu==3) {TimeCount=0;}
     lcd_clear();
    }
   else{PORTB.1=1;}
  }
 }


Как видно я тут использую функцию idle();

Но если я заменяю ее прямыми изменениями регистра MCUCR=MCUCR|0b10000000;
Счастья не видать
Последний раз редактировалось amd9800 Пт фев 06, 2015 10:23:39, всего редактировалось 2 раза.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Спасибо испытаю.


Использование команды #asm("sleep") в то место где функция idle(); просто заводит чип в полное зависание.
Конечно регистр сконфигурирован для idle перед командой sleep
Ответить

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