соединить два стенда stk500
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: соединить два стенда stk500
Понятно, что нопы для задержки. Но передача "0" занимает 9 циклов, а передача "1" - 11 циклов. Логичнее в первом случае добавить один ноп, а в другом убрать один. Не правда ли? И какой частотой тактируется мк?
Docendo discimus
- Реклама
Re: соединить два стенда stk500
Частота внешняя - 15МГцpyzh_man писал(а):Понятно, что нопы для задержки. Но передача "0" занимает 9 циклов, а передача "1" - 11 циклов. Логичнее в первом случае добавить один ноп, а в другом убрать один. Не правда ли? И какой частотой тактируется мк?
Видимо где-то ошиблись в подсчетах тактов, потому что я проверяла на осциллографе, и ноль и единица передаются одинаковое время.
Сегодня пыталась принять байт, не вышло, в чем то ошибка, но вот в чем... вот код:
Код: Выделить всё
.include "m16def.inc"
.def Temp = r24 ; регистр для хранения временных данных
.def cntB = r23 ; счетчик бит
.def Temp1 = r25
.def Temp2 = r18
.def Temp3 = r21
.def cntC = r22
.def al= r19
.def bl= r20
; Инициализация
ser Temp ; в Temp записываем 0xff
out DDRB,Temp ; PORTB настраиваем на выход
out DDRC,Temp ; PORTC настраиваем на выход
clr Temp ; в Temp записываем 0х00
out DDRA,Temp ; PORTA настраиваем на вход
out DDRD,Temp ; PORTD настраиваем на вход
;cbr Temp2,0x80
;sbr Temp2,0x40
ldi al, 0b01000000
ldi bl, 0b10000000
; шина USB в состоянии покоя
ini:
ser Temp ; очищаем временные переменные
; процедура приема байта по USB
usb_in_byte:
ldi cntB,0x08 ; загружаем счетчик битов
check:
in Temp2, PINA
out PORTC, Temp2
sbrs Temp2, 7
rjmp lw
rjmp hh
lw:
cbr Temp3,7
lsr Temp3
dec cntB
brne check
rjmp ex
hh:
sbr Temp3,7
lsr Temp3
dec cntB
brne check
rjmp ex
ex:
ldi cntC,0xFF
ex2:
out PORTB,Temp3 ; выводим информацию о состоянии ключей на светодиоды
nop
nop
nop
dec cntB
brne ex2
rjmp ini- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: соединить два стенда stk500
При такой тактовой частоте время передачи "0" составляет 600 нсек, а "1" - 730 нсек. По осциллографу не думаю, что уловится разница. Разве что запоминающий.
Docendo discimus
Re: соединить два стенда stk500
Код: Выделить всё
c1:
sbrs Temp, 7 1 такт, если 0; 2 такта, если 1
rjmp lw 2 такта
rjmp hh 2 такта
lw:
out portc, al 1 такт
nop 1 такт
lsl Temp ; сдвигаем на бит влево 1 такт
dec cntB ; уменьшаем счетчик битов 1 такт
brne c1 ; проверяем на конец цикла 1 такт, если конец цикла; 2 такта, если не конец цикла
rjmp strob 2 такта
hh:
out portc, bl 1 такт
nop 1 такт
nop 1 такт
lsl Temp ; сдвигаем на бит влево 1 такт
dec cntB ; уменьшаем счетчик битов 1 такт
brne c1 ; проверяем на конец цикла 1 такт, если конец цикла; 2 такта, если не конец цикла
rjmp strob 2 такта
strob:
ldi Temp1, 0b00000000 1 такт
out portc, Temp1 ; строб EOP 1 такт
nop 1 такт
nop 1 такт
nop 1 такт
nop 1 такт
nop 1 такт
nop 1 такт
nop 1 такт
rjmp ini 2 такта
итого: 10 тактов для ноля, если следующая единица (9, если следующий ноль).
10 тактов для единицы, если следующий ноль (11, если следующая единица).
Не знаю как это можно исправить. Но сейчас проблема не в этом, а в том, как сделать прием информации, чтобы вывести ее на светодиоды второго стенда
Re: соединить два стенда stk500
На осциллографе увеличивала до 100 нс - деление, и получалось чуть больше чем 6,5 деленийpyzh_man писал(а):При такой тактовой частоте время передачи "0" составляет 600 нсек, а "1" - 730 нсек. По осциллографу не думаю, что уловится разница. Разве что запоминающий.
при увеличении до 50 нс на экран импульс не помещается
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: соединить два стенда stk500
Отправил вам лс.
Если на выходе разлет, то при приеме надо на что-то ориентироваться. Не на что, вернее некогда. Поэтому предлагаю доделать красиво передачу, чтобы принимать уверенно.Но сейчас проблема не в этом
Docendo discimus


