Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 14.03.2007, 18:21  
chipic128
Прописка
 
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
chipic128 на пути к лучшему
По умолчанию WIN AVR

есть код:
Код:
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹avr/signal.h›
#include ‹avr/delay.h› 

#define inp(p) (p)
#define outp(b,p) ((p)=(b))
#define pgm_read_byte(addr) *((__flash unsigned char*)(addr))
#define pgm_read_word(addr) *((__flash unsigned short*)(addr))
//typedef __flash char prog_char;

#define F_CPU            4000000      /* 4 МГц */
#define UART_BAUD_RATE      9600      /* 9600 бод */


#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)


typedef unsigned char  u08;
typedef          char  s08;
typedef unsigned short u16;
typedef          short s16;


/* uart globals */
static volatile u08 *uart_data_ptr;
static volatile u08 uart_counter;


SIGNAL(SIG_UART_TRANS)      
/* обработчик прерывания UART txd готов */
{
    uart_data_ptr++;

    if (--uart_counter)
        UDR = *uart_data_ptr;       /* записать байт в буфер данных */
}
SIGNAL(SIG_UART_RECV)      
/* обработчик прерывания "прием завершен" */
{
    register char led;

    led = UDR;        /* прочитать байт из буфера данных UART */
    PORTB = ~led;     /* отобразить полученный байт на светодиодах, */
			   /* подключенных к порту B */
}
void uart_send(u08 *buf, u08 size)
/* send buffer ‹buf› to uart */
{   
    if (!uart_counter) {
        /* записать первый байт в буфер данных */
        uart_data_ptr  = buf;
        uart_counter   = size;
        outp(*buf, UDR);
   }
}


void uart_init(void)
/* инициализировать UART */
{
    /* разрешить прерывания RxD/TxD */
    UCR = (1‹‹RXCIE)|(1‹‹TXCIE)|(1‹‹RXEN)|(1‹‹TXEN);       
    /* установить скорость */
    UBRR = (u08)UART_BAUD_SELECT;          
}
//---------Функция проверки нажатия кнопки----------- =14
unsigned char key (unsigned char s)  
{ if (bit_is_clear(PIND,s))  
  { _delay_loop_2(12500);  
    if (bit_is_clear(PINB,s))    
    { return (0); 
    }                 
  }    
  return (1);  
}                     


int main(void)
{
    DDRB = 0xff;      /* все линии порта В на вывод */
    PORTB = 0x00;     /* зажечь светодиоды */
	DDRB &= 0xDF;
    uart_init();
    sei();                 /* разрешить прерывания */

    while(1) {             /* бесконечный цикл */
		if (key(6))	
		{
		if (key(6)) while(1) {if (!key(6))break;  }
		uart_send("kuku", 5);
		}
		
	 uart_send("hallo", 6);
    }            
}
есть библиотеки, вроже все работает, но обясните мне, можт я недоганяю чегото,... вроде читал ДШ на 90S2313, но недоганяю структуру приема и отправки байта через УАРТ,
для отправки я так понял надо прописать в переменную UDR записать то что надо, но как запустить передачу, я непонимаю, зачем здесь прерывания на передачу даных, на прием - понятно - пришли даные - идет прерывание - "забирай свои даные", но вот как с передачей с контроллера на ПК - ... ???, обясните, пжалуста... для непонятливого
Реклама:
__________________
Що згорить - то не зігниє!

(c)ChiP
chipic128 вне форума  
Непрочитано 14.03.2007, 21:11  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Цитата:
...для отправки я так понял надо прописать в переменную UDR записать то что надо, но как запустить передачу, я непонимаю, зачем здесь прерывания на передачу даных, на прием - понятно - пришли даные - идет прерывание - "забирай свои даные", но вот как с передачей с контроллера на ПК ...

"Запускать" передачу никак особо не надо. Если у Вас
вывод TX настроен на передачу, то после того как байт
отправлен в ячейку UDR он (байт) сразу из ячейки UDR
попадает в сдвиговый регистр UART и начинает отправлятся
через вывод TX.
И если Вам надо отправить только 2 байта сразу,
(или 3, в зависимости есть ли буфер UDR у данного микроконтроллера), или отправлять байты очень редко,
заведомо реже чем тратиться времени на пересылку одного байта,
то можно обойтись без прерываний.

Но если Вам надо отправить группу байт, то каждый следующий
байт ложить в ячейку UDR можно только когда из нее ушел предыдущий.
Так как отправка байта через UART происходит очень долго,
по сравнению с временем пересылки его в ячейку UDR,
то если Вы всю свою группу байт отправите в UDR не дожидаясь,
прерывания то почти вся группа не будет отправлена. Так как
следующий байт затирает предыдущий. И будут отправлены первые
2 или 3 байта и, по моему, последний.

Поэтому, чтобы отправить группу байт,
требуется использовать прерывания. Причем, по моему,
лучше использовать прерывание не по окончанию передачи TXC,
как в Вашей програмке,
а по опустению (опустошению) буфера (UDR Empty) UDRE.
В WinAVR это SIGNAL(SIG_UART_DATA)
(ищем в "...C:/WinAVR/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.html")

Хотя по прерыванию передача UART окончена
SIGNAL(SIG_UART_TRANS), по моему, будет работать также.
Просто это прерывание хорошо использовать для полудуплексной
связи (например RS-485). По этому прерыванию надо отпустить линию после того, как вся группа байт
отправлена (а отправка группы шла по прерыванию
SIGNAL(SIG_UART_DATA) ).
____________
Александр
2007 03 14
Laksus вне форума  
Непрочитано 14.03.2007, 21:36  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Цитата:
...для отправки я так понял надо прописать в переменную UDR записать то что надо
Вот так - avr123.nm.ru/z4.htm

и так - avr123.nm.ru/z5.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 15.03.2007, 11:13  
chipic128
Прописка
 
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
chipic128 на пути к лучшему
По умолчанию

Огромное спасибо - Laksus!!!! честь и хвала земликам!

АВР 123 - я вашы уроки читал, толк там есть. но чтобы его уловить, надо фильтровать всякую чехню которая там есть (не в обиду)

и кстати 485 - как из 232 сделать 485, ведь в 232 есть один провод передачи и один приема, а в 485 два провода, по одному сигнал положытельный по другому тот же сигнал, но отрецательный, и еще терзает вопрос - как повесить на одну линию 485 больше чем одно устройство?, как они распазнавать будут что енто им сигнал пришел, ну и конечно как с приемом - передачей????
__________________
Що згорить - то не зігниє!

(c)ChiP
chipic128 вне форума  
Непрочитано 15.03.2007, 11:47  
lsa
Почётный гражданин KAZUS.RU
 
Аватар для lsa
 
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
lsa на пути к лучшему
По умолчанию

Сообщение от chipic128
и кстати 485 - как из 232 сделать 485, ведь в 232 есть один провод передачи и один приема, а в 485 два провода, по одному сигнал положытельный по другому тот же сигнал, но отрецательный, и еще терзает вопрос - как повесить на одну линию 485 больше чем одно устройство?, как они распазнавать будут что енто им сигнал пришел, ну и конечно как с приемом - передачей????
Здесь на KAZUS.RU есть ответы на многие вопросы:

Современные микросхемы драйверов RS-485 фирмы MAXIM
https://kazus.ru/articles/330.html

Правильная разводка сетей RS-485
https://kazus.ru/articles/213.html

Последовательный интерфейс RS-485
https://kazus.ru/articles/211.html

Обрежьте жирок с RS-485
https://kazus.ru/articles/200.html
lsa вне форума  
Непрочитано 15.03.2007, 11:49  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

кы485 по-русски в низу http://avr123.nm.ru/z4.htm

по-аглицки на - analog.com ad485 и там же апноуты.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 15.03.2007, 11:57  
chipic128
Прописка
 
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
chipic128 на пути к лучшему
По умолчанию

все енто высокии материи - как с RX, TX т.е. 2 и 3 ножек СОМ порта перейти на два проводка?

можт я и неправ в кое чем, то Вы не обижайтесь!
__________________
Що згорить - то не зігниє!

(c)ChiP
chipic128 вне форума  
Непрочитано 15.03.2007, 12:26  
lsa
Почётный гражданин KAZUS.RU
 
Аватар для lsa
 
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
lsa на пути к лучшему
По умолчанию

Сообщение от chipic128
все енто высокии материи - как с RX, TX т.е. 2 и 3 ножек СОМ порта перейти на два проводка?
можт я и неправ в кое чем, то Вы не обижайтесь!
Если на пальцах:
Нужна микросхема драйвера RS-485 (приемопередатчик).
Она с физического уровня RS-232 формирует физические уровни RS-485.
Дальше к этим двум проводкам можно подключать много RS-485 приемопередатчиков параллельно.
Драйверы не осуществляют адресацию.Пакет попадает на все приемники. Логика приемников определяет как обрабатывать данные и как решать проблемы коллизий.
Статьи на KAZUS.RU советую таки прочитать.
lsa вне форума  
Непрочитано 15.03.2007, 12:37  
chipic128
Прописка
 
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
chipic128 на пути к лучшему
По умолчанию

Цитата:
Нужна микросхема драйвера RS-485 (приемопередатчик).
Она с физического уровня RS-232 формирует физические уровни RS-485.
значит на одну с микросхем MAX предложеных в таблице на вход ее подаем с контроллера ТХ а на выходной порт макса РХД? я правильно понял, и таким способом, если подключать к ентим двум проводкам только по одному приемо передатчику с каждой сторони - можно получить просто километровый удлинитель СОМ порта?
А если нужно обеденить несколько устройств, то надо уже в самом контроллере делать какую-то адресацию.

правильно ли я понял?
__________________
Що згорить - то не зігниє!

(c)ChiP
chipic128 вне форума  
Непрочитано 15.03.2007, 13:07  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

адресацию делает контроллер.

Правильно подключать так:

КОМ порт - max232 - max485 - двухпроводная сеть до 32 устройств.

max232 или его аналог нужен чтоб сделать ТТЛ(CMOS) уровни с которыми работает max485.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собираем глюки и "подводные камни" AVR и AVR Studi Don_Ambrosio Коллекция глюков 27 14.11.2010 12:24
Ремонт Power MAN In WIN SergCh Ремонт оргтехники 17 10.02.2009 09:49
ASM51.EXE работает по разному в DOS и WIN? deCoder Микроконтроллеры, АЦП, память и т.д 0 14.04.2006 14:37
[Решено] Ищу среду разработки для MSC48 под Win Андрей Proteus, KiCAD и другие ECAD 1 06.03.2006 16:32


Часовой пояс GMT +4, время: 08:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot