роботы робототехника микроконтроллеры


 Страниц (11): В начало « ... 3 4 5 6 7 8 [9] 10 11 »   

> Без описания
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



попробуйте абстрагироваться от того что картинка влезает в два байта.

ваш byte ram [4][4]
то же самое что и bit ram[4][4][8]

но это подразумевается, потому что типа bit в Си наверное нет. (хотя не знаю)
поэтому писать придется не
ram [a][b][номер_кадра]
а
ram [a][b] >> номер_кадра // и возможно добавлять & 1

(Отредактировано автором: 08 Февраля, 2011 - 20:06:44)

 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Цитата:
Вы загружаете в него байт последовательно, на табло этот же байт выводится параллельно.

Я это все понимаю. Правильно, последовательно загрузили, а потом защелкнули, и все параллельно вывелось.

Меня интересует момент реализации конкретно программы. Как мне оставить младшую часть байта такой как я написал, ибо мне ее изменять не нужно. А только менять старшую часть, и все это заталкивать в сдвигвоый регистр?
(Добавление)
Да, в C нет такого типа данных как bit и byte
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



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

кам менять?
а что вам нужно поменять
char up = data & 0b11110000;
char down = data & 0b00001111;
//меняете как хотите up или down
.
.
data = up | down ;
Мне непонятно зачем вам, компилятор говорит о нехватке памяти?

(Отредактировано автором: 08 Февраля, 2011 - 20:29:50)

 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



skyburn
Никак. Логика работы сдвигового регистра этого не позволяет. Необходимо каждый раз передавать байт в сдвиговый регистр. Пример:

unsigned int data = 0b1111100110011111; //квадрат
unsigned char buf;

while(1)
for(char i = 0; i < 4; i++)
{
buf = ((unsigned char)(data & 15) << 4) | (~(1 << i) & 15);
data >>= 4;
/*
Здесь необходимо вывести переменную buf в сдвиговый регистр и сделать паузу, чтобы загоревшаяся строка была видна.
*/
}


При проектировании табло 16х16 следует подключить к отдельным выводам пары регистров отвечающих за строки и за столбцы, чтобы включать следующую строку одним импульсом.
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



)
(Добавление)
Цитата:
Здесь необходимо вывести переменную buf в сдвиговый регистр и сделать паузу, чтобы загоревшаяся строка была видна

Зачем, если изображение статично, то оно будет цельным, по идее
(Добавление)
Цитата:
Мне непонятно зачем вам, компилятор говорит о нехватке памяти?

Не не говорит, но 15% памяти МК уже занято.
(Добавление)
Цитата:
skyburn
Никак. Логика работы сдвигового регистра этого не позволяет. Необходимо каждый раз передавать байт в сдвиговый регистр. Пример:

Вы меня не правильно поняли. Понятное дело что в сдвиговый регистр нужно только по новой перезаписывать. Я имел в виду программно. И можете подсказать какой примерно вид будет иметь переменная buf после всех выше описанных операций? Примерно такой 0bXXXXXXXX?
То есть регистр сразу заберет себе весь байт целиком, ну проглотит за 1 раз?

(Отредактировано автором: 08 Февраля, 2011 - 20:36:38)

 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



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

Вы издеваетесь? Самоцитирование- это включение пулемета.
Посмотрите внимательно по фотке как все спаяно. Я по описанию тоже думал что вначале зажигаются верние четыре, потом нижние четыре. Учитывая инерционность - все кажется плавно.
Но у него не так.

(Отредактировано автором: 08 Февраля, 2011 - 23:58:10)

 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Нет!!! Вы не правы! Я могу вывести любое изображение! Внимательно посмотрите на алгоритм!
(Добавление)
Я выводил кружочек, букву А, ну и все что на ум взбрело, в размерах 4х4)
(Добавление)
(Добавление)
CODE:
#include <avr/io.h>

unsigned int data = 0b1111100110011111; //квадрат
unsigned char buf;


main(void)
{
DDRB=0xff;
while(1)

for(char i = 0; i < 4; i++)
{
buf = ((unsigned char)(data & 15) << 4) | (~(1 << i) & 15);
data >>= 4;

PORTB |=buf<<0; // вопрос в этой строчке, как мне правильно отправить Buf в HC595???
PORTB |=~(1<<1);
PORTB |=1<<1;

PORTB |=1<<2;
PORTB %=~(1<<2);

}

}

(Отредактировано автором: 08 Февраля, 2011 - 22:00:47)

 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



не прав. только весь смысл его пропадает- сдвиговый резистор используется только как электрический буффер. квадрат 4х4 можно и без него было сделать.
но зато теперь вы знаете как программить сдвиговый регистр и легко сделаете 16х16
а второй порт для клавы можно оставить.
(Добавление)
unsigned int [10] data = {0b1111100110011111, 0b0110100110010110, } ;
да, для Си наверное так проще массив изображений делать, чем как я предлагал.
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Цитата:
не прав. только весь смысл его пропадает- сдвиговый резистор используется только как электрический буффер. квадрат 4х4 можно и без него было сделать.но зато теперь вы знаете как программить сдвиговый регистр и легко сделаете 16х16


Верно, я для этого 4х4 и делал! Что б разобраться как и что устроенно)
(Добавление)
Белый Волк пожалуйста посмотрите на тот код, что я выложил, для WinAVR а то что то не получается. Вродь импульс генерирую нормально, и защелка закрывается. А вот на матрице полная ерунда выходит! Не понятное изображение строит. Не могли б вы немного разьяснить по поводу этих строчек

CODE:
buf = ((unsigned char)(data & 15) << 4) | (~(1 << i) & 15);
data >>= 4;

Зачем вы там использовали ИЛИ? Разве так можно?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



что то я пропустил... а где схема была?
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



мм какая схема?) Макета моего?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



угу. все говорят о какой то схеме ...
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



Я все с головы делал, я писал, что расставил детали примерно, а потом по датащиту подключал всю в кучу.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



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

Вы издеваетесь? Самоцитирование- это включение плюсомета.
Посмотрите внимательно по фотке как все спаяно. Я по описанию тоже думал что вначале зажигаются верхние восемь, потом нижние восемь. Учитывая инерционность - все кажется плавно.
Но у него не так .
(Отредактировано автором: 08 Февраля, 2011 - 23:58:10)
 
 Top
skyburn Post Id



Маршал


Сообщений всего: 124
Дата рег-ции: Янв. 2011  



У меня загорается по 4, и так до самого низа!
 
 Top
Страниц (11): В начало « ... 3 4 5 6 7 8 [9] 10 11 »
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru