Например TDA7294

Форум РадиоКот :: Просмотр темы - Связь МК с PC по RS232
Форум РадиоКот
https://radiokot.ru/forum/

Связь МК с PC по RS232
https://radiokot.ru/forum/viewtopic.php?f=58&t=112850
Страница 1 из 2

Автор:  Hispanus [ Вс фев 01, 2015 22:47:46 ]
Заголовок сообщения:  Связь МК с PC по RS232

Здравствуйте!
Написал простейшую программу (непрерывная передача символа) с помощью библиотечных функций, собрал схему на max232, соединил с PC - всё работает: в гипертерминале отображаются полученные символы. Теперь написал ту же самую программу, но не использовал библиотечные функции, а настраивал модуль USART по даташиту. Соединил с РС по той же схеме и ничего, в гипертерминале ничего нет, хотя программа rs232 регистрирует активность порта. В чем может быть дело? Спасибо.
PS: в протеусе работают обе программы.

Программа без библиотечных функций:
Код:
#include <16f877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT

void init_ports()
//Настройка портов
{
   TRISA=0b00000000;
   PORTA=0b00000000;
   
   PORTB=0b00000001;
   TRISB=0b00000000;
   
   TRISC=0b00000000;
   PORTC=0b00000000;
   
   PORTD=0b00000000;
   TRISD=0b00000000;
}

void int_on()
//Настройка прерываний
{
   GIE=1;
   //Глобальное разрешение прерываний
   
   PEIE=1;
   //Разрешение прерываний от периферийных устройств
}

void init_USART()

   BRGH=0;
   //Низкоскоростной режим уарт
   
   SPBRG=51;
   //Скорость передачи 1200 бод
   
   SYNC=0;
   //Асинхронный режим передачи
   
   SPEN=1;
   //Включить усарт
   
   TXIE=1;
   //Прерывание разрешено от уарт
   
   TX9=0;
   //8 разрядная передача
   
   TXEN=1;
   //Разрешить передачу данных по уарт, регистр пуст
   
}

#int_tbe
//буфер передачи пуст
void transmit_usart()
{     
   TXREG='a';
}

void main (void)

   init_ports();
   //Настройка портов
   
   int_on();
   //Настройка прерываний
   
   init_USART();
   //Настройка уарт
   
   //При этом TXIF=1 - буфер передатчика пуст
   
   while (1)
   { 

   }
}

Автор:  Smen [ Пн фев 02, 2015 07:00:38 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Hispanus писал(а):
непрерывная передача символа
Для начала, так делать нельзя.
Между байтами (или пакетами байт) необходимо вставлять защитный интервал длительностью не менее периода передачи одного байта, включая стартовый и стоповый биты.

Автор:  A. Fig Lee [ Вт фев 03, 2015 05:33:16 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Это что за среда?
Вот это:
Код:
transmit_usart()
{
  TXREG= 'a';
}


Это обработчик прерывания?
Если да, то он отсюда никогда не выйдет.
В прерывании надо сбрасывать флаг вызвавшего прерывания вручную,
иначе будет крутится в бесконечном лупе.
Код:
transmit_usart()
{
 
  TXREG= 'a';
  TXIF = 0;
}

Автор:  Hispanus [ Вт фев 03, 2015 14:44:18 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

A. Fig Lee, с битом TXIF как раз всё наоборот. Если он "0", то буфер передачи полон и его содержимое выгружается в сдвиговый регистр. После этого бит TXIF будет равен "1", что означает - буфер передачи пуст. К тому же этот бит сбрасывается и устанавливается аппаратно. Среда программирования - PIC C Compile. В протеусе эта программа работает, а значит МК всё таки выходит из прерывания. Smen, а разве МК не делает это сам, ведь USART аппаратный?

Автор:  Hispanus [ Ср фев 04, 2015 00:41:14 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Сделал вот так - всё равно не заработало :( (отключил прерывания)

Код:
#include <16f877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT

void init_ports()
//Настройка портов
{
   TRISA=0b00000000;
   PORTA=0b00000000;
   
   PORTB=0b00000001;
   TRISB=0b00000000;
   
   TRISC=0b00000000;
   PORTC=0b00000000;
   
   PORTD=0b00000000;
   TRISD=0b00000000;
}

void init_USART()


   BRGH=0;
   //Низкоскоростной режим уарт
   
   SPBRG=51;
   //Скорость передачи 1200 бод
   
   SYNC=0;
   //Асинхронный режим передачи
   
   SPEN=1;
   //Включить усарт
   
   TXIE=0;
   //Прерывание запрещено от уарт
   
   TX9=0;
   //8 разрядная передача
   
   TXEN=1;
   //Разрешить передачу данных по уарт, регистр пуст
   
   TXREG='f';
     
   while(TRMT==0)
   {
     
   }
}


void main (void)

   delay_ms(10);

   init_ports();
   //Настройка портов
     
   init_USART();
   //Настройка уарт
   
   
   while (1)
   {       
     
   }
}

Автор:  A. Fig Lee [ Ср фев 04, 2015 02:45:42 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Точно. про аппаратный сброс я и запамятовал

Автор:  Smen [ Пт фев 06, 2015 06:43:26 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Hispanus писал(а):
а разве МК не делает это сам, ведь USART аппаратный
И что ж, что аппаратный?
Откуда ему знать, где у Вас пакеты начинаются/заканчиваются, и какую паузу делать?
Его "аппаратность" состоит в том, что он берёт байт из буфера, и помещает его в сдвиговый регистр, который выпихивает это всё в линию, вставляя стартовый и стоповый биты.
И, если Вы будете всё время что-то записывать в буфер, передача так и будет, без пауз.

P.S.: Что-то смотрю, у Вас все порты на выход настроены, а должны быть на вход.

Автор:  Hispanus [ Пт фев 06, 2015 19:47:08 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Smen, а какие должны быть настроены на вход? я только как передатчик мк использую (но пробовал и так: PORTC=0b10000000) Я кажется понял где может быть проблема-почему то не запускается обработчик прерываний:
Код:
#int_tbe (буфер передачи пуст)
void transmit()
{
   PORTB=0b00000000;
}

или

#int_default
void transmit()
{
   PORTB=0b0000000;
}

то есть порт В не обнуляется (первоначально он 0b00000001). Может я какой то бит забыл?

Автор:  Smen [ Сб фев 07, 2015 08:13:07 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Hispanus писал(а):
а какие должны быть настроены на вход?
Порты передатчика и приёмника УАРТ.

Автор:  -=Vovka=- [ Сб фев 07, 2015 11:58:11 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Вообще-то оба на выход. Даташиты когда начнем читать?
Setting the SPEN bit of the RCSTA register enables the EUSART and automatically configures the TX/CK I/O pin as an output. If the TX/CK pin is shared with an analog peripheral the analog I/O function must be disabled by clearing the corresponding ANSEL bit.

Вот дернул из рабочего проекта:
Код:
// передача
if( TXEN && TXIF ) { // Если разрешена передача и буфер передатчика пуст
   if( bufCount<=RS485_BUF_SIZE ) { TXREG = bufRS485[bufCount]; bufCount++; }
   else{
      TXEN = 0; // выключим передатчик
   }
}

Автор:  Hispanus [ Сб фев 07, 2015 15:06:21 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

-=Vovka=-, а Вы не могли бы также и код инициализации передатчика в асинхроном режиме дернуть? :)) Я подозреваю, что у меня там где то ошибка. Спасибо.

Автор:  Smen [ Сб фев 07, 2015 17:11:25 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

-=Vovka=- писал(а):
Вообще-то оба на выход. Даташиты когда начнем читать?
Всегда умиляет, когда ламеры, не умеющие читать даташиты, с пафосом бывалого знатока, отсылают их читать. :roll:

Цитата:
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be set in order to to configure pins RC6/TX/CK and RC7/RX/DT as the Universal Synchronous Asynchronous Receiver Transmitter.


п 10.0
стр. 95 для 877
стр. 111 для 877a
в самом верху большими буквами.

Автор:  Hispanus [ Сб фев 07, 2015 17:58:37 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Smen, я читал ДШ в этом месте, но подумал, что здесь что то не так. Зачем настраивать вывод TX передатчика на вход, если он будет только на выход использоваться? Или я что то не так понял?

Автор:  -=Vovka=- [ Сб фев 07, 2015 18:51:47 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Smen писал(а):
-=Vovka=- писал(а):
Вообще-то оба на выход. Даташиты когда начнем читать?
Всегда умиляет, когда ламеры, не умеющие читать даташиты, с пафосом бывалого знатока, отсылают их читать. :roll:

Еще раз глянул, да я неправ, на вход перестраиваются перед началом основного цикла.
По поводу ламера: если я ламер, то какой у тебя опыт в программировании?

ТС, вот тут посмотри: http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en012073

Автор:  A. Fig Lee [ Сб фев 07, 2015 19:11:09 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Я бы ковырял так:
перед входом в main loop
посмотрел бы содержание регистров, которые относятся к портам, настройке частоты и RS232.
Toже самое сделал бы для нерабочей программы. И сравнил.

Автор:  Hispanus [ Вс фев 08, 2015 00:20:51 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Всем спасибо за ответы и советы! Всё дело было в порте D(наверное сжег его как-то неправильной полярностью подключения). Когда программа доходила до его инициализации, она останавливалась и дальше не шла. Поэтому-то флаг TXIF и не устанавливался. Убрал инициализацию порта D и все заработало. :))

Автор:  Smen [ Вс фев 08, 2015 08:47:24 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Hispanus писал(а):
Зачем настраивать вывод TX передатчика на вход
Сам не знаю, зачем это так сделано, ведь согласно FIGURE 3-5 (для 877-го, или 4-6, для 877a, кстати, у Вас-то какой) сигналы Peripheral OE и выход защёлки TRIS складываются по "ИЛИ".
Наверное, в этом есть какой-то более глубокий смысл.

Hispanus писал(а):
Когда программа доходила до его инициализации
Что-то не вижу я в Вашей программе никакой инициализации порта D. :roll:
Выдёргиваете куски из контекста? Что там, у Вас, ещё инициализируется? :(



-=Vovka=- писал(а):
если я ламер, то какой у тебя опыт в программировании?
Только ламеры и чайники пишут для 877-го на Сях. :)
Да что там для 877. Тут встретил, для PIC12-го.
Но не в этом суть. Коли так режет слух, выкинь словосочетание про ламеров. Смысл фразы сильно изменился? :wink:
Речь-то о культуре общения.
Надеюсь, ты адекватен, и данный конфуз пойдёт тебе на пользу, и ты больше не будешь уподобляться отдельным личностям, вообразившими себя знатоками электроники, и вообще, "истинной в последней инстанции".
P.S.: А пиписьками мериться я ни с кем не намерен. Коли хочешь, можешь меня тоже ламером считать. :beer:

Автор:  -=Vovka=- [ Вс фев 08, 2015 09:40:18 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Smen писал(а):
-=Vovka=- писал(а):
если я ламер, то какой у тебя опыт в программировании?
Только ламеры и чайники пишут для 877-го на Сях. :)
Да что там для 877. Тут встретил, для PIC12-го.

И что? Какая разница на чем будет написано? Главное чтобы конечный результат работал правильно и без сбоев!
Помнится в 90-х около недели писал драйвер на асм для 8086-го. А если бы на си то же самое делал, то за пару дней, с перекурами.
Лично я редко пользуюсь асмом, т.к. время дорого. А на си и быстрее напишешь и алгоритм легче отлаживать, т.к. нагляднее.
Может еще на перфокартах "писать" чтобы слыть крутым программером? :)))

Smen писал(а):
Но не в этом суть. Коли так режет слух, выкинь словосочетание про ламеров. Смысл фразы сильно изменился? :wink:
Речь-то о культуре общения.
Надеюсь, ты адекватен, и данный конфуз пойдёт тебе на пользу, и ты больше не будешь уподобляться отдельным личностям, вообразившими себя знатоками электроники, и вообще, "истинной в последней инстанции".
P.S.: А пиписьками мериться я ни с кем не намерен. Коли хочешь, можешь меня тоже ламером считать. :beer:

Я к тому, что и "На старуху бывает...", а сразу рубить "Ламер"- это уже слишком!

Автор:  dosikus [ Вс фев 08, 2015 10:19:17 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

Smen писал(а):
Только ламеры и чайники пишут для 877-го на Сях. :)
Да что там для 877. Тут встретил, для PIC12-го.


Весьма громкое заявление . :)))
Вот это писано в двух вариантах на сях и на асме https://www.youtube.com/watch?v=x4aycNs8J0Q
По быстродействию и по размеру кода практически одинаково.
Реализация BAM c чарлиплексингом на пЫк10F.
Попробуй реализуй ...

Автор:  Smen [ Вс фев 08, 2015 11:42:01 ]
Заголовок сообщения:  Re: Связь МК с PC по RS232

-=Vovka=- писал(а):
Может еще на перфокартах "писать" чтобы слыть крутым программером?
Бывало и такое.
С перфокартами, правда, не довелось, а вот ассемблерный код, по бинарнику восстанавливать доводилось.
Ну, и не надо путать автоматизацию рутинных процессов с творческими.

-=Vovka=- писал(а):
сразу рубить "Ламер"
Ну, вообще-то фраза была общей.
Никто конкретный в ней не указывался.


dosikus писал(а):
Попробуй реализуй
Сказал же, пиписьками не меряюсь.
Лучше вот объясни, зачем действительно порты надо на вход настраивать, если из схемы в ДШ получается, что их вообще настраивать необязательно?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/