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

Обсуждаем контроллеры компании Atmel.
CyxoeBuHo
Открыл глаза
Сообщения: 51
Зарегистрирован: Вс июн 14, 2009 00:19:53
Контактная информация:

Сообщение CyxoeBuHo »

не хочу перечитывать все 55 страниц, может уже где обсуждалось, но как сделать рэндомность?? чтоб случайным образом выбирало, какой цикл запустить!?
Аватара пользователя
romazan
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Чт май 21, 2009 13:54:07
Откуда: Москва
Контактная информация:

Сообщение romazan »

народ тут собрал программатор stk200/300 и при прошивке codevision выдал ошибку

схема:Изображение
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

есть вопросы по написанию codevision

Сообщение ssvd »

привет! несколько дней как начал изучать AVR и язык С, а все потому, что возникла необходимость устройство со следующими функциями:
На дисплей выводятся данные которые надо отредактировать
- Время работы в минутах
- Максимальная температура
- время реверса
Затем запустить основное устройство подав на ногу = 1.
В цикле проверять и отображать температуру, а также ждать флага окончания времени или нажатия кнопки "Стоп".
Появился следующий текст и следующие вопросы, подскажи пожалуйста!
1. Как выставить, что бы таймер переполнялся каждую минуту и запускал прерывание.
2. как лучше в этом тексте убрать дребезг.
Так же буду рад получить критику по алгоритму написания программы!
Спасибо!
Вложения
kopt.zip
вот новая версия ))
(108.05 КБ) 235 скачиваний
kopt.zip
(126.69 КБ) 236 скачиваний
Последний раз редактировалось ssvd Чт ноя 05, 2009 07:03:30, всего редактировалось 1 раз.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Подскажите почему так работает

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

MCUCR=0x03;
EIFR=0x40;

а так выдает ошибку на индетификацию символов ISC00, ISC01, INTF0.

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

MCUCR=1<<ISC00|1<<ISC01;
EIFR=1<<INTF0;


что не так делаю хотел научиться настраивать регистры вторым способом что бы было видно что настроено, а невыходит подскажите как правильно делать .
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

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

Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл где номера битов определены, либо написать самому (первое проще и правильней).
CyxoeBuHo
Открыл глаза
Сообщения: 51
Зарегистрирован: Вс июн 14, 2009 00:19:53
Контактная информация:

Сообщение CyxoeBuHo »

пытался написать код на мегу 16-ю...по коду 7-ми сигментник должен "бегать по кругу" 7 раз и потом высветить определеное число... но в протеусе проэкт не запескается.... подскажите, что не так здесь...

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

#include <mega16>
#include <delay>
#define PA_OUT DDRA = 0xFF
#define PB_IN DDRB = 0x00
#define PC_OUT DDRC = 0xFF
#define LED_ON PORTA.7=1
#define LED_OFF PORTA.7=0
#define SW_ON PINB.0==0
#define SW_OFF PINB.0==1

void initialization(void){
PA_OUT;
PB_IN;
PC_OUT;
}
void main(void){
unsigned char a;
initialization();
a=0;
while(SW_ON)
{
if (a<7)
{
a++;
LED_ON;
delay_ms(200);
LED_OFF;
delay_ms(800);
}
}
}

вопрос про случайный выбор цикла остается открытым...
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

И снова здравствуйте :)
И снова бинарная арифметика :)))
Уже подумываю на курсы какие записаться...ато чёт слишком часто торможу в этом вопросе....
в общем....переделываю функцию для LCD3310 вывод символа...
старая работает 100% правильно...
хочу увеличить символ в два раза по высоте(тоесть на две строки) ну а в ширину - хочу выбирать сколько надо раз одно и то же повторять...

