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

Обсуждаем контроллеры компании Atmel.
BEST-83154
Прорезались зубы
Сообщения: 218
Зарегистрирован: Ср дек 02, 2015 15:06:01

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

Сообщение BEST-83154 »

[/quote]
Была прекрасная программа Алгоритм Билдер.Делали ребята из Тулы.Графический ассемблер.Гораздо удобнее Код Вижена особенно в отладке - всегда понятно что происходит.И писалось по времени немного более чем Си...Но...к сожалению умерла из-за проблем с маркетингом....А жаль...[/quote]

даже не слышал о таком (
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

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

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

Сообщение andr_lar »

К сожалению Вы правы.Сайт есть но...обновлений давно нет...Было пару раз упоминание в форумах что команда Громова собирается его реанимировать но...Может они чем другим занялись...

Добавлено after 4 hours 15 minutes 9 seconds:
Собрал по новому проект с несколькими файлами и он даже откомпелировался и в протеусе работает.Один вопрос - в файлах 111.с и 222.с я вставил #define outsw PORTA.2. Насколько правильно в двух файлах определять одну переменную или возможно есть более правильное решение...Файл с новым проектом прилагаю
Вложения
111_1.RAR
(30.4 КБ) 211 скачиваний
С уважением...
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

#define, используемый в разных файлах, лучше прописать в .h файле, который #include-ить в обоих
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

Думаю что вообще надо сделать один заголовочный файл в котором прописать все #define ...
Ещё 2 вопроса...
1.Возможно-ли прописать заголовочный файл поместив в него все глобальные переменные и подключать их в каждом *.c файле через
#include ? Ну чтоб голову не заморачивать где чего подключил.Записал во всех-и пусть компилятор разбирается что ему нужно...
Иль без extern никак ?
2.Можно-ли не писать *.c файлы а все функции разместить только в *.h файлах ?
С уважением...
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

1. Можно. Но без extern никак.
2. Нельзя.
andr_lar писал(а): Ну чтоб голову не заморачивать где чего подключил
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

ARV писал(а):так, не? я бы так делал

Спасибо, но никак не хватает времени сесть и разобраться с Вашим кодом. Работы навалилось...
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

andr_lar писал(а): Ну чтоб голову не заморачивать где чего подключил
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.[/quote]

Прежде всего благодарю за ответы...Будем осваивать далее...
Позвольте так-же с Вами не согласится...
Во-первых мне уже "крутость" в программировании как-то и неинтересна...Мне уж ближе к 60-и и по работе я руковожу парой таких - же "старпёров" - ремонтников-электронщиков так что для нас микроконтроллеры это более хобби чем необходимость.А не согласится я хотел с тем что считаю что и процесс программирования так-же как и любая профессия идёт к процессу упрощения...Пример тому - увеличение визуальных программ,которые очень отличаются от "классического" строчного программирования.Да,они пока менее совершенны чем "написательные" языки но это процесс времени и не более.Возьмите тот-же Ардуино...При всех недостатках он удобен.Тем более что уже появляются его графические варианты типа FLProg...(кстати российский)...И если-б не большой недостаток в отсутствии средств отладки то он очень даже хорош...Ну конечно не в специфических областях,но специфика это всегда узкий сегмент деятельности...
Поэтому я и от CodeVision хотел-бы упрощения в процессе программирования...Ну или хотя-бы понятного описания и примеров(возможно с картинками) где подробно и обстоятельно были-б обьяснены ньюансы....

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

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

Сообщение ARV »

Продолжая ваши философские речи неизбежно приходим к пределу упрощения "пусть делают другие". Это предельно просто: не парить свою голову, пускай другие парятся.
Но ежели вы хотите сами делать - придется пройти тернистый путь от линии "старт", которой является учебник языка Си.
Скачиваете Кернигана и Ричи, читаете, и примерно на 25-й странице начинаете смеяться над своими воросами про файлы и инклюды.
Не начнете с этого - так и будете страдать от сложностей.

P.S. про 25-ю страницу я преувеличил. Извините за философию.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение andr_lar »

Мною перед заданием вопроса были просмотрены : хельп CodeVision,Лебедев (CodeVisionAVR. Пособие для начинающих .)с.250,Лебедев с.471,в интернете по сему вопросу было найдено http://kazus.ru/forums/showthread.php?t=29862
где была попытка сей вопрос прояснить...Вопрос остался для меня не совсем понятным поэтому и был задан в форум в надежде на консультацию специалистов.В форуме мне полностью вопрос был так-же не раскрыт но была попытка некоторых участников прояснить некоторые ньюансы...За что я им благодарен.К сожалению от Вас я подобной помощи не получил.Ваши ответы были просто пустыми строками написаными неизвестно зачем.Поэтому это не вопрос философии...Философствование приемлемо от людей имеющих реальные результаты(в данном случае оказавших помощь) а не стремившихся продемонстрировать своё возвышенное эго...Ваши ответы это не философия а элементарное звездобольство...,звиняюсь за точность определения... :o
С уважением...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Ознакомьтесь с форумом в темах, касающихся "вопросов по Си", WinAVR, AvrStudio и других. Надеюсь, вы сможете найти много полезного и/или интересного. Возможно среди найденного будет и кое-что из сказанного мною. Ну а не найдете - так тому и быть, соглашусь с последним вашим "точным" определением.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Tenken
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт янв 17, 2013 21:25:30
Откуда: Тула

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

Сообщение Tenken »

Подскажите пожайлуста на счет модуля TM1637 С LED дисплеем. Хочу понять как он управляется. Нашел на него даташит на некоторые вещи непонятны по английски. Есть даже пример функций на Си (в конце то что нужно). ВРодепонятно как проходит инициализация( установка яркости и тд). Но в основном цикле какието buttons .Кнопки, что за кнопки? откуда они? У меня на модуле нету кнопок :)) функция Scankey (сканирование ключей ) мне непонятно как перевести и что за ключи( но во всех диаграммах для программ они используются. ? что это такое?
Вложения
DOC001110878.pdf
(712.75 КБ) 209 скачиваний
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

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

Сообщение a.garkin »

Господа подскажите что не так.

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


unsigned char v;
interrupt [PC_INT0] void pin_change_isr(void)
{
v++;
if(v==3)v=0;
delay_ms (50);
}
#define button PINB.3 //Переменная где сидит кнопка
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
DDRB=(0<<DDB5) | (1<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=P Bit2=T Bit1=T Bit0=1
PORTB=(0<<PORTB5) | (0<<PORTB4) | (1<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: On
GIMSK=(0<<INT0) | (1<<PCIE);
MCUCR=(0<<ISC01) | (0<<ISC00);
PCMSK=(0<<PCINT5) | (0<<PCINT4) | (1<<PCINT3) | (0<<PCINT2) | (0<<PCINT1) | (0<<PCINT0);
GIFR=(0<<INTF0) | (1<<PCIF);

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB=(0<<ACME);
DIDR0=(0<<AIN0D) | (0<<AIN1D);
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
#asm("sei")
while (1)   
{
if(v==0)
OCR0A=0x19;
{
delay_ms (10);   
}
if(v==1){
        button=0;
        OCR0A=0x3F;
        {
        delay_ms (10);
        }
        };
       
while (v==2){
       button=0;
       OCR0A=0xFF;
       {
       delay_ms (10);
       }
       };
       
};
}


По сути что должно быть на выходе 3 режима (OCR0A=0x19 -> OCR0A=0x3F -> OCR0A=0xFF) . Подается питание на выходе OCR0A=0x19 с этим все ОК. Нажимаем кнопку увеличивает выход до OCR0A=0x3F и тут же OCR0A=0xFF. Еще раз нажимаем получаем OCR0A=0x19. Еще раз нажимаем идет v==0 и т.д по кругу. А по факту OCR0A=0x19 -> (OCR0A=0x3F + OCR0A=0xFF) -> OCR0A=0x3F
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

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

Сообщение AndTer »

Зачем это:
button=0;
и это:
delay_ms (10);
и это:
while(v==2)

И где подавление дребезга?

Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний.
Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.

И да, господа в африке.
Глупый не задает вопросы. Глупый и так все знает.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

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

Сообщение a.garkin »

AndTer писал(а):Зачем это:
button=0;
и это:
delay_ms (10);
и это:
while(v==2)

И где подавление дребезга?

Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний.
Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.

И да, господа в африке.


Ну наверное button=0 потому #define button PINB.3 //Переменная где сидит кнопка

v - программа v==2 вторая программа.

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

unsigned char v;
interrupt [PC_INT0] void pin_change_isr(void)
{
v++;
if(v==3)v=0;
delay_ms (50);
}
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

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

Сообщение AndTer »

Не тупим! Вы спросили почему не работает? Я задаю наводящие вопросы)
Хорошо, другими словами:
- Зачем входному регистру присваивать 0?
- Зачем используются задержки?
- Зачем делать цикл для значения v=2, когда для других его нет?

И где устранение дребезга?

И да, за цитирование полное тут банят)

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

В вашей программе столько ошибок, что проще написать заново) Причём писать то тут 2 минуты от силы.
Глупый не задает вопросы. Глупый и так все знает.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Объявлено прерывание interrupt [PC_INT0] но включается GIMSK=(1<<PCIE); Вы правда рассчитываете что это сработает?
Задержка в прерывании - зло
Переменная v, используемая в прерывании и основном коде, не объявлена как volatile (впрочем, прерывание все равно запрещено так что это неважно).
ФоРмАтИрОвАнИе УжАсНо
В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
Настройка сдвигами гораздо нагляднее чем магическими числами. А комментарии запросто могут не соответствовать коду.
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

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

Сообщение AndTer »

COKPOWEHEU писал(а):Вы правда рассчитываете что это сработает?

Сработает! Название темы посмотрите, у него объявлено правильно.

COKPOWEHEU писал(а):не объявлена как volatile

Компилятор видит что переменная используется в левых выражениях, а значит не должен ничего переоптимизировать.
Конечно надёжней использовать volatile но тут оно роли не сыграет.

COKPOWEHEU писал(а):Настройка сдвигами гораздо нагляднее чем магическими числами. А комментарии запросто могут не соответствовать коду.

Если не знать все регистры наизусть то толку от такого объявления? Всё равно надо будет смотреть что за регистр и что за бит.
Всё же периферия настраивается чаще один раз, а значит комментарии соответствуют. Если надо что то поменять, не надо создавать новый файл, визард имеет превью из которого можно скопировать перенастроенные куски в уже имеющийся код. Это уже к вопросу откуда растут руки.

Можно и вовсе обойтись без прерываний:

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

#include <tiny13.h>

void main(void)
{

unsigned char v=0;
unsigned char c=0;

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State5=T State4=T State3=P State2=T State1=T State0=0
PORTB=0x08;
DDRB=0x01;

// Timer/Counter 0 initialization
// Timer/Counter 0 initialization
TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x19;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

while (1)
      {

     if(!PINB.3 && !c)         // Если кнопка нажата и до этого мы на текущее нажатие не отреагировали
         {
           delay_ms(10);     // Задержка против дребезга и ложных срабатываний, можно/нужно подобрать
           if(!PINB.3)           // Если кнопка осталась нажата, значит она уж точно нажата
             {
               c=1;               // ставим с=1 чтобы не заходить сюда до следующего нажатия кнопки
               v=v+1;
               if(v==3){v=0;};
               if(v==0){OCR0A=0x19;};
               if(v==1){OCR0A=0x3F;};
               if(v==2){OCR0A=0xFF;};   
             }; 
          };
     if(PINB.3){c=0;};      // если кнопку отпустили можем ждать следующее нажатие
   
      };
}


Кучку условий можно заменить на case что ускорит обработку, но нафиг оно надо? Если написано за 2 минуты и светодиод меняет яркость.

Вообще не люблю использовать delay и для опроса сколько угодно кнопок вовсе применяю свободный таймер. Но тут непонятно что нужно вопрошающему, если тупо как есть то это самый простой вариант. Само собой решений данной задачи множество, на прерываниях красивее конечно)
Глупый не задает вопросы. Глупый и так все знает.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

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

Сообщение a.garkin »

Всем СПАСИБО кто откликнулся отдельное спасибо за решение AndTer без прерывания.

Видимо у тиньки есть баг, помнит состояние регистра поэтому хаотичное переключение программ. Если на инициализации делать OCR0A=0x00; то if(v==0){OCR0A=0x00;}; надо таким же делать. В этом случае все четко происходит.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

a.garkin писал(а):Видимо у тиньки есть баг
напишите в Atmel (или теперь уже Микрочип?) :)))

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

Мой уютный бложик... заходите!
Ответить

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