Микроконтроллеры AVR - применение и Краткий Курс - часть 10

 
1 20 21 22 23 24 38
RU Balancer #01.04.2012 19:34  @Non-conformist#01.04.2012 19:22
+
-
edit
 

Balancer

администратор
★★★★★
Non-conformist> Вон оно что... Спасибо! Но такое

Ну, смотри сам:

Пусть у нас в led находится 2 (0b00000010). Тогда:

code c
  1. // led = 2
  2.  a:led = led>>1;
  3. // led = 1
  4.  if (led == 1)
  5.  led = led<<1;
  6. // led = 2
  7.  if (led == 128)
  8.  goto a;


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

Ты не направление первого сдвига не поменял, оно у тебя всегда вправо.
 
UA Non-conformist #01.04.2012 19:38  @Balancer#01.04.2012 19:34
+
-
edit
 

Non-conformist

аксакал

Хм... Сейчас пока думать не дают, обсели со всех сторон... Спасибо, буду разбираться с логикой!
Skype: a_schabanow  
UA Non-conformist #04.04.2012 09:24  @GOGI#30.03.2012 13:10
+
-
edit
 

Non-conformist

аксакал

GOGI> Я немножко протупил, вот с таким исходником попробуй по разному подключать под контролем монитора
Non-conformist> Без изменений.
Вот эта строчка вызвала сомнения:
if(checker==0xFF)
Не может ли она означать примерно следующее: "принятые данные зальются в EEPROM, только если их сумма будет равна 0xFF" ???
Прикреплённые файлы:
 
Skype: a_schabanow  
UA Non-conformist #04.04.2012 17:52  @Non-conformist#04.04.2012 09:24
+
-
edit
 

Non-conformist

аксакал

Всё, связь наладилась! Двойной дефект был. Во-первых забыл припаять две ноги МК - как раз RXD и TXD. Как такое получилось - чисто сам не пойму. А во-вторых кетайские диверсанты всё-таки попутали надписи на своём мосту: подключил наоборот (TXD><TXD и RXD><RXD) и всё заработало! Я практически с начала плясок с бубном попробовал навыворот подключаться, но поскольку русский диверсант тоже не дремал, то ничего тогда и не вышло. Вот так вот... ))
Skype: a_schabanow  
UA Non-conformist #05.04.2012 12:24  @Non-conformist#04.04.2012 17:52
+
-
edit
 

Non-conformist

аксакал

Нормально мигалка работает! Правда пока без маятника и вверх ногами - ещё не наигрался. )) Сейчас заменил индикаторные красные светодиоды ультраяркими зелёными - читаемость явным образом повысилась, теперь можно практически не напрягаясь прочитать сообщение из десяти знаков. С маятником типа "туда-сюда", думаю, будет ещё лучше. Жаль, что пока нечем снять - веб-камера ерунду какую-то кажет, видимо частоты кадров не хватает. Семнадцать миллиампер в импульсе на ногу, а суммарное потребление устройства тестер кажет 27 мА...

ГОГИ, огромное спасибо за помощь!
Skype: a_schabanow  
UA Non-conformist #07.04.2012 19:49  @Non-conformist#05.04.2012 12:24
+
-
edit
 

Non-conformist

аксакал

Вопрос возник по моей зрительной мигалке-писалке. Причём вопрос с явственным ракетомодельным подтекстом. В момент подачи питания видно, как дружно мигает весь порт "В". В какую-то сотую долю накала, и на какую-то мелкую долю секунды, но вполне уверенно и вполне заметно. Чего, вроде как быть не должно, поскольку первые несколько вертикалей поля сообщения, набранного в GUI, свободны. Не были бы они свободны, этого эффекта я бы вообще не заметил.
Skype: a_schabanow  
UA Non-conformist #07.04.2012 20:04  @Non-conformist#07.04.2012 19:49
+
-
edit
 

Non-conformist

аксакал

Второй вопрос. Хочу собрать автоматическую зарядку для автомобильного аккумулятора. В качестве источника тока планирую использовать два запараллеленных через быстрые диоды полутораамперных импульсных источника стабильного тока, более известных на рынке как "драйверы питания мощных светодиодов". На выходе 35В х 1,5А, на входе 90 .. 265 В сетевого напряжения.

МК должен чувствовать ПРЕКРАЩЕНИЕ возрастания напряжения на АКБ, и в момент этого прекращения (точка "5" на кривой) запускать "таймер объёмного заряда", на определённое время, обусловленное током заряда и ёмкостью конкретного аккумулятора, по оканчании отработки которого выключать заряд и включать РАЗряд на номинальную нагрузку, обеспечивая тем самым тренировочный цикл. По достижении некоего заданного минимального напряжения снова включать источник зарядного тока - и так три-пять раз.

