AVR+VS1002=mp3

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

HardWareMan wrote:Для VBR сложнее, поэтому некоторые плеера врут. однако ID3v2 нам помогает - она создает первый фрейм МПЕГ но с фиктивными данными (точнее там стриминговый EXIF), в которам указан средний битрейт, который и соответствует размер трека поделенный на время.
Во, спасибо как раз про VBR я не знал.
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

пришла в голову мысль индикатор повесить на TWI шину - для упрощения разводки платы :roll:
Пока не работает :oops:
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

FreemaN wrote:пришла в голову мысль индикатор повесить на TWI шину - для упрощения разводки платы
не получилось - там надо очень сильно мудрить чтобы просто передать байт без лишней служебной информации. Значит пусть висит на SPI.

вчера:
приделал клавиатурку (7 клавиш + переключатель блокировано/разблокировано)
сделал обновление дисплея через прерывание - пока четыре раза в секунду. + то же прерывание обслуживает клавиатуру.
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Оптимизировал функцию записи в видеопамять
Сделал простейшее меню (пока только главное), осталось подправить обработку нажатий клавиш.
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Сейчас борюсь с прерываниями, развожу пробную плату, пишу менюшку...
Какие-то странности творятся если вызывать прерывание INT0 - складывается ощущение что вызывается оно (прерывание) не один раз подряд, а оочень очень много раз :(
Всё что ты видишь - лживый облик.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

FreemaN wrote:Сейчас борюсь с прерываниями, развожу пробную плату, пишу менюшку...
Какие-то странности творятся если вызывать прерывание INT0 - складывается ощущение что вызывается оно (прерывание) не один раз подряд, а оочень очень много раз :(
Это случаем не дребезг клавиатуры?
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

FreemaN wrote:Сейчас борюсь с прерываниями, развожу пробную плату, пишу менюшку...
Какие-то странности творятся если вызывать прерывание INT0 - складывается ощущение что вызывается оно (прерывание) не один раз подряд, а оочень очень много раз :(
Может ты флаг сброса прерыаания не очищаешь?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Shaos wrote:
FreemaN wrote:Сейчас борюсь с прерываниями, развожу пробную плату, пишу менюшку...
Какие-то странности творятся если вызывать прерывание INT0 - складывается ощущение что вызывается оно (прерывание) не один раз подряд, а оочень очень много раз :(
Может ты флаг сброса прерыаания не очищаешь?
А разве оно не очищается автоматически после вызова обработчика?
Хм... надо будет попробовать
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:Может ты флаг сброса прерыаания не очищаешь?
Написано в любом датащите на Мегу:
• Bits 7..0 – INTF7 - INTF0: External Interrupt Flags 7 - 0
When an edge or logic change on the INT7:0 pin triggers an interrupt request, INTF7:0 becomes set (one). If the I-bit in SREG and the corresponding interrupt enable bit, INT7:0 in EIMSK, are set (one), the MCU will jump to the interrupt vector. The flag is cleared when the interrupt routine is executed. Alternatively, the flag can be cleared by writing a logical one to it. These flags are always cleared when INT7:0 are configured as level interrupt. Note that when entering sleep mode with the INT3:0 interrupts disabled, the input buffers on these pins will be disabled. This may cause a logic change in internal signals which will set the INTF3:0 flags. See “Digital Input Enable and Sleep Modes” on page 70 for more information.
Так что, либо дребезг (если это клава), либо сбрасывать флаг надо в подключенном устройстве, что его вызывает.
Так же напомню грабли, на которые из-за невнимательности чтения датащита наступил сам:
Note that the Status Register is not automatically stored when entering an interrupt routine, nor
restored when returning from an interrupt routine. This must be handled by software.
Т.е., говоря языком i8080: не забывайте делать PUSH PSW/POP PSW.
Craz
Fanat
Posts: 64
Joined: 11 Mar 2007 03:57
Location: 217.9.147.66

Post by Craz »

http://craz.clubefir.net/files/mp3vkarmane.zip

Может пригодится...
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Сделал обработку нажатия на клавиши:
при нажатии возникает прерывание, в котором просто проверяется регистр PINA. затем результат записывается в переменную.
Дребезг контактов тоже имел место, я решил проблему так:
при вызове прерывания оно запрещается, а разрешается через некоторое время при помощи таймера (прерывание для вывода на дисплей). таким образом очень быстрые повторные нажатия не обрабатываются 8)
з.ы. push sreg/pop sreg вызывает странные последствия - программа не компилится. Юзал так: asm("push sreg");
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote:з.ы. push sreg/pop sreg вызывает странные последствия - программа не компилится. Юзал так: asm("push sreg");
ГАГА. Это ж не регистр, чтобы его пушать/попать. Это ПОРТ ВВ. Ну вот так организовано ядро AVR. Работает тока так:

Code: Select all

push r16
in   r16,SREG
push r16
Сборка в обратном порядке:

Code: Select all

pop r16
out SREG,r16
pop r16
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Возник у меня ну совсем уж тупой вопрос:
как называется микруха для приёма FM станций управляемая при помощи микроконтроллера? - интересная бы вышла функция - радиоприёмник :roll:
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

HardWareMan wrote:
FreemaN wrote:з.ы. push sreg/pop sreg вызывает странные последствия - программа не компилится. Юзал так: asm("push sreg");
ГАГА. Это ж не регистр, чтобы его пушать/попать. Это ПОРТ ВВ. Ну вот так организовано ядро AVR. Работает тока так:

Code: Select all

push r16
in   r16,SREG
push r16
Сборка в обратном порядке:

Code: Select all

pop r16
out SREG,r16
pop r16
нашёл в листинге:

Code: Select all

 4627               	/* prologue: frame size=0 */
 4628 ???? 1F92      		push __zero_reg__
 4629 ???? 0F92      		push __tmp_reg__
 4630 ???? 0FB6      		in __tmp_reg__,__SREG__
 4631 ???? 0F92      		push __tmp_reg__
 4632 ???? 1124      		clr __zero_reg__
 4633 ???? 2F93      		push r18
 4634 ???? 3F93      		push r19
 4635 ???? 4F93      		push r20
 4636 ???? 5F93      		push r21
 4637 ???? 6F93      		push r22
 4638 ???? 7F93      		push r23
 4639 ???? 8F93      		push r24
 4640 ???? 9F93      		push r25
 4641 ???? AF93      		push r26
 4642 ???? BF93      		push r27
 4643 ???? EF93      		push r30
 4644 ???? FF93      		push r31
 4645               	/* prologue end (size=17) */
это выполняется перед вызовом прерывания.

а это после:

Code: Select all

 4682 ???? FF91      		pop r31
 4683 ???? EF91      		pop r30
 4684 ???? BF91      		pop r27
 4685 ???? AF91      		pop r26
 4686 ???? 9F91      		pop r25
 4687 ???? 8F91      		pop r24
 4688 ???? 7F91      		pop r23
 4689 ???? 6F91      		pop r22
 4690 ???? 5F91      		pop r21
 4691 ???? 4F91      		pop r20
 4692 ???? 3F91      		pop r19
 4693 ???? 2F91      		pop r18
 4694 ???? 0F90      		pop __tmp_reg__
 4695 ???? 0FBE      		out __SREG__,__tmp_reg__
 4696 ???? 0F90      		pop __tmp_reg__
 4697 ???? 1F90      		pop __zero_reg__
 4698 ???? 1895      		reti
 4699               	/* epilogue end (size=17) */
выходит компилятор уже позаботился о сохранении регистров :wink:
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

вот что пока есть:
Image

Image

Image
сейчас у меня стало меньше времени, но я всё равно хочу доделать эту конструкцию
Всё что ты видишь - лживый облик.