CodeVision AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а вам на самом деле важно, чтобы контроллер не простаивал? 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
ARV писал(а):а вам на самом деле важно, чтобы контроллер не простаивал?
В принципе передача и без прерывания работает.Но если есть - чего не использовать....
С уважением...
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: CodeVision AVR в вопросах и ответах
На самом деле при передаче быстрее работать без прерываний, т.к. прерывание подразумевает вход и выход из обработчика и это на каждый байт передачи, плюс другие прерывания в это время обработаться не могут. Лучше в основном цикле проверять флаг готовности буфера передачи, и если готов, передать очередной байт и дальше идти по программе, если еще не готов передавать, тогда просто пропускать и идти дальше по программе.
Re: CodeVision AVR в вопросах и ответах
Создал структуру тип 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 и не указатель то все ок. Но мне то нужен указатель.
все нашел решение
Чтобы с помощью указателя на структуру получить доступ к ее членам, необходимо использовать оператор стрелка ->.
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 в вопросах и ответах
amd9800 писал(а):Чтобы с помощью указателя на структуру получить доступ к ее членам, необходимо использовать оператор стрелка ->.
Да, если a - указатель на структуру, то доступ к её элементам либо через a->item; либо через (*a).item.
Первый вариант - это лишь синтаксический сахар для более общего второго, наподобие как в массивах a[i] равносильно *(a + i), что даёт более читабельный для человека код.
Re: CodeVision AVR в вопросах и ответах
Не могу понять
for (char i=0;i<5;i++) { };
error: undefined simbol char
получается мне i надо объявить в начале программы.
Хотя по стандарту С могу переменную объявить в цикле for. И будет жить переменная ровно сколько цикл for.
for (char i=0;i<5;i++) { };
error: undefined simbol char
получается мне i надо объявить в начале программы.
Хотя по стандарту С могу переменную объявить в цикле for. И будет жить переменная ровно сколько цикл for.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Одновременно объявлять и использовать переменные внутри циклов можно только в C++, если не ошибаюсь, но не в C.
P.S. У меня подобное приводит к:
Так что в C, получается, тоже можно, но только в при использовании стандарта 99 года и более поздних.
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 года и более поздних.
Re: CodeVision AVR в вопросах и ответах
теперь понятно. Спасибо!
Re: CodeVision AVR в вопросах и ответах
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);....
С уважением...
Re: CodeVision AVR в вопросах и ответах
Доброго всем дня
Где посмотреть как пошагово с описанием настроить ацп Atiny13 в CAVR,видео или описание,или дайте кусок кода.
пожалуйста не пишите только читай даташит,нихрена я там не пойму
только начал изучать...
Где посмотреть как пошагово с описанием настроить ацп Atiny13 в CAVR,видео или описание,или дайте кусок кода.
пожалуйста не пишите только читай даташит,нихрена я там не пойму
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Значит надо читать до такой степени, пока не поймёте. Ибо это должна быть настольная книга, к которой нужно постоянно обращаться за помощью.нихрена я там не пойму
Без понимания литературы не стоит садиться за программирование, т.к. метод тыка тут не прокатывает.
Re: CodeVision AVR в вопросах и ответах
Ну вот опять,нужно не нужно.
Просьбу я изложил,а модератор опять - книги,читать ,библия програмиста даташит.
теперь изза пустого смысла моего и предыдущего поста их нужно сносить.
Хотите помочь помогите,форум ведь- вопросы и ответы а не посылание в библиотеку
Просьбу я изложил,а модератор опять - книги,читать ,библия програмиста даташит.
теперь изза пустого смысла моего и предыдущего поста их нужно сносить.
Хотите помочь помогите,форум ведь- вопросы и ответы а не посылание в библиотеку
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Зачем сносить ? Всё нормально, вопрос - ответ.
Поймите, нельзя вот так вот говорить - я нифига не понимаю, по этому ничего не буду читать, просто дайте мне готовое.
Вы каждый раз будете на форум идти за просьбами дать готовые куски кода ?
Я конечно не уверен, но мне кажется интернет просто завален подобным хламом. Ваша задача - далеко не редкость. Пробовали искать чужие программы и из них вынуть нужные куски кода ?
Да даже если бы Вы были на каких-нибудь курсах, нормальный преподаватель в первую очередь научил бы пользоваться литературой, а не тупо давал бы куски кода для бездумного копипаста.
Поймите, нельзя вот так вот говорить - я нифига не понимаю, по этому ничего не буду читать, просто дайте мне готовое.
Вы каждый раз будете на форум идти за просьбами дать готовые куски кода ?
Я конечно не уверен, но мне кажется интернет просто завален подобным хламом. Ваша задача - далеко не редкость. Пробовали искать чужие программы и из них вынуть нужные куски кода ?
Вы считаете, что подобные ответы - не помощь ? Или Вы хотите видеть в ответах только то, что хотите видеть ? Тут уж извините, это форум, а не индивидуальные курсы обучения.Хотите помочь помогите
Да даже если бы Вы были на каких-нибудь курсах, нормальный преподаватель в первую очередь научил бы пользоваться литературой, а не тупо давал бы куски кода для бездумного копипаста.
Re: CodeVision AVR в вопросах и ответах
спасибо,я пошел
тут http://avr-start.ru/category/avr-учебный-курс/
кстати именно изза готовых примеров и обьяснений автора "индивидуально"у меня да и у многих сдвинулось с мертвого места...писал себе бакомер для газа и немог сделать усреднение в баке,автор помог куском кода,обьяснил.теперь использую этот принцип далее в своих"быдлокодах",так ведь вы профи их зовете
а тут форум целый и никто вам не будет обьяснять говорите:(
В общем кто ламер как и я заходите по ссылке выше.
тут http://avr-start.ru/category/avr-учебный-курс/
кстати именно изза готовых примеров и обьяснений автора "индивидуально"у меня да и у многих сдвинулось с мертвого места...писал себе бакомер для газа и немог сделать усреднение в баке,автор помог куском кода,обьяснил.теперь использую этот принцип далее в своих"быдлокодах",так ведь вы профи их зовете
а тут форум целый и никто вам не будет обьяснять говорите:(
В общем кто ламер как и я заходите по ссылке выше.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну вот, видите, можете же если захотите. Только нужно это было сделать с самого начала, а потом уже, столкнувшись с проблемами, идти на форум с конкретными вопросами.
Удачи в освоении !
Удачи в освоении !
Re: CodeVision AVR в вопросах и ответах
Вот уже второй день мучаюсь с режимами 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
Походу всему виной 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 в вопросах и ответах
Без исходного кода гадать можно долго, но судя по вашему описанию пропущен самый главный шаг - команда SLEEP.
Re: CodeVision AVR в вопросах и ответах
А разве команда #asm("sleep") это не установка бита SE в 1 в регистре MCUCR. ?
Как видно я тут использую функцию idle();
Но если я заменяю ее прямыми изменениями регистра MCUCR=MCUCR|0b10000000;
Счастья не видать
Код: Выделить всё
#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 в вопросах и ответах
если склероз меня не подводит, бит SE - это SLEEP ENABLE, т.е. разрешение сна. если после этого не будет команды SLEEP - будет бессонница.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Спасибо испытаю.
Использование команды #asm("sleep") в то место где функция idle(); просто заводит чип в полное зависание.
Конечно регистр сконфигурирован для idle перед командой sleep
Использование команды #asm("sleep") в то место где функция idle(); просто заводит чип в полное зависание.
Конечно регистр сконфигурирован для idle перед командой sleep