Страница 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 секунды. В железе - всё как было, так и осталось

Re: STM32: Трудности при освоении
Добавлено: Ср июн 25, 2014 17:14:03
RedBull
Не могу разобраться с интерфейсом датчика холла. Опишите пожалуйста состояние настроек для данного режима
Re: STM32: Трудности при освоении
Добавлено: Чт июн 26, 2014 09:45:56
Gudd-Head
RedBull писал(а):Не могу разобраться с интерфейсом датчика холла.
А какой у него интерфейс?

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 Сам проверить не могу сейчас по некоторым причинам.
Зарание спасибо!