Статья: Заряд кислотных аккумуляторов

Собственно вопрос: можно я набросаю схему-алгоритм, а кто-нибудь грамотный поможет с Си?
Skype: a_schabanow  
RU GOGI #07.04.2012 20:14  @Non-conformist#07.04.2012 19:49
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist>В момент подачи питания видно, как дружно мигает весь порт "В".
Ну, он мигает, но очень быстро. Это прямо из программы следует.
Там сначала идет DDRB=0xFF; это конфигурирование порта на выход. Так как PORTB=0x00, то через светодиоды начинает идти ток. И только следующая строчка PORTB=0xFF; гасит светодиоды. Там интервал буквально несколько микросекунд.
1  11.011.0
UA Non-conformist #07.04.2012 20:46  @GOGI#07.04.2012 20:14
+
-
edit
 

Non-conformist

аксакал

Понятно. А я уж подумал, что это какой-то железный глюк.
Skype: a_schabanow  
UA Non-conformist #09.04.2012 13:41  @Non-conformist#07.04.2012 20:46
+
-
edit
 

Non-conformist

аксакал

Отлично с маятником работает! Главное - приноровиться со скоростью махания. Слово из восьми знаков читается вполне уверенно. Думаю, дитя будет довольно.

Последняя проблема осталась - если устройство держать в руке как было задумано (кнопка питания под указательный палец), то символы получаются вверх ногами. Надо бы биты PB переназначить как-то. Уж я крутил-менял - не получается ничего (лазил в iotiny2313.inc)

Помощь нужна, сам не справлюсь...
Skype: a_schabanow  
UA Non-conformist #09.04.2012 15:34  @Non-conformist#09.04.2012 13:41
+
-
edit
 

Non-conformist

аксакал

И ещё - как сделать так, чтобы по замыкании на землю ноги, определяющей направление считывания, происходило бы ОДНОКРАТНОЕ считывание загруженного сообщения - вне зависимости от того, остаётся ли замкнутой на землю эта нога или нет?

Такая доработка алгоритма имхо обеспечит устойчивость синхоронизации развёртки к изменениям частоты махания.
Skype: a_schabanow  
RU GOGI #09.04.2012 17:25  @Non-conformist#09.04.2012 13:41
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist>Надо бы биты PB переназначить как-то. Уж я крутил-менял - не получается ничего (лазил в iotiny2313.inc)
Вывернуть порт наизнанку, это нет простой операции, надо восемь битов ручками переставлять.
1  11.011.0
UA Non-conformist #09.04.2012 17:36  @GOGI#09.04.2012 17:25
+
-
edit
 

Non-conformist

аксакал

Non-conformist>>Надо бы биты PB переназначить как-то. Уж я крутил-менял - не получается ничего (лазил в iotiny2313.inc)
GOGI> Вывернуть порт наизнанку, это нет простой операции, надо восемь битов ручками переставлять.
Так я и переставлял всё подряд, методом тыка:

#define PORTB7 7
#define PORTB6 6
#define PORTB5 5
#define PORTB4 4
#define PORTB3 3
#define PORTB2 2
#define PORTB1 1
#define PORTB0 0

=>

#define PORTB7 0
#define PORTB6 1
#define PORTB5 2
#define PORTB4 3
#define PORTB3 4
#define PORTB2 5
#define PORTB1 6
#define PORTB0 7

И ещё несколько таких же, в которых упоминается "РВ". Ничего не помогает.
Skype: a_schabanow  
RU GOGI #09.04.2012 17:36  @Non-conformist#09.04.2012 15:34
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist> И ещё - как сделать так, чтобы по замыкании на землю ноги, определяющей направление считывания, происходило бы ОДНОКРАТНОЕ считывание загруженного сообщения - вне зависимости от того, остаётся ли замкнутой на землю эта нога или нет?
Вообще оно уже так и есть, пока сообщение все не выведется, МК не проверяет состояние ноги.
1  11.011.0
UA Non-conformist #09.04.2012 17:38  @Non-conformist#09.04.2012 17:36
+
-
edit
 

Non-conformist

аксакал

Non-conformist> ... в которых упоминается "РВ".
Но, правда, по одному... Может все хором надо вывернуть таким образом?
Skype: a_schabanow  
UA Non-conformist #09.04.2012 17:39  @GOGI#09.04.2012 17:36
+
-
edit
 

Non-conformist

аксакал

GOGI> Вообще оно уже так и есть, пока сообщение все не выведется, МК не проверяет состояние ноги.
Нет, надо сделать не "пока всё не выведется", а пока "вкл-выкл" маятник не сделает. Одновибратор нужен!
Skype: a_schabanow  
UA Non-conformist #09.04.2012 17:46  @Non-conformist#09.04.2012 17:39
+
-
edit
 

Non-conformist

аксакал

Non-conformist> Нет, надо сделать не "пока всё не выведется", а пока "вкл-выкл" маятник не сделает. Одновибратор нужен!
Точнее вот так: вывод текущего поля должен прерываться замыканием противоположного контакта маятника. Тогда символы на виртуальном "веере" будут неподвижно висеть в воздухе, сколько и с какой частотой ни махай. А сейчас они "скользят" - нет синхронизации начала развёртки.
Skype: a_schabanow  
UA Non-conformist #09.04.2012 17:54  @Non-conformist#09.04.2012 17:46
+
-
edit
 

Non-conformist

аксакал

Non-conformist>> Нет, надо сделать не "пока всё не выведется", а пока "вкл-выкл" маятник не сделает. Одновибратор нужен!
Non-conformist> Точнее вот так: вывод текущего поля должен прерываться замыканием противоположного контакта маятника.
Хотя оно вроде бы и прерывается... Но скольжение есть.
Skype: a_schabanow  
UA Non-conformist #09.04.2012 18:01  @Non-conformist#09.04.2012 17:54
+
-
edit
 

Non-conformist

аксакал

Non-conformist> Хотя оно вроде бы и прерывается... Но скольжение есть.
Нет, не прерывается: если бы вывод прерывался, то при махании амплитудой примерно на ширину одного символа, в воздухе неподвижно висели бы первый и последний символы сообщения, а поскольку в моём случае это один и тот же знак, то он был бы неподвижен. А я наблюдаю "бегущую строку" шириной в один символ - все буквы сообщения пробегают от начала до конца.
Skype: a_schabanow  
RU GOGI #09.04.2012 18:03  @Non-conformist#09.04.2012 17:36
+
-
edit
 

GOGI

координатор
★★★★
Дефайнами тут не получится. Надо именно в программе переставлять биты в переменных.
1  11.011.0

Balancer

администратор
★★★★★
Non-conformist>>Надо бы биты PB переназначить как-то. Уж я крутил-менял - не получается ничего (лазил в iotiny2313.inc)
GOGI> Вывернуть порт наизнанку, это нет простой операции, надо восемь битов ручками переставлять.

И это отзеркалит изображение по вертикали, а не перевернёт. Для переворачивания нужно переставить биты в другом порядке (цикл на 8 итераций) и поменять местами байты от первого к последнему.
 

GOGI

координатор
★★★★
Balancer>и поменять местами байты от первого к последнему.
это то как раз два дефайна поменять
1  11.011.0
RU shadowjack #09.04.2012 20:20  @Balancer#09.04.2012 18:19
+
-
edit
 

shadowjack

втянувшийся
Balancer> И это отзеркалит изображение по вертикали, а не перевернёт. Для переворачивания нужно переставить биты в другом порядке (цикл на 8 итераций) и поменять местами байты от первого к последнему.
Вот здесь обсуждается изменение порядка бит в байте на противоположный.


Я так понимаю, лучшее решение без использования ассемблера следующее:
// Reverses the order of bits in a byte.
// I.e. MSB is swapped with LSB, etc.
unsigned char Bit_Reverse( unsigned char x )
{
x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
return x;
}
 
 11.011.0
UA Non-conformist #09.04.2012 20:36  @shadowjack#09.04.2012 20:20
+
-
edit
 

Non-conformist

аксакал

О, спасибо. Надеюсь, что это то что нужно, и что ГОГИ даст указания, как адаптировать этот абстрактный кусок к конкретному исходнику.

И вот это меня ещё беспокоит (точнее даже не "ещё", а в первую очередь):

> Точнее вот так: вывод текущего поля должен прерываться замыканием противоположного контакта маятника. Тогда символы на виртуальном "веере" будут неподвижно висеть в воздухе, сколько и с какой частотой ни махай. А сейчас они "скользят" - нет синхронизации начала развёртки. В результате только иногда проскакивает слово целиком, а в основном - только несколько букв.

Без такой синхронизации читаемость всё-таки откровенно слабовата.
Skype: a_schabanow  
UA Non-conformist #11.04.2012 09:05  @Non-conformist#09.04.2012 20:36
+
-
edit
 

Non-conformist

аксакал

Non-conformist> О, спасибо. Надеюсь, что это то что нужно, и что ГОГИ даст указания...
Ну так что, ГОГИ, не подскажешь, куда конкретно воткнуть сформулированное shadowjack заклинание? Гусары - молчать! )) И хотелось бы попробовать прерывать вывод текущего поля замыканием противоположного контакта маятника.
Skype: a_schabanow  
Это сообщение редактировалось 11.04.2012 в 10:36
1 20 21 22 23 24 38

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru