реклама на сайте
подробности

 
 
> Прочитать передачу
micronano
сообщение Aug 2 2011, 09:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Добрый день!

Кто-нибудь может подсказать как прочитать передачу некоего интерфейса?
Известна его его скорость и структура.

Пытаюсь по первому биту запускать таймер, и с частотой раз в бит увожу контроллер в прерывание, где считываю значение порта.
Но огромное количество ошибок самого разного плана: сдвиг, чтение 1 вместо 0, чтение 0 вместо 1... Не знаю что делать.

Сигнал прямоугольный, так что дело к коде.

Есть программные алгоритмы приема?

Сообщение отредактировал micronano - Aug 2 2011, 09:58
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 43)
Непомнящий Евген...
сообщение Aug 2 2011, 09:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



По идее надо читать несколько раз за бит, а уровень бита определять по большему числу выборок (или требовать чтобы все выборки были одинаковыми)

А так ничего особо сложного вроде бы нету...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 2 2011, 10:01
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(micronano @ Aug 2 2011, 15:50) *
Пытаюсь по первому биту запускать таймер, и с частотой раз в бит увожу контроллер в прерывание, где считываю значение порта.


По первому фронту(или спаду) надо запускать на пол-бита, чтоб попасть в середину. А уже все последующие - через целый бит.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 2 2011, 10:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(micronano @ Aug 2 2011, 12:50) *
Кто-нибудь может подсказать как прочитать передачу некоего интерфейса?


Формат посылки известен ? Если совершенно точно известно, как устроены посылки, известна скорость, на которой работает интерфейс, и проч., то выберите подходящий аппаратный интерфейс, входящий в состав вашего МК, и на нем все сделайте. Если такого итерфейса у вашего МК нет, то поищите МК с необходимым вам интерфейсом. Если такого МК нет, то придется имитировать этот интерфейс программно (если интерфейс медленный) или используя ПЛИС (если он быстрый). А если формат посылки точно не известен, то придется захватывать посылки, например, хорошим осциллографом или лог. анализатором, а затем изучать их вручную.

P.S. Из вашего сообщения ничего нельзя понять. Неужели так трудно изложить свои мысли яснее ?
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 10:07
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Непомнящий Евгений
Да, спасибо, как вариант.

AHTOXA, это не влияет. и фо фронту пробовал, и в середине бита.

kovigor, если бы такой интерфейс бы был, я бы не пытался прочитать его столь извращенно.
И если бы был такой МК с таким интерфейсом, то я бы взял его.
Формат известен!

Цитата
Есть программные алгоритмы приема?
- я пришел к тому же выводу, что и вы, и сразу задал такой вопрос! =) Минуя очевидные вещи.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 2 2011, 10:11
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(micronano @ Aug 2 2011, 13:07) *
Формат известен!

- я пришел к тому же выводу, что и вы, и сразу задал такой вопрос! =) Минуя очевидные вещи.


Тогда и говорить не о чем - делайте программно, если скорость позволяет. А алгоритм зависи от того, что это за интерфейс. Одно дело - UART, и совсем другое - I2C или SPI ...
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Aug 2 2011, 10:17
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата
Но огромное количество ошибок самого разного плана: сдвиг, чтение 1 вместо 0, чтение 0 вместо 1... Не знаю что делать.


Выдайте на ножку момент выборки, а на другую - ее результат, сравните это с реальным входом.
Возможно у вас какая-то ошибка в программе, и вы не в то время проверяете порт...
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 10:21
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Вот я и прошу подсказать существующие алгоритмы!! Т.к. мне нужно сделать это программно! И это не UART, не I2С, не SPI!!!
kovigor, вы не чувствуете, что ничем не помогли, а просто проконстатировали то, что я и так уже написал? Не можете помочь алгоритмом - не отвечайте, можете - я буду вам очень благодарен!

Непомнящий Евгений
Цитата
Выдайте на ножку момент выборки, а на другую - ее результат, сравните это с реальным входом.
Возможно у вас какая-то ошибка в программе, и вы не в то время проверяете порт...

выдайте на ножку момент выборки - не понял)
на другую - её результат - тоже не понял =)
И что такое реальных вход?

что есть что?=)

Ммм сложно представить, как прерывание по сравнению может считывать не в тот момент...=)
Или я что- то не понимаю..
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Aug 2 2011, 10:25
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



В момент, когда читаете вход, инвертируйте некоторый выход МК.
Потом берете осциллограф и сравниваете реальный входной сигнал и моменты его считывания вашей программой.
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 10:29
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Теперь понял.
Цитата
Потом берете осциллограф и сравниваете реальный входной сигнал и моменты его считывания вашей программой.

А что мне это даст? ошибки от этого никуда не денутся и их причину я не пойму... Я увижу тоже самое, что и видел до этого! =)
Просто например бывает что вместо сообщения (порядка 60 бит выборки), мне приходят 60 "1"... (состояние на линии без передачи - "1")

Логика окончания приема сообщения - пауза в 50 бит перед следующим сообщением, состоящая из "1"

Сообщение отредактировал micronano - Aug 2 2011, 10:31
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Aug 2 2011, 10:32
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Ну как что даст - отсечете какие-то виды ошибок...

Потом еще что-нить попробуете, еще какие-то ошибки отсечете. И так до победного

Возможно у вас не в те моменты срабатывает прерывание - например другие прерывания слишком тяжелые. Или просто в программе ошибка. Да мало-ли что может быть...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 2 2011, 10:33
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Даже если битовая скорость известна, то никто не обещал что тактовая частота приёмника точно совпадает с тактовой частотой передатчика.
Со временем неизбежно накапливается ошибка.
Нужно подстраивать свою скорость приёма под скорость следования битов в принимаемом сигнале.
В зависимости от способа кодирования это можно делать по-разному, обычно это некая разновидность цифровой ФАПЧ, которая синхронизируется по фронтам сигнала.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 10:36
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Других прерываний нет =)
В программе кроме считывания передачи и отправки пакетов на компорт, ничего нет...

Ошибки конечно есть, но какого плана...

Цитата
Даже если битовая скорость известна, то никто не обещал что что тактовая частота приёмника точно совпадает с тактовой частотой передатчика.
Со временем неизбежно накапливается ошибка.
Нужно подстраивать свою скорость прима под скорость следования битов в принимаемом сигнале.
В зависимости от способа кодирования это можно делать по-разному, обычно это некая разновидность цифровой ФАПЧ которая синхронизируется по фронтам сигнала.


каждое сообщение (порядка 60 бит), таймер запускаю заново по фронту первого бита, т.ч. врятли за 60 бит накапливается ошибка... Тем более что иногда (очень редко) приходит то, что надо!
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Aug 2 2011, 10:36
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Сделайте без прерываний ради интереса.

На самом деле все должно быть очень просто. Вероятно какая-то тупая ошибка sm.gif

Приведите здесь код, если его немного. Может кто-нить сразу увидит в чем дело
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 10:43
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
#include "uart_i2c.h"

volatile int i = 0, pause = 0, uart = 0; // i - length of telegramm, pause - length of pause after telegramm
char s[64];

#define F_CPU 1843200L

// I/O ports init
void init_io_ports()
{ DDRA =(1<< DDA0)|(1<< DDA1)|(1<< DDA2)|(1<< DDA3)|(1<< DDA4)|(1<< DDA5)|(1<< DDA6)|(1<< DDA7);
DDRB =(1<< DDB0)|(1<< DDB1)|(1<< DDB2)|(1<< DDB3)|(1<< DDB4)|(1<< DDB5)|(1<< DDB6)|(1<< DDB7);
DDRC =(0<< DDC0)|(0<< DDC1)|(1<< DDC2)|(1<< DDC3)|(1<< DDC4)|(1<< DDC5)|(1<< DDC6)|(1<< DDC7);
DDRD =(1<< DDD0)|(1<< DDD1)|(1<< DDD2)|(1<< DDD3)|(1<< DDD4)|(1<< DDD5)|(1<< DDD6)|(1<< DDD7);

PORTA =(0<< PA0)|(0<< PA1)|(0<< PA2)|(0<< PA3)|(0<< PA4)|(0<< PA5)|(0<< PA6)|(0<< PA7);
PORTB =(0<< PB0)|(0<< PB1)|(0<< PB2)|(0<< PB3)|(0<< PB4)|(0<< PB5)|(0<< PB6)|(0<< PB7);
PORTC =(1<< PC0)|(1<< PC1)|(0<< PC2)|(0<< PC3)|(0<< PC4)|(0<< PC5)|(0<< PC6)|(0<< PC7);
PORTD =(0<< PD0)|(0<< PD1)|(0<< PD2)|(0<< PD3)|(0<< PD4)|(0<< PD5)|(0<< PD6)|(0<< PD7);
}


//************************************* Timer ****************************************************
// Timer0 8bit init, no prescaler, CTC mode
void init_timer()
{ TCCR0 = (0<< FOC0)|(0<< WGM00)|(0<< COM01)|(0<< COM00)|(1<< WGM01)|(0<< CS02)|(0<< CS01)|(1<< CS00);
TIMSK = (1<< OCIE0); // enable interrupts
sei(); // enable interrupts
SREG = (1<< 7); // enable interrupts
OCR0 = 192; // 1.8432Mhz of Xtal / 9600Hz = 192
}

//******************************** Interrupt Vector ************************************************
ISR(TIMER0_COMP_vect) // interrupt vector
{
if (i <= 64) // while telegramm is ON 64
{

if((PINC & (1 << PC0)) == 1)
{s[i] = '0';} // write "0" in s[i]
else
{s[i] = '1';} // write "1" in s[i]
i++;
}

else
{
if ((PINC & (1 << PC0)) == 0) //waiting the end of pause
{pause++;}
else
{pause = 0;}
}

}

//**************************************** MAIN ****************************************************
int main(void)
{
init_io_ports();
init_uart();

while (1)
{
i = 0;
pause = 0;
uart = 0;
if((PINC & (1 << PC0)) == 1) // waiting first "0" in Transmition on PC0

{
_delay_ms(0.010);
init_timer();
TCCR2 = 254;
while (pause <= 50) // pause after telegramm = 50 bit
{}
TCCR2 = 0; // stop timer TCNT2
putstr(s);
}

}


return 0;
}

Цитата
Сделайте без прерываний ради интереса.

На самом деле все должно быть очень просто. Вероятно какая-то тупая ошибка sm.gif

Приведите здесь код, если его немного. Может кто-нить сразу увидит в чем дело

без прерываний как?

Глупы ошибки это да... =)

Сообщение отредактировал micronano - Aug 2 2011, 10:44
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 2 2011, 11:21
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(micronano @ Aug 2 2011, 13:21) *
kovigor, вы не чувствуете, что ничем не помогли, а просто проконстатировали то, что я и так уже написал? Не можете помочь алгоритмом - не отвечайте, можете - я буду вам очень благодарен!


Я чувствую, что вы не желаете описать вашу проблему человеческим языком. Что вам нужно ? Принимать биты ? Принимайте по прерыванию (если они следуют один за другим не очень быстро. Только учтите, что компилятор при вхождении в обработчик складывает регистры в стек, а это съедает львиную долю быстродействия. Или вам надо сложить биты в слова ? Тогда поможет обычный цифровой автомат. конкретный ответ дается на конкретный вопрос. Или вы думаете, что я могу читать мысли ?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 11:44
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Не понятго

Цитата
Сигнал прямоугольный,
меандр , что ли?

Цитата
Просто например бывает ,что вместо сообщения (порядка 60 бит выборки), мне приходят 60 . "1"... (состояние на линии без передачи - "1")


Точки и запятые в фразе расставил я. Но , что такое вместо 60 приходят 60 , я не расшифровал

Зато понятно, что можно спокойно использовать прерывание INTX для принятия посылки


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 2 2011, 11:49
Сообщение #18


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Пишут Вам пишут, что надо дождаться фронта, сдвинуть моменты чтения на полпериода и смело принимать, а Вы так и не хотите... Ну-ну laughing.gif
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 11:54
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



kovigor, да, мне нужно принимать биты..

ILYAUL, а не надо было расставлять точки, там все нормально было!=) Вместо сообщения, в котором "0" и "1" должно быть примерно пополам, мне приходит сообщение из одних только "1".
Меандр - прямоугольный сигнал со скважностью 2. Прямоугольный =НЕ пилообразный, НЕ синусоида и т.д.

Цитата
Зато понятно, что можно спокойно использовать прерывание INTX для принятия посылки

Это что за прерывание? Можно поподробнее, пожалуйста?

_Pasha, я на это уже ответил, что я так уже пробовал! ничего не меняется, абсолютно! К сожалению. Я экспериментировал с задержками как только можно! =(

Сообщение отредактировал micronano - Aug 2 2011, 11:59
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 11:58
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(micronano @ Aug 2 2011, 15:54) *
ILYAUL, а не надо было расставлять точки, там все нормально было!=) Вместо сообщения, в котором "0" и "1" должно быть примерно пополам, мне приходит сообщение из одних только "1".
Меандр - прямоугольный сигнал со скважностью 2. Прямоугольный =НЕ пилообразный, НЕ синусоида и т.д

Т.е слово импульсный Вам не знакомо, будем знать


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 2 2011, 12:14
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



ILYAUL, считайте что хотите.
Чем вам не понравилось слово прямоугольный, не понимаю.

Сообщение отредактировал micronano - Aug 2 2011, 12:17
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 17:20
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Нарисуйте, как у вас выглядит лог. "1" и лог. "0", это для того чтобы представлять как они кодируются.
Если сигнал медленный, настройте внешнее прерывание на изменение уровня.
В прерывании запускаете таймер и сохраняете (в массив) длительность импульсов.
Если скорости хватает, походу и декодируете, если нет, декодированием занимаетесь уже приняв всю посылку.

Сообщение отредактировал Marian - Aug 2 2011, 17:24
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 17:31
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 21:20) *
В прерывании запускаете таймер и сохраняете (в массив) длительность импульсов.

Это лишнее

Цитата
Чем вам не понравилось слово прямоугольный, не понимаю.

В электронике есть чёткое определение таких сигналов - импульсный сигнал


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 17:35
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(ILYAUL @ Aug 2 2011, 20:31) *
Это лишнее


Я предложил рабочий алгоритм, а выкинув его часть он работать не будет.

"Слово из песни не выкинешь"

Сообщение отредактировал Marian - Aug 2 2011, 17:40
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 17:44
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 21:35) *
А вы что, знаете какая скорость и какая форма сигнала ?

На скорость - вобщем-то наплевать , лишь бы несовпадала с частотой процессора , а форма - прямоугольная. См. начало топика.
Но Вы на верном пути- осталось написать обработчик прерывания, но надо ещё чуть-чуть и поймёте почему это лишнее
Цитата
В прерывании запускаете таймер и сохраняете (в массив) длительность импульсов.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 18:54
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(ILYAUL @ Aug 2 2011, 20:44) *
На скорость - вобщем-то наплевать , лишь бы несовпадала с частотой процессора , а форма - прямоугольная. См. начало топика.
Но Вы на верном пути- осталось написать обработчик прерывания, но надо ещё чуть-чуть и поймёте почему это лишнее

Как раз вся загвоздка в скорости.
Скажем так, чтобы принять сигнал с частотой 100 KHz, проц должен работать на частоте от четырех до десяти раз выше.(если писать на ассемблере, чуть пониже)

Если в прерывании не заниматься декодированием, то есть возможность принимать посылку с долее высокой частотой следования импульсов.




Цитата(ILYAUL @ Aug 2 2011, 20:44) *
а форма - прямоугольная.


Такое название мне тоже не нравиться.
Любой цифровой сигнал будет иметь импульсы прямоугольной формы.

Сигнал прямоугольной формы мне представляется(похоже и другим участникам форума) меандр определенной частоты с заполнением столько та процентов.
Все остальное импульсный сигнал.

Цитата(micronano @ Aug 2 2011, 13:36) *
каждое сообщение (порядка 60 бит), таймер запускаю заново по фронту первого бита, т.ч. врятли за 60 бит накапливается ошибка... Тем более что иногда (очень редко) приходит то, что надо!

Вам, в 12 посте подсказали, что необходима синхронизация.

Посмотрите http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%...%BB%D0%BE%D0%B2

Обратите внимание на Манчестерское кодирование.

Сообщение отредактировал Marian - Aug 2 2011, 18:56
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 18:57
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 22:31) *
Как раз вся загвоздка в скорости.
Скажем так, чтобы принять сигнал с частотой 100 KHz, проц должен работать на частоте от четырех до десяти раз выше.(если писать на ассемблере, чуть пониже)

Всё значительно проще ,чем запускать счётчик и что то считать - в прерывании по INITX - достаточно отслеживать фронты- (т.к. из полезного , что нам сообщил топикстартер , это то что начальный уровень лог. 1) - поэтому ждём прерывание по спаду, в прерывании записываем в память zero , и переключаем на прерывание по фронту , получили пишем лог 1 , переключаем на спад фронта и т.д. - Скорость == количеству команд используемых в обработке прерывания , естественно на asm будет выше , т.к. в стек загонять ничего не требуется, если идёт только прием данных.

Но всё это при условии практически идеальной линии - или откуда там этот сигнал поступает


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 19:02
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(ILYAUL @ Aug 2 2011, 21:57) *
Всё значительно проще ,чем запускать счётчик и что то считать - в прерывании по INITX - достаточно отслеживать фронты- (т.к. из полезного , что нам сообщил топикстартер , это то что начальный уровень лог. 1) - поэтому ждём прерывание по спаду, в прерывании записываем в память zero , и переключаем на прерывание по фронту , получили пишем лог 1 , переключаем на спад фронта и т.д. - Скорость == количеству команд используемых в обработке прерывания , естественно на asm будет выше , т.к. в стек загонять ничего не требуется, если идёт только прием данных.

Этот вариант без кодирования исходного сигнала, даже сигнал пультов радио аппаратуры кодированный.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 19:05
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 23:02) *
Этот вариант без кодирования исходного сигнала, даже сигнал пультов радио аппаратуры кодированный.

Кодированный не кодированный - об этом история умалчивает, главное, что прямоугольный , прерывания будут работать biggrin.gif

И ещё настораживает вот эта фраза из кода
Цитата
pause after telegramm


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 19:14
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(ILYAUL @ Aug 2 2011, 21:57) *
Скорость == количеству команд используемых в обработке прерывания

Это не соответствует действительности.
Скорее так :
"Скорость ==" частота проца делить на "количеству команд используемых в обработке прерывания "
Чем меньше команд в прерывании тем выше скорость.

Сообщение отредактировал Marian - Aug 2 2011, 19:16
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 19:14
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 23:14) *
Это не соответствует действительности.
Скорее так :
"Скорость ==" частота проца делить на "количеству команд используемых в обработке прерывания "

Конечно, конечно


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 19:19
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(ILYAUL @ Aug 2 2011, 22:05) *
И ещё настораживает вот эта фраза из кода

Что тут не понятного, пауза после посылки.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 19:28
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 23:19) *
Что тут не понятного, пауза после посылки.

Там слово телеграмма - а это накладывает определённые параметры на протокол передачи и и обычно это USART


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 2 2011, 19:33
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Посмотрите Отрисовка сигнала.
Создавалась для отрисовки сигнала пультов, отрисует и цифровой сигнал, если подойдет по скорости,
Есть проект для протеуса, если интересует могу выложить.

Сообщение отредактировал Marian - Aug 2 2011, 19:34
Go to the top of the page
 
+Quote Post
нечитатель
сообщение Aug 2 2011, 19:41
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032



Цитата(micronano @ Aug 2 2011, 13:50) *
по первому биту запускать таймер, и с частотой раз в бит увожу контроллер в прерывание, где считываю значение порта.
Но огромное количество ошибок самого разного плана: сдвиг, чтение 1 вместо 0, чтение 0 вместо 1
На всякий случай вспомнил бы о картинках из описания к микросхеме типа AVR *. Которые в разделе про уарт. В смысле асинхронный. Которые переопубликовывать вручную уже от своего имени представляется нецелесообразным.
Или много букв про не понял что здесь пишут.

* особенно когда даже название раздела выбрано...

Сообщение отредактировал нечитатель - Aug 2 2011, 19:45
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 19:52
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Marian @ Aug 2 2011, 23:33) *
Посмотрите Отрисовка сигнала.
Создавалась для отрисовки сигнала пультов, отрисует и цифровой сигнал, если подойдет по скорости,
Есть проект для протеуса, если интересует могу выложить.

А почему бы и нет , положите вот сюда:
http://electronix.ru/forum/index.php?showtopic=10934
Вдруг и в правду кому-то понадобится , а по поводу этого топика , при таком "количестве "полезной" информации от топикстартера, мы можем только гадать


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 2 2011, 20:37
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(micronano @ Aug 2 2011, 13:36) *
каждое сообщение (порядка 60 бит)

Похоже, Вы мучаете интерфейс какой-нить микросхемы радио управления.

Есть простой способ - используете прерывание capture и складываете отсчеты таймера в буфер. Индекс буфера обнуляется при отсутствии фронтов в течение определенного времени.
Потом, пройдясь по буферу с начала до конца, можно спокойно проанализировать, что же там передавалось.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
micronano
сообщение Aug 3 2011, 08:58
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Marian, ILYAUL, спасибо.
Попробую сделать на прерываниях по фронту/спаду и записью длительности...

Dog Pawlowa, нет, это не интерфейс какой-нить микросхемы радио управления. =)
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 3 2011, 09:13
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(micronano @ Aug 2 2011, 15:14) *
ILYAUL, считайте что хотите.
Чем вам не понравилось слово прямоугольный, не понимаю.

Наверное тем, что когда речь о "0" и "1" или о протоколе, они все прямоугольные... Это не информативно.
Надо знать как передается эти "0" и "1". Это может быть просто уровень, это может быть скважность, это может быть период(частота), это может быть что-то еще. Вариантов там воз и маленькая тележка.
И вообще, что Вы знаете о сигнале кроме того, что он прямоугольный?
ЗЫ. А вообще, самый разумный был совет - используйте запоминающий осциллограф или логический анализатор и внимательно рассмотрите сам сигнал. Пока половина советов тут сводилась к попытке сделать простейший лог. анализатор подручными средствами...
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 3 2011, 14:39
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(Dog Pawlowa @ Aug 2 2011, 23:37) *
Есть простой способ - используете прерывание capture и складываете отсчеты таймера в буфер.


Вроде capture работает по фронту импульса.
Измерить длительность лог."0" так не получится.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 4 2011, 17:06
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
Вроде capture работает по фронту импульса.

Работает по обоим фронтам (какой укажешь и можно менять по ходу дела) и по результату компаратора. Измерить длительность нуля - очень просто. Ловишь падающий, меняешь в прерывании каптура на нарастающий и запоминаешь текущее. В следующем прерывании вычитаешь текущее от запомненного = измерили.
Плюс можно компарами ставить ограничения на допустимые пределы длительности нуля/импульса.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 4 2011, 17:31
Сообщение #42


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(ArtemKAD @ Aug 4 2011, 21:06) *
....и запоминаешь текущее. В следующем прерывании вычитаешь текущее от запомненного = измерили.

А надо ли ? По условию задания ему нужно только
Цитата
Кто-нибудь может подсказать как прочитать передачу некоего интерфейса

К тому же
Цитата
Известна его его скорость и структура

Насчёт длительности импульсов ничего не сказано. И даже если , что-то считать , то только не в прерывании. К тому же по каждому прерыванию , можно просто перезапускать счётчик, предворительно считав предыдущие данные, которые можно потом сохранить выйдя из прерывания. И считать полученные данные до следующего прерывания.
Но неизвестны ни скорость передачи ни структура сигнала- не озвучены. А так можно было прикинуть программу обработки. Но и проц не известен.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Aug 4 2011, 20:57
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(micronano @ Aug 2 2011, 12:50) *
как прочитать передачу некоего интерфейса?

Цитата(micronano @ Aug 2 2011, 13:43) *
#include <avr/io.h>
.
.
.
Глупы ошибки это да... =)

Такие вещи и на СИ! прям садомазо какоето biggrin.gif
сорри за офтоп
Go to the top of the page
 
+Quote Post
ASZ
сообщение Aug 5 2011, 11:27
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042



В документации на любой микроконтроллер AVR (раз уж эта ветка в МК AVR), содержащий UART, очень детально расписан принцип детектирования последовательного сигнала.
ИМХО, к этому добавить нечего.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01822 секунд с 7
ELECTRONIX ©2004-2016