тоесть вместо того чтоб в экран слать 8-ми битный столбик 6 раз (символ у меня 8 точек в высоту и 6 - в длину) я "растягиваю" 8 бит на 16 просто дублируя биты...и два раза вывожу...сначала первый рядок потом переход вниз на строку и снова второй байт....вооот....
получается лажа в пропадании одной строчки....не могу даже определить какой...толи нижнего бита верхней строки толи верхнего бита нижней строки....ну...в общем буквы слова и т.д. получаются с пропущенной полоской по середине...хотя вроде все биты заполнил...
+чтоб небыло сомнений - ещё я рисую экраны графикой из КОМпорта....так вот оттуда пропусков небывает...тоесть функция записи в экран точно работает....

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

void lcd_putcharDS(unsigned char character)
{
    int tablept;
    unsigned char count, W;
    //unsigned char tablept, count;
   
    //123 символ означает что рисовать следующий символ будем инверсно
    if(character==123)
        InvPrint=!InvPrint;
    else
    {
        lcd_gotoxy(LCD_x, LCD_y);
        if ((character<0x20>150)) {return;}
                     
        tablept = ((6*character) - 192);                   

        // первый проход по таблице
        for (count=6;count>0;count--)                           
        {
            //char_column = table[tablept];
            for(W=0;W<Width;W++)
            {
            writedata(   0b00000001&table[tablept] |
                        (0b00000001&table[tablept])<<1 |
                        (0b00000010&table[tablept])<<1 |
                        (0b00000010&table[tablept])<<2 |
                        (0b00000100&table[tablept])<<2 |
                        (0b00000100&table[tablept])<<3 |
                        (0b00001000&table[tablept])<<3 |
                        (0b00001000&table[tablept])<<4>0;count--)                           
        {
            //char_column = table[tablept];
            for(W=0;W<Width>>4 |
                        (0b00010000&table[tablept])>>3 |
                        (0b00100000&table[tablept])>>3 |
                        (0b00100000&table[tablept])>>2 |
                        (0b01000000&table[tablept])>>2 |
                        (0b01000000&table[tablept])>>1 |
                        (0b10000000&table[tablept])>>1 |
                        (0b10000000&table[tablept]));
            }
            tablept++;
        }
        LCD_x+=5*(1+Width);
        LCD_y-=1;
       
       
        //writedata(0x00);
    }                                       
}


БЛ....снова какой-то косяк с кодом....млин....прикрепляю файлик
Вложения
lcd_3110.c
(10.51 КБ) 398 скачиваний
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
edds
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Сообщение edds »

Доброго времени суток!!!! Необходимы примеры кода (для CVAVR, рабочие) меню (выбор и установка режимов, значений), если будет с коментариями, тада ваще супер. Если есть у кого поделитесь ???
Аватара пользователя
ooogo
Это не хвост, это антенна
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

CyxoeBuHo писал(а):пытался написать код на мегу 16-ю...по коду 7-ми сигментник должен "бегать по кругу" 7 раз и потом высветить определеное число... но в протеусе проэкт не запескается.... подскажите, что не так здесь...
Мож чего я пропустил, но мне кажется если опишешь по подробней, что куда подключаешь, общий катод анод, и что хочешь сделать, а лучше файлик протеуса прикрепишь, то шансов получить ответ, будет больше. :)
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

smac писал(а):Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл .

А можно подробнее как это сделать .
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: есть вопросы по написанию codevision

Сообщение Барсик »

ssvd писал(а):...буду рад получить критику по алгоритму написания программы!...
Тут даже не в кодевижене дело. То, что сразу бросается в глаза. 1) в обработчиках прерываний надо сидеть как можно меньше. Не сдедует в них использовать задержки (функцию delay). Не надо там же заниматься выводом на LCD индикатор. Там надо только устанавливать флаги, а прочие дела делать в теле основной программы. 2) бесконечные циклы с использованием оператора for и выход из них с помощью goto это, конечно круто. Но лучше обойтись без них. Для проверки какого-то условия обычно используются операторы while или do 3) Часть кода, где выполняется ввод/вывод лучше оформить в виде функций, чтобы не загромождать основную программу.

