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

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

Сообщение CyxoeBuHo »

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

Сообщение romazan »

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

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

Сообщение ssvd »

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

Сообщение sheva_s »

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

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

MCUCR=0x03;
EIFR=0x40; 
а так выдает ошибку на индетификацию символов ISC00, ISC01, INTF0.

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

MCUCR=1<<ISC00|1<<ISC01;
EIFR=1<<INTF0;
что не так делаю хотел научиться настраивать регистры вторым способом что бы было видно что настроено, а невыходит подскажите как правильно делать .
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

sheva_s писал(а):...
что не так делаю хотел научиться настраивать регистры вторым способом что бы было видно что настроено, а невыходит подскажите как правильно делать .
Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл где номера битов определены, либо написать самому (первое проще и правильней).
Реклама
Открыл глаза
Сообщения: 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);
}
}
}
вопрос про случайный выбор цикла остается открытым...
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 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 КБ) 399 скачиваний
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Встал на лапы
Сообщения: 91
Зарегистрирован: Пт авг 28, 2009 16:08:48
Откуда: г.Вязьма Смоленская обл

Сообщение edds »

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

Сообщение ooogo »

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

Сообщение sheva_s »

smac писал(а): Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл .
А можно подробнее как это сделать .
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

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

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 и попробовать взять эти файлы оттуда.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 27
Зарегистрирован: Чт ноя 05, 2009 23:24:14
Откуда: мариупоь

Сообщение filin »

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

Сообщение clawham »

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

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

[color=red]Объёмные вещи оформляются в виде приложения. Сэр Мурр[/color]
Вот пожалуйста кусочек кода менюшки со вложенными подменюшками :)
Вложения
prog.c
полный текст ибо код неправильно вставляется на форум
(81.15 КБ) 494 скачивания
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Сообщение Aiudara »

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

Сообщение ARV »

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

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

Сообщение zatmenie »

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

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

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

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