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

Обсуждаем контроллеры компании Atmel.
rlc
Открыл глаза
Сообщения: 67
Зарегистрирован: Сб мар 10, 2007 12:50:43

Сообщение rlc »

и почему то вместо #include <mega8535> стало #include <mega8535> :)
rlc
Открыл глаза
Сообщения: 67
Зарегистрирован: Сб мар 10, 2007 12:50:43

Сообщение rlc »

да что это такое???
пробую так
было:
#include <mega8535.h>
стало
#include <mega8535>

отключил смайлы, html, bbcode - текст перестал пропадать...хм

аватар, без extern тоже не работает....
Misha.91-joy
Родился
Сообщения: 4
Зарегистрирован: Вт янв 05, 2010 18:39:21

Сообщение Misha.91-joy »

Народ помагите! =)) Делаю курсавик и там надо прошить через програматор BM9010 - USB ( вот он- http://www.masterkit.ru/main/set.php?code_id=276487 ) микроконтроллер ATmega8.Есть программа записанная в Си. Вот она:

enum {
LMax=140, //Left
L1=115,
L2=80,
L3=40,
RMax=140, //Right
R1=115,
R2=80,
R3=40,
};

как её с помощью CodeVisionAVR забить в микроконтроллер?? ( ктото мне сказал что надо сначало в HEX код перевести а потом както забить). До этого я в CodeVisionAVR никогда не работал. Помогите, please!!! :shock:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

minime писал(а):Маловата програмка для Си даже.
это вообще не программка :) это перечисление безымянное объявляется...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Misha.91-joy
Родился
Сообщения: 4
Зарегистрирован: Вт янв 05, 2010 18:39:21

Сообщение Misha.91-joy »

Кхм...можт конечн я чегото не понимаю...но челове к создавший этого робота пишит что прога написана в Си...Вот сайт http://datagor.ru/blogs/guntis/460-robo ... ga-8..html
Misha.91-joy
Родился
Сообщения: 4
Зарегистрирован: Вт янв 05, 2010 18:39:21

Сообщение Misha.91-joy »

Конечно сдам!! Я уже почти всё сделал!! Осталось самое сложное мк прошить!! И поскольку никогда такими вещами не занимался спрашиваю у вас совета)) Дак как вы думаете что это если не прога в Си??

enum {
LMax=140, //Left
L1=115,
L2=80,
L3=40,
RMax=140, //Right
R1=115,
R2=80,
R3=40,
};
Misha.91-joy
Родился
Сообщения: 4
Зарегистрирован: Вт янв 05, 2010 18:39:21

Сообщение Misha.91-joy »

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

Сообщение ARV »

Misha.91-joy писал(а):Дак как вы думаете что это если не прога в Си??
я выше вам ответил, что это такое. или читайте ответы, или не обижайтесь, что перестанут отвечать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

Сообщение Гуня »

Научите меня, пожалуйста работать с отдельными битами переменной. Мне нужно считать бит с ножки, и записать его в нулевой бит переменной, потом сдвинуть переменную влево, и снова повторить тоже (в цикле!)
Так инициализирую переменную
Код
register unsigned char bufer;

А на эту строку матерится кодевижн
Код
bufer.0=PIND.0;

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

Сообщение ARV »

не знаю, как там CVAVR ваш любимый делаеть должен, но все обычные сишники делают так:

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

unsigned char i, bufer = 0;
for(i=0; i<8; i++){
   bufer <<= 1;
   if (PIND.0) // хотя более универсально так (PIND & (1<<PD0))
      bufer |= 1;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

Сообщение Гуня »

Спасибо! глянул к вам на сайт и нашол ответы на мои вопросы)
Аватара пользователя
MegaRazoR
Прорезались зубы
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
MegaRazoR
Прорезались зубы
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Порт B 2 3 4 5 настоены как входы. Кнопки их на питание при нажатии замыкают. Читаю значение командой if(PINB.2==1) ...
Когда кнопка размыкается на соотв. бите все равно остается единица.
Как ее сбросить ?

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

Сообщение ARV »

ну, во-первых, рекомендую замыкать кнопки на общий, а на пины подавать подтяжку встроенную. у вас сейчас выходит так, что от кнопки порт заряжается (не забыли, что вход МК это по сути затвор полевика?), а при отпускании кнопки разряжаться ему некуда... вот единичка там и висит. а когда будете замыкать на 0 - затвор разрядится, а при отпускании будет заряжаться от подтяжки - и все будет пучком.

опрос кнопок для практических конструкций логичнее сделать по типу компьютерного, т.е. сделать функцию, которая возвращает код нажатой кнопки. примерно так:

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

#define KEY1 1
#define KEY2 2
#define KEY3 3

unsigned char get_key(void){
   unsigned char tmp;
   tmp = ~PINB & ((1<<KEY1) | (1<<KEY2) | (1<<KEY3));
   delay_ms(15); // подавление дребезга
   if(tmp != (~PINB & ((1<<KEY1) | (1<<KEY2) | (1<<KEY3))))
      return 0; // был дребезг, считаем, что нет нажатых кнопок
   else
      return tmp; // иначе вернем код нажатых кнопок
}

в основной программе делаете примерно так:

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

switch(get_key()){
   case KEY1: // тут обрабатываете нажатие первой кнопки
                   break;
   case KEY2: // тут - второй
                   break;
   case KEY1 | KEY2 : // тут можно обработать одновременное нажатие двух кнопок
                   break;
   // и так далее
   default:
      // тут что-то если не нажата ни одна или запретная комбинация
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
MegaRazoR
Прорезались зубы
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

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

Сообщение ARV »

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

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

Сообщение ssvd »

скажите, программный шим правильно я делаю?

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

                PORTC=0x00;
                  ligth=1;
                  revers=0;
                  while(1){
                    if(ligth=255) revers=1;
                    if(ligth=0) break;
                    if(revers)=1 light--;
                    if(revers)=0 light++;
                    ~PORTC.0;
                    delay_ms(light);
                  }
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ssvd писал(а):скажите, программный шим правильно я делаю?

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

                PORTC=0x00;
                  ligth=1;
                  revers=0;
                  while(1){
                    if(ligth=255) revers=1;
                    if(ligth=0) break;
                    if(revers)=1 light--;
                    if(revers)=0 light++;
                    ~PORTC.0;
                    delay_ms(light);
                  }
похоже, что не правильно. не заметил вообще, что у вас хоть как-то меняется скважность сигнала. даже если допустить, что ~PORTC.0 действительно изменит уровень на порту - вы получите меандр и все. но на самом деле вы вообще нифига не получите :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение ssvd »

ARV писал(а):
ssvd писал(а):скажите, программный шим правильно я делаю?

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

                PORTC=0x00;
                  ligth=1;
                  revers=0;
                  while(1){
                    if(ligth=255) revers=1;
                    if(ligth=0) break;
                    if(revers)=1 light--;
                    if(revers)=0 light++;
                    ~PORTC.0;
                    delay_ms(light);
                  }
похоже, что не правильно. не заметил вообще, что у вас хоть как-то меняется скважность сигнала. даже если допустить, что ~PORTC.0 действительно изменит уровень на порту - вы получите меандр и все. но на самом деле вы вообще нифига не получите :)


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

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