CodeVision AVR в вопросах и ответах
-
BEST-83154
- Прорезались зубы
- Сообщения: 218
- Зарегистрирован: Ср дек 02, 2015 15:06:01
Re: CodeVision AVR в вопросах и ответах
[/quote]
Была прекрасная программа Алгоритм Билдер.Делали ребята из Тулы.Графический ассемблер.Гораздо удобнее Код Вижена особенно в отладке - всегда понятно что происходит.И писалось по времени немного более чем Си...Но...к сожалению умерла из-за проблем с маркетингом....А жаль...[/quote]
даже не слышал о таком (
Была прекрасная программа Алгоритм Билдер.Делали ребята из Тулы.Графический ассемблер.Гораздо удобнее Код Вижена особенно в отладке - всегда понятно что происходит.И писалось по времени немного более чем Си...Но...к сожалению умерла из-за проблем с маркетингом....А жаль...[/quote]
даже не слышал о таком (
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
Сайт Алгоритм Билдер живой, 7-й год как не обновлялась, может смысла уже обновлять и нету.
Re: CodeVision AVR в вопросах и ответах
К сожалению Вы правы.Сайт есть но...обновлений давно нет...Было пару раз упоминание в форумах что команда Громова собирается его реанимировать но...Может они чем другим занялись...
Добавлено after 4 hours 15 minutes 9 seconds:
Собрал по новому проект с несколькими файлами и он даже откомпелировался и в протеусе работает.Один вопрос - в файлах 111.с и 222.с я вставил #define outsw PORTA.2. Насколько правильно в двух файлах определять одну переменную или возможно есть более правильное решение...Файл с новым проектом прилагаю
Добавлено 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 в вопросах и ответах
#define, используемый в разных файлах, лучше прописать в .h файле, который #include-ить в обоих
Re: CodeVision AVR в вопросах и ответах
Думаю что вообще надо сделать один заголовочный файл в котором прописать все #define ...
Ещё 2 вопроса...
1.Возможно-ли прописать заголовочный файл поместив в него все глобальные переменные и подключать их в каждом *.c файле через
#include ? Ну чтоб голову не заморачивать где чего подключил.Записал во всех-и пусть компилятор разбирается что ему нужно...
Иль без extern никак ?
2.Можно-ли не писать *.c файлы а все функции разместить только в *.h файлах ?
Ещё 2 вопроса...
1.Возможно-ли прописать заголовочный файл поместив в него все глобальные переменные и подключать их в каждом *.c файле через
#include ? Ну чтоб голову не заморачивать где чего подключил.Записал во всех-и пусть компилятор разбирается что ему нужно...
Иль без extern никак ?
2.Можно-ли не писать *.c файлы а все функции разместить только в *.h файлах ?
С уважением...
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
1. Можно. Но без extern никак.
2. Нельзя.
2. Нельзя.
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.andr_lar писал(а): Ну чтоб голову не заморачивать где чего подключил
Re: CodeVision AVR в вопросах и ответах
ARV писал(а):так, не? я бы так делал
Спасибо, но никак не хватает времени сесть и разобраться с Вашим кодом. Работы навалилось...
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: CodeVision AVR в вопросах и ответах
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.[/quote]andr_lar писал(а): Ну чтоб голову не заморачивать где чего подключил
Прежде всего благодарю за ответы...Будем осваивать далее...
Позвольте так-же с Вами не согласится...
Во-первых мне уже "крутость" в программировании как-то и неинтересна...Мне уж ближе к 60-и и по работе я руковожу парой таких - же "старпёров" - ремонтников-электронщиков так что для нас микроконтроллеры это более хобби чем необходимость.А не согласится я хотел с тем что считаю что и процесс программирования так-же как и любая профессия идёт к процессу упрощения...Пример тому - увеличение визуальных программ,которые очень отличаются от "классического" строчного программирования.Да,они пока менее совершенны чем "написательные" языки но это процесс времени и не более.Возьмите тот-же Ардуино...При всех недостатках он удобен.Тем более что уже появляются его графические варианты типа FLProg...(кстати российский)...И если-б не большой недостаток в отсутствии средств отладки то он очень даже хорош...Ну конечно не в специфических областях,но специфика это всегда узкий сегмент деятельности...
Поэтому я и от CodeVision хотел-бы упрощения в процессе программирования...Ну или хотя-бы понятного описания и примеров(возможно с картинками) где подробно и обстоятельно были-б обьяснены ньюансы....
P.S. Звиняюсь если отвлёк Ваше время излишней философией...
С уважением...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Продолжая ваши философские речи неизбежно приходим к пределу упрощения "пусть делают другие". Это предельно просто: не парить свою голову, пускай другие парятся.
Но ежели вы хотите сами делать - придется пройти тернистый путь от линии "старт", которой является учебник языка Си.
Скачиваете Кернигана и Ричи, читаете, и примерно на 25-й странице начинаете смеяться над своими воросами про файлы и инклюды.
Не начнете с этого - так и будете страдать от сложностей.
P.S. про 25-ю страницу я преувеличил. Извините за философию.
Но ежели вы хотите сами делать - придется пройти тернистый путь от линии "старт", которой является учебник языка Си.
Скачиваете Кернигана и Ричи, читаете, и примерно на 25-й странице начинаете смеяться над своими воросами про файлы и инклюды.
Не начнете с этого - так и будете страдать от сложностей.
P.S. про 25-ю страницу я преувеличил. Извините за философию.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Мною перед заданием вопроса были просмотрены : хельп CodeVision,Лебедев (CodeVisionAVR. Пособие для начинающих .)с.250,Лебедев с.471,в интернете по сему вопросу было найдено http://kazus.ru/forums/showthread.php?t=29862
где была попытка сей вопрос прояснить...Вопрос остался для меня не совсем понятным поэтому и был задан в форум в надежде на консультацию специалистов.В форуме мне полностью вопрос был так-же не раскрыт но была попытка некоторых участников прояснить некоторые ньюансы...За что я им благодарен.К сожалению от Вас я подобной помощи не получил.Ваши ответы были просто пустыми строками написаными неизвестно зачем.Поэтому это не вопрос философии...Философствование приемлемо от людей имеющих реальные результаты(в данном случае оказавших помощь) а не стремившихся продемонстрировать своё возвышенное эго...Ваши ответы это не философия а элементарное звездобольство...,звиняюсь за точность определения...
где была попытка сей вопрос прояснить...Вопрос остался для меня не совсем понятным поэтому и был задан в форум в надежде на консультацию специалистов.В форуме мне полностью вопрос был так-же не раскрыт но была попытка некоторых участников прояснить некоторые ньюансы...За что я им благодарен.К сожалению от Вас я подобной помощи не получил.Ваши ответы были просто пустыми строками написаными неизвестно зачем.Поэтому это не вопрос философии...Философствование приемлемо от людей имеющих реальные результаты(в данном случае оказавших помощь) а не стремившихся продемонстрировать своё возвышенное эго...Ваши ответы это не философия а элементарное звездобольство...,звиняюсь за точность определения...
С уважением...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ознакомьтесь с форумом в темах, касающихся "вопросов по Си", WinAVR, AvrStudio и других. Надеюсь, вы сможете найти много полезного и/или интересного. Возможно среди найденного будет и кое-что из сказанного мною. Ну а не найдете - так тому и быть, соглашусь с последним вашим "точным" определением.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Подскажите пожайлуста на счет модуля TM1637 С LED дисплеем. Хочу понять как он управляется. Нашел на него даташит на некоторые вещи непонятны по английски. Есть даже пример функций на Си (в конце то что нужно). ВРодепонятно как проходит инициализация( установка яркости и тд). Но в основном цикле какието buttons .Кнопки, что за кнопки? откуда они? У меня на модуле нету кнопок
функция Scankey (сканирование ключей ) мне непонятно как перевести и что за ключи( но во всех диаграммах для программ они используются. ? что это такое?
- Вложения
-
- DOC001110878.pdf
- (712.75 КБ) 209 скачиваний
-
a.garkin
- Нашел транзистор. Понюхал.
- Сообщения: 175
- Зарегистрирован: Вт сен 29, 2009 09:28:51
- Откуда: Ульяновск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Господа подскажите что не так.
По сути что должно быть на выходе 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
Код: Выделить всё
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
Re: CodeVision AVR в вопросах и ответах
Зачем это:
button=0;
и это:
delay_ms (10);
и это:
while(v==2)
И где подавление дребезга?
Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний.
Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.
И да, господа в африке.
button=0;
и это:
delay_ms (10);
и это:
while(v==2)
И где подавление дребезга?
Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний.
Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.
И да, господа в африке.
Глупый не задает вопросы. Глупый и так все знает.
-
a.garkin
- Нашел транзистор. Понюхал.
- Сообщения: 175
- Зарегистрирован: Вт сен 29, 2009 09:28:51
- Откуда: Ульяновск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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);
}
Re: CodeVision AVR в вопросах и ответах
Не тупим! Вы спросили почему не работает? Я задаю наводящие вопросы)
Хорошо, другими словами:
- Зачем входному регистру присваивать 0?
- Зачем используются задержки?
- Зачем делать цикл для значения v=2, когда для других его нет?
И где устранение дребезга?
И да, за цитирование полное тут банят)
В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
В вашей программе столько ошибок, что проще написать заново) Причём писать то тут 2 минуты от силы.
Хорошо, другими словами:
- Зачем входному регистру присваивать 0?
- Зачем используются задержки?
- Зачем делать цикл для значения v=2, когда для других его нет?
И где устранение дребезга?
И да, за цитирование полное тут банят)
В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
В вашей программе столько ошибок, что проще написать заново) Причём писать то тут 2 минуты от силы.
Глупый не задает вопросы. Глупый и так все знает.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: CodeVision AVR в вопросах и ответах
Объявлено прерывание interrupt [PC_INT0] но включается GIMSK=(1<<PCIE); Вы правда рассчитываете что это сработает?
Задержка в прерывании - зло
Переменная v, используемая в прерывании и основном коде, не объявлена как volatile (впрочем, прерывание все равно запрещено так что это неважно).
ФоРмАтИрОвАнИе УжАсНо
Задержка в прерывании - зло
Переменная v, используемая в прерывании и основном коде, не объявлена как volatile (впрочем, прерывание все равно запрещено так что это неважно).
ФоРмАтИрОвАнИе УжАсНо
Настройка сдвигами гораздо нагляднее чем магическими числами. А комментарии запросто могут не соответствовать коду.В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
Re: CodeVision AVR в вопросах и ответах
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 в вопросах и ответах
Всем СПАСИБО кто откликнулся отдельное спасибо за решение AndTer без прерывания.
Видимо у тиньки есть баг, помнит состояние регистра поэтому хаотичное переключение программ. Если на инициализации делать OCR0A=0x00; то if(v==0){OCR0A=0x00;}; надо таким же делать. В этом случае все четко происходит.
Видимо у тиньки есть баг, помнит состояние регистра поэтому хаотичное переключение программ. Если на инициализации делать OCR0A=0x00; то if(v==0){OCR0A=0x00;}; надо таким же делать. В этом случае все четко происходит.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
напишите в Atmel (или теперь уже Микрочип?)a.garkin писал(а):Видимо у тиньки есть баг
чтобы находить баги в микроконтроллерах, надо прежде научиться отлавливать их в собственном коде.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!