ssvd писал(а):1. Как выставить, что бы таймер переполнялся каждую минуту и запускал прерывание...
А зачем это вообще делать через прерывание? Лучше в основной программе отмерять промежуток времени, и когда он закончится, выполнять нужные действия

ssvd писал(а):2. как лучше в этом тексте убрать дребезг...
Лучше написать отдельный кусок кода, который бы опрашивал кнопки и устранял дребезг. И оформить его в виде функции.

Я бы на Вашем месте сделал бы из таймера часы реального времени. Использовал бы режим CTC так, чтобы прерывания происходили через определённый промежуток времени. Скажем, через 1 миллисекунду. А потом уже можно с помошью счётчиков получать любые интервалы времени.

У Вас вообще, какая тактовая частота микроконтроллера? Используете кварц или встроенный генератор?
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

sheva_s писал(а):А можно подробнее как это сделать.

У Вас какая версия CodeVisionAVR ? В старых версиях нет определения названий битов управляющих регистров. А в новых есть файлы что-то вроде xxxx-bit.h Где xxxx - название микроконтроллера. Вот такой файл и надо прицепить к своему проекту. Можно скачать свежую демо версию CodeVisionAVR и попробовать взять эти файлы оттуда.
Аватара пользователя
filin
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт ноя 05, 2009 23:24:14
Откуда: мариупоь

Сообщение filin »

!gg
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

edds писал(а):Доброго времени суток!!!! Необходимы примеры кода (для CVAVR, рабочие) меню (выбор и установка режимов, значений), если будет с коментариями, тада ваще супер. Если есть у кого поделитесь ???


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

[color=red]Объёмные вещи оформляются в виде приложения. Сэр Мурр[/color]


Вот пожалуйста кусочек кода менюшки со вложенными подменюшками :)
Вложения
prog.c
полный текст ибо код неправильно вставляется на форум
(81.15 КБ) 493 скачивания
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
boobonick
Встал на лапы
Сообщения: 123
Зарегистрирован: Сб ноя 18, 2006 17:14:15

Сообщение boobonick »

Здравствуйте! Не могу понять, почему когда у меня должно получится число -2 , но в итоге HD44780 показывает 65534. Сделал вот так 65536 - 65534, но опять же,получается,что знак sprintf-ом дорисовывать надо.
Непонятки, почему я отрицательное число не могу вывеcти?

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

char temp_str[33];

void main(void)
{

int temp;
w1_init();
lcd_init(16);

while (1)
      {

temp=ds18b20_temperature(0);
if (temp>1000){
temp=65536-temp;

}


sprintf(temp_str,"t=%i.%u\xdfC",temp,temp%1);
lcd_clear();
lcd_puts(temp_str);   
delay_ms(500);
      };
}

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

Сообщение ARV »

clawham писал(а):Вот пожалуйста кусочек кода менюшки со вложенными подменюшками :)
а вот видео (~5M), как работает мой вариант "менюшки" :) http://www.youtube.com/watch?v=iyB-3PgysWo
исходники доступны :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Aiudara
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Пт июл 31, 2009 21:52:18

Сообщение Aiudara »

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

Сообщение ARV »

Aiudara писал(а):Ссылочку на исходнички ! :lol: Работает прикольно. И проект в PROTEUS хочется поиграться.
под кнопкой WWW есть ссылка на новость про TUI - а там есть и ссылка на закачку исходников и прочего.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
zatmenie
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пн ноя 23, 2009 16:40:26

Сообщение zatmenie »

Всем привет. хотел спросить можно ли с помощью CVAVR зашить МК через COM-программатор?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

zatmenie писал(а):Всем привет. хотел спросить можно ли с помощью CVAVR зашить МК через COM-программатор?

Ну так можно или нет? И если можно, то схемку включения бы :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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