реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как передать 7 бит по SPI ?
Obam
сообщение Jul 9 2015, 10:19
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663




Вот почему MSB не нарисовать слева? Арабы мы что ли? И в десятичной и 16-ричной записи правый разряд младший…

Сообщение отредактировал Obam - Jul 9 2015, 10:20


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Lerk
сообщение Jul 9 2015, 10:27
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 5-05-11
Пользователь №: 64 797



Цитата(Obam @ Jul 9 2015, 13:19) *
Вот почему MSB не нарисовать слева? Арабы мы что ли? И в десятичной и 16-ричной записи правый разряд младший…


потому что осциллограф.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 9 2015, 10:35
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Не флуда ради, но на рисунке регистры, а не осциллограф, тем более если MSB-first то и развертка слева sm.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Lerk
сообщение Jul 9 2015, 11:55
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 5-05-11
Пользователь №: 64 797



Цитата(Obam @ Jul 9 2015, 13:35) *
Не флуда ради, но на рисунке регистры, а не осциллограф, тем более если MSB-first то и развертка слева sm.gif


На рисунке указано, что LSB(МЗР)-first таки.

А в целом, меня не парит. Вообще странно на таком форуме видеть возмущение наличию разных стандартов записи: они были придуманы еще до нас.

А что касается осциллографа, то намек был на то, что я последнее время работаю с ним много и мне удобнее записывать данные 1-к-1. Если вам удобнее в голове постоянно делать преобразования bin2hex, hex2bin, reverse - ваше право :-) Я же остаюсь при своём.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jul 9 2015, 14:15
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(uzzzer @ Jul 9 2015, 10:55) *
А вот с семибитными регистрами проблема.
А что за регистры?


Цитата(Lerk @ Jul 9 2015, 14:55) *
Вообще странно на таком форуме видеть возмущение наличию разных стандартов записи: они были придуманы еще до нас.

Что за стандарты?
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Jul 9 2015, 17:12
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



На асме.
Такт по фронту.

; LCD names pinouts
.equ LCD = PORTB ; Порт
.equ clk = PB0 ; вывод тактов
.equ dat = PB1 ; вывод данных


CODE
send_7bits: ;
push loop ; Save loop in STACK
ldi loop,7 ; bit counter
andi tmp,0x7F ; Чистим 7й ненужный бит
out_c: ;
clc ; clearing carry flag
ror tmp ; tmp =>> 1 ( LSB first )
brcc d_zer ; Branch if Carry flag eual zero!
sbi lcd,dat ; DATA -> 1
rjmp d_one ;
d_zer: ;
cbi lcd,dat ; DATA -> 0
d_one: ;
sbi lcd,clk ; CLK -> 1
cbi lcd,clk ; CLK -> 0
dec loop ; bitcounter = -1
brne out_c ;
pop loop ; Restore loop from STACK
ret ; reеurn


Насколько я знаю, то регистр без CS (74HC164) запоминает последние такты.
К примеру их туда можно плюнуть и 1000, отобразятся только последние.
Если нужна скорость по аппаратному SPI, то выше уже показали как это сделать, собрать в слово свои 28 бит, Биты ([31...28] для MSB first), ([3...0] LSB first) очистить, и слать по очереди 4 байта.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jul 9 2015, 17:23
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(pavel-pervomaysk @ Jul 9 2015, 20:12) *
Биты ([31...28] для MSB first), ([3...0] LSB first) очистить, и слать

Зачем их очищать?

Цитата(pavel-pervomaysk @ Jul 9 2015, 20:12) *
На асме.

Я бы так сделал:
Код
send_7bits: push   loop
            ldi    loop,7        ; bit counter
out_c:      cbi    lcd,dat    ; DATA -> 0
            sbrc   tmp,0
            sbi    lcd,dat    ; DATA -> 1
            ror    tmp        ; tmp =>>
            sbi    lcd,clk    ; CLK  -> 1
            dec    loop          ; bitcounter = -1
            cbi    lcd,clk    ; CLK  -> 0
            brne   out_c         ;  
            pop    loop          ; Restore loop from STACK
            ret                  ; return


Сохранение/восстановление SREG добавить при необходимости.
Go to the top of the page
 
+Quote Post
uzzzer
сообщение Jul 10 2015, 02:55
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985



Цитата(zombi @ Jul 9 2015, 17:15) *
А что за регистры?


Регистры в матричном индикаторе HDSP2001,даташит во вложениях.


Цитата(pavel-pervomaysk @ Jul 9 2015, 20:12) *
Если нужна скорость по аппаратному SPI, то выше уже показали как это сделать, собрать в слово свои 28 бит, Биты ([31...28] для MSB first), ([3...0] LSB first) очистить, и слать по очереди 4 байта.


Сейчас буду пробывать сделать и так и так. Только меня смущает вот что: Какое максимальное число можно передать таким способом? Допустим я склею 28(32) бита, потом резать по 4? Правильно? А вот склееное число, если оно будет не 32 бита, а например 255 бит или больше?К стати как лучше разобрать склееное число по 8 бит?

Сообщение отредактировал uzzzer - Jul 10 2015, 02:56
Прикрепленные файлы
Прикрепленный файл  HDSP_201X_datasheet.pdf ( 426.61 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 10 2015, 04:54
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(uzzzer @ Jul 10 2015, 05:55) *
пробывать
Не стоит. Попробуйте пробовать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
uzzzer
сообщение Jul 10 2015, 08:23
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985



Цитата(Сергей Борщ @ Jul 10 2015, 07:54) *
Не стоит. Попробуйте пробовать.

Попробовал. Все получилось. На данном этапе вполне устраивает. Реализовал програмный SPI.

Код
void data_send(int qi, int *data, int n)
{
    int c;
for (int i=0;i<=n-1;i++)
{
    c=data[(qi-1)+5*i];
    for (int j=0;j<7;j++)
    {
        if ((c&0x40)==0x00) PORTA&=~_BV(DATA);
        else PORTA|=_BV(DATA);
        asm("nop");
        PORTA&=~_BV(SCL);
        asm("nop");
        PORTA|=_BV(SCL);
        asm("nop");
        c=(c<<1);
    }
    asm("nop");
    asm("nop");
}
}

Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 10:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016