Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
timym122
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 15
1

ATMega128 + ADM2483BRWZ = Ничего не слыша по RS485

17.08.2011, 11:35. Просмотров 5450. Ответов 5
Метки нет (Все метки)

Много изучал в гугле, но ничего не нашел :(

Суть просто отправляю пока на комп через преобразователь на RS232 байты. Мега отправляет, во всяком случае функцию отправки выполняла, ставил индикацию перед выполнением send() и после. Но на комп ничего не пришло.

Кварц стоит 12 мгц, включено удвоение для ассинхронного режима, из формулы рассчета скорости (UBRR=1249) сейчас установлено 1200бит\с - отклонение 0%. Но на компе пусто :(

А и еще как подключено: PORTD.1 на PV, PORTD.2 на TxD, PORTD.3 на RxD, PORTD.4 на RE/DE

Кто что подскажет?

Код
#include <mega128.h>
#include <delay.h>

#define btn1 PINC.4;
#define btn2 PINC.5;
#define btn3 PINC.6;
#define btn4 PINC.7;

#define Ott_Stop PORTF=0x00
#define UDRE 5
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define SENDED (1<<6)

char baud=1249;

void init(void)
{
// Input/Output Ports initiotyzotion
// Port A initiotyzotion
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initiotyzotion
PORTB=0x08;
DDRB=0xb7;
// Port C initiotyzotion
PORTC=0xFE;
DDRC=0x0F;
// Port D initiotyzotion
PORTD=0x00;
DDRD=0xF8;
// Port E initiotyzotion
PORTE=0x00;
DDRE=0x00;
// Port F initiotyzotion
PORTF=0x00;
DDRF=0xFF;
// Port G initiotyzotion
// Func0=In Func1=In Func2=In Func3=In Func4=In
// State0=T State1=T State2=T State3=T State4=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Dysconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Dyscon.
// OC1B output: Dyscon.
// OC1C output: Dyscon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Dysconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// OC3A output: Dyscon.
// OC3B output: Dyscon.
// OC3C output: Dyscon.
TCCR3A=0x00;//ok
TCCR3B=0x00;//ok
TCNT3H=0x00;//ok
TCNT3L=0x00;//ok
OCR3AH=0x00;//11110
OCR3AL=0x00;//11110
OCR3BH=0x00;//ok
OCR3BL=0x00;//ok
OCR3CH=0x00;//ok
OCR3CL=0x00;//ok
// External Ymtirrupt(s) initiotyzotion
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion
TIMSK=0x00;//ok
ETIMSK=0x00;//ok
// USORT1 initiotyzotion
UCSR1A=0x02;
UCSR1B=0x98;
UCSR1C=0x86;
UBRR1L=0x9b;
UBRR1H=0x00;
// Analog Comparator initiotyzotion
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// SPI initiotyzotion
SPCR=0x53;//D3 - i?a?uaaiey ?ac?aoaiu
SPSR=0x00;
}
//end

void init_usart(void)
{
#asm("cli");
UCSR1A=0x02;
UCSR1B=0x88;
UCSR1C=0x86;
UBRR1H=0;
UBRR1L=baud;
//        #asm("sei");
}

void send(char out)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
/* Iiiauaiea aaiiuo a aooa?, ioi?aaea aaiiuo */
UDR1=out;
while ((UCSR1A & SENDED)==0);
}

void main(void) {
#asm("cli");
init();
Video_buf[0]=b;
Video_buf[1]=b;
Video_buf[2]=b;
Video_buf[3]=b;
Video_buf[4]=b;
Video_buf[5]=b;
dysp_out();
Sl_Bute_Wr(SlByte);
delay_ms(1500);
init_usart();
PORTD.4=1;
while(1)
{
send(0xff);
send(0x55);
send(0x2b);
send(0x2c);
send(0x03);
delay_ms(100);
}
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2011, 11:35
Ответы с готовыми решениями:

Перевести на формальный язык (обязательно указываете универсум): «Ничего не вижу, ничего не слышу, ничего
Перевести на формальный язык (обязательно указываете универсум): «Ничего не вижу, ничего не слышу,...

Как называется функция которая ничего не принимает и ничего не отдаёт?
Как называется функция которая не чего не принимает и не чего не отдаёт? Пожалуйста приведите...

rs485
Приветствую! Стоит задача по управлению сервой. Она управляется через канал связи RS485 по COM...

RS485 + Компьютер
Прошу совета как организовать передачу данных между ПК и контроллерами по RS485. Хочу использовать...

Работа с RS485
Всем привет. Подскажите, пожалуйста, как правильно работать в режиме RS485 (half-duplex). UART...

5
rot20
0 / 0 / 0
Регистрация: 05.02.2010
Сообщений: 167
17.08.2011, 18:16 2
[QUOTE="timym122"]Много изучал в гугле, но ничего не нашел :(

Суть просто отправляю пока на комп через преобразователь на RS232 байты. Мега отправляет, во всяком случае функцию отправки выполняла, ставил индикацию перед выполнением send() и после. Но на комп ничего не пришло.

Кварц стоит 12 мгц, включено удвоение для ассинхронного режима, из формулы рассчета скорости (UBRR=1249) сейчас установлено 1200бит\с - отклонение 0%. Но на компе пусто :(

А и еще как подключено: PORTD.1 на PV, PORTD.2 на TxD, PORTD.3 на RxD, PORTD.4 на RE/DE

Кто что подскажет?

Код
#include <mega128.h>
#include <delay.h>

#define btn1 PINC.4;
#define btn2 PINC.5;
#define btn3 PINC.6;
#define btn4 PINC.7;

#define Ott_Stop PORTF=0x00
#define UDRE 5
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define SENDED (1<<6)

char baud=1249;

void init(void)
{
// Input/Output Ports initiotyzotion
// Port A initiotyzotion
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initiotyzotion
PORTB=0x08;
DDRB=0xb7;
// Port C initiotyzotion
PORTC=0xFE;
DDRC=0x0F;
// Port D initiotyzotion
PORTD=0x00;
DDRD=0xF8;
// Port E initiotyzotion
PORTE=0x00;
DDRE=0x00;
// Port F initiotyzotion
PORTF=0x00;
DDRF=0xFF;
// Port G initiotyzotion
// Func0=In Func1=In Func2=In Func3=In Func4=In
// State0=T State1=T State2=T State3=T State4=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Dysconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Dyscon.
// OC1B output: Dyscon.
// OC1C output: Dyscon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Dysconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initiotyzotion
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// OC3A output: Dyscon.
// OC3B output: Dyscon.
// OC3C output: Dyscon.
TCCR3A=0x00;//ok
TCCR3B=0x00;//ok
TCNT3H=0x00;//ok
TCNT3L=0x00;//ok
OCR3AH=0x00;//11110
OCR3AL=0x00;//11110
OCR3BH=0x00;//ok
OCR3BL=0x00;//ok
OCR3CH=0x00;//ok
OCR3CL=0x00;//ok
// External Ymtirrupt(s) initiotyzotion
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion
TIMSK=0x00;//ok
ETIMSK=0x00;//ok
// USORT1 initiotyzotion
UCSR1A=0x02;
UCSR1B=0x98;
UCSR1C=0x86;
UBRR1L=0x9b;
UBRR1H=0x00;
// Analog Comparator initiotyzotion
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// SPI initiotyzotion
SPCR=0x53;//D3 - i?a?uaaiey ?ac?aoaiu
SPSR=0x00;
}
//end

void init_usart(void)
{
#asm("cli");
UCSR1A=0x02;
UCSR1B=0x88;
UCSR1C=0x86;
UBRR1H=0;
UBRR1L=baud;
//        #asm("sei");
}

void send(char out)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
/* Iiiauaiea aaiiuo a aooa?, ioi?aaea aaiiuo */
UDR1=out;
while ((UCSR1A & SENDED)==0);
}

void main(void) {
#asm("cli");
init();
Video_buf[0]=b;
Video_buf[1]=b;
Video_buf[2]=b;
Video_buf[3]=b;
Video_buf[4]=b;
Video_buf[5]=b;
dysp_out();
Sl_Bute_Wr(SlByte);
delay_ms(1500);
init_usart();
PORTD.4=1;
while(1)
{
send(0xff);
send(0x55);
send(0x2b);
send(0x2c);
send(0x03);
delay_ms(100);
}
}
У меня стоит ADM485 и Miko128. Работает замечательно. Нужно разобраться тебе микросхема ADM настроена на прием или на передачу??? DE и REинверсия надо соединить, если на землю эту ногу, - то прием. Если к пяти вольтам подтянуть, то на передачу. И все.
0
timym122
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 15
17.08.2011, 18:29 3
Цитата Сообщение от rot20
DE и REинверсия надо соединить, если на землю эту ногу, - то прием. Если к пяти вольтам подтянуть, то на передачу. И все.
Перед отправкой я выставляю высокий уровень: PORTD.4=1; т.е. RE disable, DE enable
0
rot20
0 / 0 / 0
Регистрация: 05.02.2010
Сообщений: 167
17.08.2011, 19:42 4
Цитата Сообщение от timym122
Цитата Сообщение от rot20
DE и REинверсия надо соединить, если на землю эту ногу, - то прием. Если к пяти вольтам подтянуть, то на передачу. И все.
Перед отправкой я выставляю высокий уровень: PORTD.4=1; т.е. RE disable, DE enable

Что-то не понял как ты кем, куда и через чего отправляешь данные и как ты их принимаешь. Как-то замудрено написал ты. Схему хоть выложи своего подсоединения.
Проверь в протеусе идут ли с меги данные по USORT.
0
timym122
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 15
22.08.2011, 14:25 5
Кое какое решение нашел.

Взяв осилограф начал смотреть что уходит на ADM

А и еще как подключено: PORTD.1 на PV, PORTD.2 на TxD, PORTD.3 на RxD, PORTD.4 на RE/DE
И из даташита узнав про PV я начал понимать, что на него должен идти высокий уровень. Начал выставлять PORTD.1=1; но осцилограф прыгал только на 1 вольт вместо 5. Кинул резистор на питание и на ножку PV и пошли мои пакеты. Функция работает из даташита, теперь буду описывать протокол. Спасибо тем кто отметился в теме.
0
ptsyst
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 287
22.08.2011, 20:48 6
На
http://www.hoelscher-hi.de/hendrik/english/analyzer.htm
есть реализации приёма передачи по RS-485 для управления световыми устройствами DMX
на С и ассемблере
но на скорости 250 кбит - стандарт DMX
Туды/Сюды дёргается одной ножкой, так как эти входы управления комплетарны друг другу.
0
22.08.2011, 20:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2011, 20:48

Подключение RS485
Собрал преобразователь Rs232 -&gt; Rs485, и не знаю как его проверить. Подскажите как его можно...

Проблема с RS485
Доброго времени суток, уважаемые форумчане! Возникла проблема с передачей данных между двумя...

Rs485 из VB6 в C#
Здравствуйте. Есть прибор который общается с ПК через rs485 (оригинальная программа (рабочая)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru