roboforum.ru

Технический форум по робототехнике.

МикроКонтроллер AVR начинающим - общие вопросы

Re: МикроКонтроллер AVR начинающим - общие вопросы

greyder » 16 июн 2010, 22:22

boez спасибо большое, про программную реализацию протокола я как-то и забыл. К хорошему быстро привыкаешь. Скорость надежного прохождения информации по такой сети я и хотел посмотреть.

Re: МикроКонтроллер AVR начинающим - общие вопросы

ADonis » 18 июн 2010, 06:25

То ли лыжи не едут, то ли я не такой, НО:
Mega16, заводские фьюзы, внешнего кварца нет, ПортС, биты 5..2 не могу рулить! 7-6 и 1-0 дрыгаются нормально! Уже дошло до того, что отключил ВСЕ, подключены только ноги 10 (GND), 11(VCC) и 22-24 (биты 0-2 порта С соотв),
PortC=255;
все, больше кода нету.
Есть два МК, оба новые, на обоих такой косяк. Что это? :shock:
Может быть в заводском состоянии что-то отключено, что портС переводится в другое состояние?
Уже несколько дней пытаюсь понять, где косяк... Что я упустил?

Re: МикроКонтроллер AVR начинающим - общие вопросы

blindman » 18 июн 2010, 06:35

Классические грабли :) На этих ногах JTAG, который по умолчанию включен. Отключить фьюзами.

Re: МикроКонтроллер AVR начинающим - общие вопросы

ADonis » 18 июн 2010, 06:36

Млин! Спасибо ))

Re: МикроКонтроллер AVR начинающим - общие вопросы

avr123.nm.ru » 18 июн 2010, 07:38

JTAG можно выключить програмно - "Устройство микроконтроллеров AVR" http://proavr.narod.ru/02.htm - тогда в случае надобности по нему можно будет "достучаться" до AVR.

Re: МикроКонтроллер AVR начинающим - общие вопросы

executer » 22 июн 2010, 20:41

немного не по теме - вопрос по MS Visual C++
Проблема с преобразованием типов данных. Код
Код: Выделить всёРазвернуть
unsigned char UC=255;
int I=UC;
print I;

выдает "-128" - т.е. старший бит байта UC воспринимает как знак. крутил-вертел (int), (u_char) - никак не получается нормально преобразовать, хотя по логике преффикс (u_char) перед UC должен был бы помочь.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Angel71 » 22 июн 2010, 20:57

:oops: а дебаг что говорит? у меня I=255 показывает (студия 2010, проект - c++, win32 console)

Re: МикроКонтроллер AVR начинающим - общие вопросы

avr123.nm.ru » 22 июн 2010, 22:23

int это знаковая, вот 1 за "-" и принимает наверно.

Re: МикроКонтроллер AVR начинающим - общие вопросы

executer » 23 июн 2010, 09:53

Извиняюсь - запутался с типами. То что я написал - действительно работает. Проблема вот с этим:
Код: Выделить всёРазвернуть
char A;
char B;

А=100;
B=250;

int test = (u_int)A-(u_int)B;


test оказуется равным 106 (т.к. В содержит знаковый байт -6 = беззнаковый 250).

вот как так сделать чтоб test равнялся -150? (но без вызова функции с IF-ом)?

Re: МикроКонтроллер AVR начинающим - общие вопросы

galex1981 » 23 июн 2010, 09:56

Может быть чтобы test равнялся -150?

Re: МикроКонтроллер AVR начинающим - общие вопросы

executer » 23 июн 2010, 09:56

Хм, опять заработало. С такой строкой
int test = (u_char)A-(u_char)B;
Да, galex, после этого test = -150 :oops:
Вроде ж пробовал раньше. Вопрос снят. Всем спасибо!

Re: МикроКонтроллер AVR начинающим - общие вопросы

osc » 28 июн 2010, 20:56

Не выполняется прерывание по переполнению таймера 2 в меге 88, проверяю установкой в прерывании 1 на PD3.
Код инициализации взял из CodeWizard:
Код: Выделить всёРазвернуть
#include <mega88.h>

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
PORTD.3=1;
}

void main (void)
{
DDRD.3=1;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x06;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
#asm("sei");
while(1);
}

Подскажите, где ошибка?

Re: МикроКонтроллер AVR начинающим - общие вопросы

Michael_K » 28 июн 2010, 21:18

А TIMSK2 кто будет инициализировать?

Re: МикроКонтроллер AVR начинающим - общие вопросы

avr123.nm.ru » 28 июн 2010, 22:46

osc писал(а):Код инициализации взял из CodeWizard

Не все взяли.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Skyline » 01 июл 2010, 11:07

Надеюсь что с темой не ошибся и по-этому спрошу здесь. Помогите подправить прогу.В общем суть программки в том чтобы следить за состоянием каналов ИК-бампера. Сначала все время едем в перед и параллельно следим, если высокий логический уровень то продолжаем ехать вперед, если низкий то останавливаемся и отъезжаем назад, со вторым каналом тоже самое. Вопрос в том, что не пойму как сделать чтобы выполнялись оба условия сразу, а не в порядке написания проги? Код прилагаю, прога конечно корявая, но что делать только учусь.
Код: Выделить всёРазвернуть
$regfile = "m16def.dat"
$crystal = 16000000

Config Pina.0 = Output : Fr Alias Porta.0
Config Pina.1 = Output : Br Alias Porta.1
Config Pina.2 = Output : Bl Alias Porta.2
Config Pina.3 = Output : Fl Alias Porta.3
Config Pina.4 = Input : B1 Alias Porta. 4
Config Pina.5 = Input : B2 Alias Porta.5

Do

Gosub Вперед

If B1 = 1 Then
Gosub Вперед_вправо
Else
Gosub Назад_вправо
Wait 3
End If

If B2 = 1 Then
Gosub Вперед_влево
Else
Gosub Назад_влево
Wait 3
End If

Loop

+ Включение комбинации моторов для движения в заданном направлении.


Rambler\'s Top100 Mail.ru counter