соединить два стенда stk500

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: соединить два стенда stk500

Сообщение pyzhman »

Понятно, что нопы для задержки. Но передача "0" занимает 9 циклов, а передача "1" - 11 циклов. Логичнее в первом случае добавить один ноп, а в другом убрать один. Не правда ли? И какой частотой тактируется мк?
Docendo discimus
Реклама
racushka
Родился
Сообщения: 13
Зарегистрирован: Пт мар 04, 2011 07:12:55

Re: соединить два стенда stk500

Сообщение racushka »

pyzh_man писал(а):Понятно, что нопы для задержки. Но передача "0" занимает 9 циклов, а передача "1" - 11 циклов. Логичнее в первом случае добавить один ноп, а в другом убрать один. Не правда ли? И какой частотой тактируется мк?
Частота внешняя - 15МГц
Видимо где-то ошиблись в подсчетах тактов, потому что я проверяла на осциллографе, и ноль и единица передаются одинаковое время.

Сегодня пыталась принять байт, не вышло, в чем то ошибка, но вот в чем... вот код:

Код: Выделить всё

.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

Сообщение pyzhman »

При такой тактовой частоте время передачи "0" составляет 600 нсек, а "1" - 730 нсек. По осциллографу не думаю, что уловится разница. Разве что запоминающий.
Docendo discimus
racushka
Родился
Сообщения: 13
Зарегистрирован: Пт мар 04, 2011 07:12:55

Re: соединить два стенда stk500

Сообщение racushka »

Код: Выделить всё

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, если следующая единица).
Не знаю как это можно исправить. Но сейчас проблема не в этом, а в том, как сделать прием информации, чтобы вывести ее на светодиоды второго стенда
Реклама
Эиком - электронные компоненты и радиодетали
racushka
Родился
Сообщения: 13
Зарегистрирован: Пт мар 04, 2011 07:12:55

Re: соединить два стенда stk500

Сообщение racushka »

pyzh_man писал(а):При такой тактовой частоте время передачи "0" составляет 600 нсек, а "1" - 730 нсек. По осциллографу не думаю, что уловится разница. Разве что запоминающий.
На осциллографе увеличивала до 100 нс - деление, и получалось чуть больше чем 6,5 делений
при увеличении до 50 нс на экран импульс не помещается
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: соединить два стенда stk500

Сообщение pyzhman »

Отправил вам лс.
Но сейчас проблема не в этом
Если на выходе разлет, то при приеме надо на что-то ориентироваться. Не на что, вернее некогда. Поэтому предлагаю доделать красиво передачу, чтобы принимать уверенно.
Docendo discimus
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»