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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

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

Насколько сложно это будет? Передача асинхронная.
Вложения
Пример.png
(6.37 КБ) 770 скачиваний
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

передатчик просто, а приемник надо думать. А чего не стандартный UART? Правда в тини14 его нету. Это передача по воздуху?
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

Угу. Типа самодельного канала. и вот хочу такой простенький, но в меру стабильный алгоритм. А с такими характеристиками можно передавать звук в телефонном качестве -- 8бит на 8кГц.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

надо отдельную тему создать
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Не выдумывай чепуху. UART-ы в контроллерах могут работать в 9-битном режиме. 9-й бит можно использовать в качестве выбора что именно передается в 8-битах, идентификатор или данные.
Если надо вписаться во временные рамки, то достаточно повысить скорость передачи. Зато получишь аппаратную реализацию, на которую не надо будет тратить ресурсы. Программная реализация вашего протокола потребует очень сложной обработки, и скорей всего потребуется повысить тактовую частоту и "не дышать" чтобы все работало без сбоев.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

ИМХО, передать за 125мкс какие-то 16 бит это вполне реально. Более чем. Тем более при тактовой 8МГц.
А кроме как передча/приём у МК будет очень мало задач. Типа опросить датчик, или вывести ШИМ с неким коэффициентом. И всё.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение 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
} 
Изображение
Вложения
isr.png
(89.99 КБ) 633 скачивания
Ставим плюсы: )
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение 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
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение А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
}
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

Уууууууууууу. Вы хоть комментов побольше ставьте. Я ж не догоняю половину. Но всем огромное спасибо.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Аlex писал(а):А если так попробовать ?
так 4.56мкс :)) только пакет то извне надо задавать) и мне кажется вариант akl тут несомненно лидер по скорости.
Ставим плюсы: )
kLeR1k
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт май 13, 2014 19:22:27
Откуда: г. Сургут

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

Сообщение 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;
}

В симуляции увеличение скважности происходит очень медленно. Может стоит ещё больше увеличить т.к. процесс увеличения скважности происходит очень быстро в реальности?
Извиняюсь за, возможно, глупые вопросы, но знаний в этой области не так много, а на примере проще понять как это работает... Осциллографа, способного отобразить сигнал ШИМа, нет, к сожалению...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

kLeR1k писал(а):В симуляции увеличение скважности происходит очень медленно.

99% что симуляция у вас идет не в реальном времени, о чем протеус вам сообщает в окне сообщений. Так что скорость изменения скважности нужно соотносить с таймером (строчка внизу экрана), а не по реальному времени.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
kLeR1k
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт май 13, 2014 19:22:27
Откуда: г. Сургут

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

Сообщение kLeR1k »

Engineer_Keen писал(а):99% что симуляция у вас идет не в реальном времени, о чем протеус вам сообщает в окне сообщений. Так что скорость изменения скважности нужно соотносить с таймером (строчка внизу экрана), а не по реальному времени.

Честно говоря знал, что симуляция не в реальном времени идёт, а на что ориентироваться не знал. Спасибо за подсказку! Действительно, увеличение скважности до максимума занимает по счетчику внизу экрана 0,5 секунды. Наверное маловато для того, что бы заметить плавное увеличение яркости свечения светодиода...
Update:
Подобрал значение переменной так, что по ориентиру протеуса заполнение скважности занимает 1,5 секунды. В железе - всё как было, так и осталось :evil:
Аватара пользователя
RedBull
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн фев 18, 2013 01:10:21

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

Сообщение RedBull »

Не могу разобраться с интерфейсом датчика холла. Опишите пожалуйста состояние настроек для данного режима
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

RedBull писал(а):Не могу разобраться с интерфейсом датчика холла.

А какой у него интерфейс? :shock:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
oleg63m
Друг Кота
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья
Контактная информация:

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

Сообщение oleg63m »

насколько я понимаю, там либо логика, либо обычный анальный выход, а ля переменный резистор
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

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

Сообщение Starmarik »

Привет всем радиолюбителям :) может у кого есть прошивка или исходник суточного таймера для avr, или может кто видел где на просторах инета, прошу послать в том направлении :)))) В общем, нужна прошивка, которая бы включала свет в аквариуме на 8 часов, и раз в сутки влючала на 5 секунд кормушку автоматическую. Кто может чем помочь, прошу откликнутся :))) А может кто согласится написать безвозмездно? :))))) Прошу не сочесть за наглость :)))
Аватара пользователя
ua1arn
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

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

Сообщение ua1arn »

Правьте под себя - это таймер на много-много часов.
Вложения
timeratm.zip
(231.12 КБ) 177 скачиваний
Аватара пользователя
Саша Леськив
Встал на лапы
Сообщения: 116
Зарегистрирован: Пт сен 07, 2012 19:38:09
Откуда: Белая Церковь, Украина

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

Сообщение Саша Леськив »

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

Вернуться в «Разные вопросы по МК»