Страница 515 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 20:45:58
просто КОТ
Не, через почту не сильно быстро и удобно. Так что продолжим тут. Задача в итоге получить связь по такому алгоритму, где N -- бит чётности.
Изображение
Длительности каждого бита 7,8мкс. И таким образом рабочая скорость передачи информации 128кБит/сек, а действительная 64кБит/сек. Т.е. 8кБайт/сек.

Насколько сложно это будет? Передача асинхронная.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 21:01:30
oleg110592
передатчик просто, а приемник надо думать. А чего не стандартный UART? Правда в тини14 его нету. Это передача по воздуху?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 21:05:25
просто КОТ
Угу. Типа самодельного канала. и вот хочу такой простенький, но в меру стабильный алгоритм. А с такими характеристиками можно передавать звук в телефонном качестве -- 8бит на 8кГц.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 21:13:03
oleg110592
надо отдельную тему создать

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 22:18:59
Alexeyslav
Не выдумывай чепуху. UART-ы в контроллерах могут работать в 9-битном режиме. 9-й бит можно использовать в качестве выбора что именно передается в 8-битах, идентификатор или данные.
Если надо вписаться во временные рамки, то достаточно повысить скорость передачи. Зато получишь аппаратную реализацию, на которую не надо будет тратить ресурсы. Программная реализация вашего протокола потребует очень сложной обработки, и скорей всего потребуется повысить тактовую частоту и "не дышать" чтобы все работало без сбоев.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн июн 23, 2014 22:24:41
просто КОТ
ИМХО, передать за 125мкс какие-то 16 бит это вполне реально. Более чем. Тем более при тактовой 8МГц.
А кроме как передча/приём у МК будет очень мало задач. Типа опросить датчик, или вывести ШИМ с неким коэффициентом. И всё.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт июн 24, 2014 12:30:05
ibiza11
просто КОТ писал(а):125мкс какие-то 16 бит ... при тактовой 8МГц.
62 такта микроконтроллера на бит. много или мало? прерывание каждые 62 такта не очень то и хорошо.
Спойлер

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

;адреса переменных
.equ CurBitNum =  SRAM_START
.equ PacketL   =  CurBitNum+1
.equ PacketH   =  CurBitNum+2

.equ PORT      =  PORTB
.equ BIT       =  0

.def temp = r16
.def mask = r16
.def bitn = r16
.def byte = r17

BitMask:
   .db 0b00000001, 0b00000010
   .db 0b00000100, 0b00001000
   .db 0b00010000, 0b00100000
   .db 0b01000000, 0b10000000

isr_routine:
   push temp
   in   temp, SREG
   push temp
   push byte

   lds  bitn, CurBitNum    ; загружаем номер текущего бита в посылке
   sbrs bitn, 4            ; проверяем интервал 0-7 или 8-15 бит
   rjmp LowByte
   lds  byte, PacketH      ; загружаем старший байт
   rjmp GetMask
LowByte:
   lds  byte, PacketL      ; загружаем младший байт

GetMask:
   andi bitn, 0b00000111   ; получаем номер бита в байте
   ldi  ZL,  low(BitMask*2); загружаем адрес массива масок
   ldi  ZH, high(BitMask*2)
   add  ZL, bitn           ; получаем адрес маски текущего бита
   clr  bitn
   adc  ZH, bitn
   lpm  mask, Z            ; загружаем маску

   and  byte, mask         ; проверяем текущий бит
   breq  Set_0
   sbi  PORT, BIT
   rjmp IncBitNum
Set_0:
   cbi  PORT, BIT

IncBitNum:
   lds  bitn, CurBitNum
   inc  bitn
   cpi  bitn, 16
   brlo BitNumInRange
   clr  bitn
BitNumInRange:
   sts  CurBitNum, bitn

   
   pop  byte
   pop  temp
   out  SREG,temp
   pop  temp
   ret
эта функция при первом проходе выполняется 52 такта, вместе с вызовом.... итого, 52/62 = 84% времени убивается на ваш алгоритм передачи. Кстати, это готовый обработчик прерывания, можете использовать)

