ILYCHOFF 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба Пытаюсь передать на комп информацию, а передаются какие-то непонятные символы. С железом вроде все нормально. Спаяно правильно. Прием передача рааботает. На компе использую прогу RS 232 Pro, но пробовал и другие тоже самое. Помогите пожалуйста разобраться в чем причина. Проц мега16, кварц 4 МГц. Вот прога: #include <mega16.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> // Declare your global variables here void main(void) { PORTA=0xFF; DDRA=0x00; PORTB=0xFF; DDRB=0x00; PORTC=0x00; DDRC=0xFF; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; for (;;) { putsf("RT000"); delay_ms(500); }; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kay 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба могу и ошибаться, но настроен ли дефолтный выход на usart? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба какой выход дефолтный??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya514 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба У меня та же самая проблема, только с Atmega8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба И как ее устранить я уже чего только не пробовал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба Возможные причины: 1. в терминалке на ПК установлены другие параметры 2. Неправильно прошиты FUSES, из-за чего AVR работает не на 4 МГц => скорость не 9600 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба по программной части вроде бы все верно. тут только сомнения относительно putsf(). попробуйте, для начала отправлять просто константу. void main(void) { ... for (;;) { UDR = 'R'; delay_ms( .. ); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба Пробовал отправлять константу, тот же самый результат. У меня с ком портом связь через MAX 232, может быть это из-за того что микросхема инвертит выход, и как тогда с этим побороться, еще раз пропустить через нее сигнал??? или как то программно???? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kay 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба макс232 инвертит инвертированную логику, чтобы её мог комп понимать. т.е. на микроконтроллере: "1"=0 В "0"=3.3 В на компе: "1"=9 (12) В "0"=0 В Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба А что нужно делать в данном случае. я проверяю в протеусе после контроллера все нормально, читаемые символы, после MAX 232 чушь какая-то. Почитайте стандарт на RS232, какие логические уровни приняты для передачи на линии... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба Я не могу понять что я делаю не так, объясните неграмотному... уже все перепробовал наверняка кто-то уже это делал поделитесь рабочей схемой...плиз... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergio66 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба А что именно Вы видите на приемном конце? Есть ли какая нибудь закономерность между тем, что посылаете, и тем, что ловите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба Вот прога #include <mega16.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> // Declare your global variables here void main(void) { PORTA=0xFF; DDRA=0x00; PORTB=0xFF; DDRB=0x00; PORTC=0x00; DDRC=0xFF; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; for (;;) { while (!(UCSRA.5)); UDR = ('1'); delay_ms(5); }; } Терминал RS232Pro Это в ASCII 12:46:38> xяЂ 12:46:38> xяЂ 12:46:38> xяЂ 12:46:38> xяЂ 12:46:38> xяЂ 12:46:39> xяЂ 12:46:39> xяЂ Это в HEX 12:47:52> 78 00 FF 80 12:47:52> 00 12:47:52> 78 00 FF 80 12:47:52> 00 12:47:52> 78 00 FF 80 12:47:52> 00 12:47:52> 78 00 FF 80 12:47:52> 00 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 (изменено) · Жалоба Преобразователи типа: max232 ничего к передаваемой последовательности не добавляют/урезают. В этом случае единственное, что Вы не понимаете внешней вид посылки на линии RS232 (логические уровни, kay сегодня Вам их уже разъяснял). Так же у Вас может быть в схеме одно излишнее инвертирование (или 'не доинвертирование') , которое даст эффект изменения кода (к стати приемники и передатчики max232 с инвертированием)... Так же при возникновении таких ошибок приемник и передатчик могут иметь разные настройки (скорость передачи, длина посылки, паритеты, стоп-биты...) Изменено 6 февраля, 2006 пользователем BVU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться