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

 
 
> Прочитать передачу
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
 
Start new topic
Ответов
micronano
сообщение Aug 2 2011, 10:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
zombi
сообщение Aug 4 2011, 20:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


Местный
***

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



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

Сообщений в этой теме
- micronano   Прочитать передачу   Aug 2 2011, 09:50
- - Непомнящий Евгений   По идее надо читать несколько раз за бит, а уровен...   Aug 2 2011, 09:57
- - AHTOXA   Цитата(micronano @ Aug 2 2011, 15:50) Пыт...   Aug 2 2011, 10:01
- - kovigor   Цитата(micronano @ Aug 2 2011, 12:50) Кто...   Aug 2 2011, 10:02
- - micronano   Непомнящий Евгений Да, спасибо, как вариант. AHTO...   Aug 2 2011, 10:07
|- - kovigor   Цитата(micronano @ Aug 2 2011, 13:07) Фор...   Aug 2 2011, 10:11
- - Непомнящий Евгений   ЦитатаНо огромное количество ошибок самого разного...   Aug 2 2011, 10:17
- - micronano   Вот я и прошу подсказать существующие алгоритмы...   Aug 2 2011, 10:21
|- - kovigor   Цитата(micronano @ Aug 2 2011, 13:21) kov...   Aug 2 2011, 11:21
- - Непомнящий Евгений   В момент, когда читаете вход, инвертируйте некотор...   Aug 2 2011, 10:25
- - micronano   Теперь понял. ЦитатаПотом берете осциллограф и сра...   Aug 2 2011, 10:29
- - Непомнящий Евгений   Ну как что даст - отсечете какие-то виды ошибок......   Aug 2 2011, 10:32
- - SSerge   Даже если битовая скорость известна, то никто не о...   Aug 2 2011, 10:33
- - micronano   Других прерываний нет =) В программе кроме считыва...   Aug 2 2011, 10:36
|- - Dog Pawlowa   Цитата(micronano @ Aug 2 2011, 13:36) каж...   Aug 2 2011, 20:37
|- - Marian   Цитата(Dog Pawlowa @ Aug 2 2011, 23:37) Е...   Aug 3 2011, 14:39
- - Непомнящий Евгений   Сделайте без прерываний ради интереса. На самом д...   Aug 2 2011, 10:36
- - ILYAUL   Не понятго ЦитатаСигнал прямоугольный, меандр , ч...   Aug 2 2011, 11:44
- - _Pasha   Пишут Вам пишут, что надо дождаться фронта, сдвину...   Aug 2 2011, 11:49
- - micronano   kovigor, да, мне нужно принимать биты.. ILYAUL, а...   Aug 2 2011, 11:54
|- - ILYAUL   Цитата(micronano @ Aug 2 2011, 15:54) ILY...   Aug 2 2011, 11:58
- - micronano   ILYAUL, считайте что хотите. Чем вам не понравилос...   Aug 2 2011, 12:14
|- - ArtemKAD   Цитата(micronano @ Aug 2 2011, 15:14) ILY...   Aug 3 2011, 09:13
- - Marian   Нарисуйте, как у вас выглядит лог. "1" и...   Aug 2 2011, 17:20
|- - ILYAUL   Цитата(Marian @ Aug 2 2011, 21:20) В прер...   Aug 2 2011, 17:31
|- - Marian   Цитата(ILYAUL @ Aug 2 2011, 20:31) Это ли...   Aug 2 2011, 17:35
|- - ILYAUL   Цитата(Marian @ Aug 2 2011, 21:35) А вы ч...   Aug 2 2011, 17:44
|- - Marian   Цитата(ILYAUL @ Aug 2 2011, 20:44) На ско...   Aug 2 2011, 18:54
|- - ILYAUL   Цитата(Marian @ Aug 2 2011, 22:31) Как ра...   Aug 2 2011, 18:57
|- - Marian   Цитата(ILYAUL @ Aug 2 2011, 21:57) Всё зн...   Aug 2 2011, 19:02
||- - ILYAUL   Цитата(Marian @ Aug 2 2011, 23:02) Этот в...   Aug 2 2011, 19:05
||- - Marian   Цитата(ILYAUL @ Aug 2 2011, 22:05) И ещё ...   Aug 2 2011, 19:19
||- - ILYAUL   Цитата(Marian @ Aug 2 2011, 23:19) Что ту...   Aug 2 2011, 19:28
||- - Marian   Посмотрите Отрисовка сигнала. Создавалась для отри...   Aug 2 2011, 19:33
||- - ILYAUL   Цитата(Marian @ Aug 2 2011, 23:33) Посмот...   Aug 2 2011, 19:52
|- - Marian   Цитата(ILYAUL @ Aug 2 2011, 21:57) Скорос...   Aug 2 2011, 19:14
|- - ILYAUL   Цитата(Marian @ Aug 2 2011, 23:14) Это не...   Aug 2 2011, 19:14
- - нечитатель   Цитата(micronano @ Aug 2 2011, 13:50) по ...   Aug 2 2011, 19:41
- - micronano   Marian, ILYAUL, спасибо. Попробую сделать на преры...   Aug 3 2011, 08:58
- - ArtemKAD   ЦитатаВроде capture работает по фронту импульса. Р...   Aug 4 2011, 17:06
- - ILYAUL   Цитата(ArtemKAD @ Aug 4 2011, 21:06) .......   Aug 4 2011, 17:31


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

 


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


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