PS упростил инкремент:
Спойлер

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

IncBitNum:
   lds  bitn, CurBitNum
   inc  bitn
   andi bitn, 0b00001111
   sts  CurBitNum, bitn
так получается 50 тактов

PSS, если писать на Сях, то у меня вообще получилось время выполнения одного прерывания при частоте 8МГц скачет вплоть до ~ 16мкс
Спойлер

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

#define PORT PORTB
#define BIT  0
uint16_t Packet = 0xAAAA;
#pragma vector=TIMER0_COMP_vect
__interrupt void T0_COMP()
{
   PORTB |= (1<<5); // for debug
   
   static uint8_t BitNum;
   if(Packet & (1<<BitNum))
      PORT |= (1<<BIT);
   else
      PORT &= ~(1<<BIT);
   
   BitNum++;
   BitNum &= ~(0xF0);
   
   PORTB &= ~(1<<5); // for debug
} 
Изображение

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт июн 24, 2014 14:19:43
akl
Если использовать прерывание, то можно уложиться в 14 тактов
Спойлер

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

	.ORG	$0D   ;прерывание по Т0 CTC ATtiny2313	
TRANS:
	IN	R16,PORTB
	CBR	R16,EXP2(0)
	LSL	R21
	ROL	R20
	BRCC	PC+2
	SBR	R16,EXP2(0)
	OUT	PORTB,R16

	DEC	R22
	BRNE TRANS_OUT
	SET
TRANS_OUT:
	RETI
Необходимые предустановки
Спойлер

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

TEST_16:
	CLI
	LDI	R20,0b11000000	; для примера START+ID+N
	LDI	R21,0b11111111	; DATA

	LDI	R22,16

	LDI	R16,62-1
	OUT	OCR0A,R16	;режим CTC T0
	LDI	R16,2
	OUT	TCCR0A,R16

	LDI	R16,$20
	OUT	MCUCR,R16		; SLEEP_IDLE enable

	LDI	R16,1
	OUT	TIMSK,R16

	OUT	TIFR,R16
	OUT	TCCR0B,R16	; старт Т0

	SEI
TTT:
	SLEEP
	BRTC	TTT

	CBI	PORTB,0
	CLT
	
	RJMP	TEST_16

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт июн 24, 2014 15:02:32
Аlex
ibiza11 писал(а):если писать на Сях, то у меня вообще получилось время выполнения одного прерывания при частоте 8МГц скачет вплоть до ~ 16мкс
А если так попробовать ?
Спойлер

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

#define PORT PORTB
#define BIT  0
uint16_t Packet = 0xAAAA;

#pragma vector=TIMER0_COMP_vect
__interrupt void T0_COMP()
{
   static uint8_t BitNum=16;

   PORTB |= (1<<5); // for debug
   
   if(Packet & 0x01)      PORT |= (1<<BIT);
   else                   PORT &= ~(1<<BIT);
   Packet >>=1;

   if(!--BitNum){
     BitNum=16;
     Packet=0xAAAA;
   }

   PORTB &= ~(1<<5); // for debug
} 

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт июн 24, 2014 15:23:41
просто КОТ
Уууууууууууу. Вы хоть комментов побольше ставьте. Я ж не догоняю половину. Но всем огромное спасибо.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт июн 24, 2014 15:35:02
ibiza11
Аlex писал(а):А если так попробовать ?
так 4.56мкс :)) только пакет то извне надо задавать) и мне кажется вариант akl тут несомненно лидер по скорости.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср июн 25, 2014 15:37:29
kLeR1k
Делаю управляемый ШИМ на Attiny13 по этой статье и столкнулся со следующими проблемами:
1. Когда в OCR0A находится 0 , то есть очень короткие импульсы в сигнале, вместо ровного нуля. Если повесить светодиод на ногу с ШИМом, он светится где-то в половину своей яркости. Как этого можно избежать?
2. После того, как протестировал прошивку в протеусе, решил собрать то же самое на железе. Прошивку в МК просто заливал, фьюз биты не трогал. Так вот, получаю вместо плавного загорания светодиода резкое включение, хотя в симуляции с той же самой прошивкой видно плавное увеличение скважности импульсов. Может какие-то фьюз биты всё же нужно установить? С какой частотой происходит прерывание interrupt [TIM0_OVF] void timer0_ovf_isr(void)? Пробовал менять значение константы в статье вместо 19 на 80
if (cnt==19){
cnt=0;
//254 шага увеличения ширины импульса
if (Step !=0xFE ) {
Step++;
OCR0A=Step;
}
В симуляции увеличение скважности происходит очень медленно. Может стоит ещё больше увеличить т.к. процесс увеличения скважности происходит очень быстро в реальности?
Извиняюсь за, возможно, глупые вопросы, но знаний в этой области не так много, а на примере проще понять как это работает... Осциллографа, способного отобразить сигнал ШИМа, нет, к сожалению...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср июн 25, 2014 15:43:35
Engineer_Keen
kLeR1k писал(а):В симуляции увеличение скважности происходит очень медленно.
99% что симуляция у вас идет не в реальном времени, о чем протеус вам сообщает в окне сообщений. Так что скорость изменения скважности нужно соотносить с таймером (строчка внизу экрана), а не по реальному времени.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср июн 25, 2014 16:06:47
kLeR1k
Engineer_Keen писал(а): 99% что симуляция у вас идет не в реальном времени, о чем протеус вам сообщает в окне сообщений. Так что скорость изменения скважности нужно соотносить с таймером (строчка внизу экрана), а не по реальному времени.
Честно говоря знал, что симуляция не в реальном времени идёт, а на что ориентироваться не знал. Спасибо за подсказку! Действительно, увеличение скважности до максимума занимает по счетчику внизу экрана 0,5 секунды. Наверное маловато для того, что бы заметить плавное увеличение яркости свечения светодиода...
Update:
Подобрал значение переменной так, что по ориентиру протеуса заполнение скважности занимает 1,5 секунды. В железе - всё как было, так и осталось :evil:

Re: STM32: Трудности при освоении

Добавлено: Ср июн 25, 2014 17:14:03
RedBull
Не могу разобраться с интерфейсом датчика холла. Опишите пожалуйста состояние настроек для данного режима

Re: STM32: Трудности при освоении

Добавлено: Чт июн 26, 2014 09:45:56
Gudd-Head
RedBull писал(а):Не могу разобраться с интерфейсом датчика холла.
А какой у него интерфейс? :shock:

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт июн 26, 2014 12:18:04
oleg63m
насколько я понимаю, там либо логика, либо обычный анальный выход, а ля переменный резистор

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт июн 26, 2014 15:40:53
Starmarik
Привет всем радиолюбителям :) может у кого есть прошивка или исходник суточного таймера для avr, или может кто видел где на просторах инета, прошу послать в том направлении :)))) В общем, нужна прошивка, которая бы включала свет в аквариуме на 8 часов, и раз в сутки влючала на 5 секунд кормушку автоматическую. Кто может чем помочь, прошу откликнутся :))) А может кто согласится написать безвозмездно? :))))) Прошу не сочесть за наглость :)))

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт июн 26, 2014 21:04:21
ua1arn
Правьте под себя - это таймер на много-много часов.

Замешательство с программированием ATmega64A

Добавлено: Чт июн 26, 2014 22:03:02
Саша Леськив
Собираю тест-плату с серцем на микроконтроллере ATmega64A. Пошарил в нете, что его нужно программировать, используя ноги юарта для miso i mosi. Вопрос - почему именно юарт, а не спецеализированные для этих целей ножки miso i mosi? Будут последние работать или нет?
P.S. Я не проверял, как с ножками miso i mosi, но порты юарта работают на ура и микра прошивается полностью за пару секунд не смотря на свои 64к.
P.P.S Эти ноги не могу использовать, ибо нужен юарт.
P.P.P.S Сам проверить не могу сейчас по некоторым причинам.
Зарание спасибо!