проблема с UART attiny2313

Обсуждаем контроллеры компании Atmel.
Ответить
%MUSHRUM
Родился
Сообщения: 2
Зарегистрирован: Пт май 09, 2025 17:03:41

проблема с UART attiny2313

Сообщение %MUSHRUM »

Помогите пожалуйста, пишу midi синтезатор и пытаюсь разобраться с UART. Не принимает старший бит(всегда 0). По спецификации каждое сообщение состоит из нескольких байт: ведущий начинается с единицы, остальные с нуля, этот код выводит все подряд, но даже так светодиод моргает если в предыдущих байтах присутствовала единица. Смотрел вход RX - фронты не смазаны, поэтому с аппаратной частью все должно быть ок. Уже раз 10 перепроверил все настройки UART. Тактируется все от 20 МГц кварца, подключил еще сдвиговый регистр со светодиодами для отладки(функция send и регистр led для нее, с ней проблем нет, я проверял)

.include "2313def.inc"

.def temp = r16
.def led = r17

.org 0x0000
rjmp reset

reset:

ldi temp, RAMEND
out spl, temp

sbi DDRD, PD6

ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp

ldi temp, 0
out UBRRH, temp

ldi temp, 39
out UBRRL, temp

ldi temp, (0b00000000)
out UCSRA, temp

ldi temp,(1<<UCSZ1|1<<UCSZ0)
out UCSRC, temp

ldi temp, (1<<RXEN)
out UCSRB, temp

rjmp main

main:
sbic UCSRA, RXC
rcall UART
rjmp main

UART:
in temp, UDR
mov led, temp
;sbrc temp, 7
rcall send
ret

send:
cbi PORTB, PB3


sbrs led, 7
cbi PORTB, PB0
sbrc led, 7
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 6
cbi PORTB, PB0
sbrc led, 6
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 5
cbi PORTB, PB0
sbrc led, 5
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 4
cbi PORTB, PB0
sbrc led, 4
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 3
cbi PORTB, PB0
sbrc led, 3
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 2
cbi PORTB, PB0
sbrc led, 2
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 1
cbi PORTB, PB0
sbrc led, 1
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 0
cbi PORTB, PB0
sbrc led, 0
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1


sbi PORTB, PB3
ret


Upd: Всем спасибо, проблема видимо действительно была из-за скобок!
Последний раз редактировалось %MUSHRUM Сб май 10, 2025 15:40:41, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: проблема с UART attiny2313

Сообщение Starichok51 »

в такой записи
ldi temp, (1<<PB0|1<<PB1|1<<PB3)
в скобки нужно брать каждое выражение. должно быть так:
ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3)
и ниже
ldi temp,(1<<UCSZ1|1<<UCSZ0)
такая же ошибка.
ldi temp,(1<<UCSZ1)|(1<<UCSZ0)
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: проблема с UART attiny2313

Сообщение akl »

Starichok51 Это не ошибки.
%MUSHRUM AT90S2313 и ATtiny2313 похожи, но имеют отличия. Поэтому, нужно инклудить точно. Как вариант...
Спойлер

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

.include "tn2313def.inc"
;.include "2313def.inc"

.equ	Fcpu=20000000

.equ	BAUD=31250

.def temp = r16
.def led = r17

.org 0x0000
rjmp reset

reset:

ldi temp, RAMEND
out spl, temp

sbi DDRD, PD6

;	ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp

	SBI PORTB, PB3

	LDI	R22,HIGH(Fcpu/16/BAUD-1)
	OUT	UBRRH,R22
	LDI	R22,LOW(Fcpu/16/BAUD-1)
	OUT	UBRRL,R22
;ldi temp, 0
;out UBRRH, temp

;ldi temp, 39
;out UBRRL, temp

;ldi temp, (0b00000000)
;out UCSRA, temp

;ldi temp,(1<<UCSZ1|1<<UCSZ0)
;out UCSRC, temp

ldi temp, (1<<RXEN)
out UCSRB, temp

	IN	R22,UDR	;псевдочтение для сброса RxC
;rjmp main

main:
	SBIS	UCSRA,RxC
	RJMP	MAIN

	IN	LED,UDR
	RCALL	SEND

	RJMP	MAIN
;sbic UCSRA, RXC
;rcall UART
;rjmp main

;UART:
;in temp, UDR
;mov led, temp
;sbrc temp, 7
;rcall send
;ret

send:
cbi PORTB, PB3

sbrs led, 7
cbi PORTB, PB0
sbrc led, 7
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 6
cbi PORTB, PB0
sbrc led, 6
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 5
cbi PORTB, PB0
sbrc led, 5
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 4
cbi PORTB, PB0
sbrc led, 4
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 3
cbi PORTB, PB0
sbrc led, 3
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 2
cbi PORTB, PB0
sbrc led, 2
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 1
cbi PORTB, PB0
sbrc led, 1
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1

sbrs led, 0
cbi PORTB, PB0
sbrc led, 0
sbi PORTB, PB0

sbi PORTB, PB1
cbi PORTB, PB1


sbi PORTB, PB3
ret
.EXIT
%MUSHRUM
Родился
Сообщения: 2
Зарегистрирован: Пт май 09, 2025 17:03:41

Re: проблема с UART attiny2313

Сообщение %MUSHRUM »

akl, я проверял def файл, все регистры и биты совпадают. Вернее там некоторых небыло но я, дурак, сначала думал что файл кривой и все поправил.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: проблема с UART attiny2313

Сообщение Jack_A »

Давненько не брался за АВР, но по-моему, это всё же ошибки. Если скобки не как у Starichok51, то результат м.быть х. зн. какой. Ведь оператор | приоритетней >> Можно прогнать через ассемблер тот и другой вариант и посмотреть - какая константа сгенерируется. Мне лень...
Изображение
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: проблема с UART attiny2313

Сообщение Starichok51 »

у меня уже была такая ошибка, поэтому я и написал, что это ошибка.
пока я не взял каждую часть выражения в скобки, не работало.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: проблема с UART attiny2313

Сообщение BOB51 »

Насчет скобок Starichok51 абсолютно прав.
8)
А вот сами *.inc (и их размещение в папках) зависят от того, какой компилятор ассемблера в проекте АВР студии на вкладке project -> assembler option -> AVR assembler указан avrasm(version 1) или avrasm2(version 2).
8)
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: проблема с UART attiny2313

Сообщение akl »

Проверил в студии все 3 записи. Всегда студия занесла в DDRB одно и тоже значение. :)

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

	ldi temp,1<<PB0|1<<PB1|1<<PB3 ;PB0 - DO PB1 - sck PB3 - latch
	out DDRB, temp
	ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
	out DDRB, temp

ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: проблема с UART attiny2313

Сообщение Starichok51 »

интересно, я сейчас тоже проверил, и тоже получил одинаковые значения.
а как же у меня тогда не работало, пока я не наставил скобок? наставил скобок и заработало.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: проблема с UART attiny2313

Сообщение Jack_A »

Возможно, от компилятора зависит? Или от набора данных?
Во всяком случае, даже для наглядности и читаемости скобки - полезная вещь, организуют правильную мысль, не напрягая зря мозги: а что там за чем следует.
Я когда-то так в Дельфи лоханулся: не учёл, что or приоритетней операции сравнения и очень удивлялся: куда это моих ifов заносит?
Один умный автор иронично заметил: "Некоторые программисты считают, что мировой запас скобок ограничен и поэтому применяют их крайне редко".
Изображение
Ответить

Вернуться в «AVR»