|
Преобразование уровней, Проблема с MAX232 |
|
|
|
Sep 1 2008, 15:36
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Собрал, подключил по даташиту, только источник питания 4.5В написал простенькую программку, чтобы посмотреть как оно работает. Простейший код, только для того чтобы проверить. Код #include <avr/io.h> #include <avr/delay.h> #define F_CPU 1000000UL
void USART_Transmit (unsigned char data) { while ( !(UCSR0A & (1<<UDRE0)) ) ; UDR0 = data; }
void USART_Init (unsigned int baud) { UBRR0H = (unsigned char)(baud>>8); UBRR0L = (unsigned char)(baud);
UCSR0B = (1<<RXEN0)|(1<<TXEN0); UCSR0C = (1<<UCSZ00)|(1<<UCSZ01); }
void Beep (unsigned int time) { PORTC = 0xff; _delay_ms(time); PORTC = 0x00; _delay_ms(time); } int main(void) { DDRC = 0xff; PORTC = 0x00; USART_Init (51); while (1) { USART_Transmit ('f'); Beep (100); }
} На той стороне HyperTerminal 1200 скорость 8 бит, четность нет, один стоп бит. На экране пустота и тишина. Проверял, цеплял на этот же шнурок вместо микросхемы и макса просто GPSку - выдает данные на ура, всё идет. Здесь же просто пустота. При ошибке по скоростям у меня должен быть мусор вроде. Нету даже мусора. Порядок соединения входов-выходов вроде верный, но на всякий случай перебрал все варианты. Ноль эмоций. На ноге выхода микросхемы вроде сигнал есть насколько я могу его увидеть тестером. На ноге выхода макса стабильные минус где-то 7-8В которые там сохраняются независимо от того соединен он с микросхемой или нет. Скажите где стоит искать проблему?
|
|
|
|
|
Sep 1 2008, 16:27
|

Техногипнолог
    
Группа: Свой
Сообщений: 1 132
Регистрация: 6-03-05
Из: Saratov
Пользователь №: 3 126

|
Цитата что от этого изменится? Особо ничего - проверим работает ли транслятор (этот экземпляр от имеемого питания). Цитата у меня был случай когда попадалась микросхема 232 которая отказывалась работать от 4.5 вольта. Вполне может случиться при высоких бодрейтах. На 1200n1 - не верю/либо мс откровенный брак. Цитата но если у человека идет с МК данные а на выходе ничего нету то обясните что от этого изменится? Это подозрения. Что "идёт". Если нет осциллоскопа, то можно светодиод повесить на txd контроллера через емкость примерно на 0,1 мкФ
|
|
|
|
|
Sep 1 2008, 16:36
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(maximiz @ Sep 1 2008, 19:27)  Это подозрения. Что "идёт" Ели человек мерял стрелочным тестером, который проинтегрировал сигнал и увидел бы к примеру - 3.9 вольта, потом изменил бы выдачу Код USART_Transmit (0xFF); и сказал бы получил 4.2 вольта, выдавал 0x00 получил 1.1 вольт тогда бы я сказалбы что "идёт". Ну да ладно, давайте автора подождём. Пускай ещё тип МК скажет для пущей уверенности.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Sep 1 2008, 16:51
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Пока закоротить и попечатать не помогло, завтра поменяю кой чего из железа, потому что не везде мне нравится как собрал, попробую поставить другой экземпляр макса и отпишусь.
|
|
|
|
|
Sep 1 2008, 16:57
|

Техногипнолог
    
Группа: Свой
Сообщений: 1 132
Регистрация: 6-03-05
Из: Saratov
Пользователь №: 3 126

|
Цитата Пока закоротить и попечатать не помогло, А при закорачивании тхд контроллера хоть отключили? Может также помочь заресечивание контроллера на время теста, чтобы зет был на тхд. Право-слово, Вы не обижайтесь.  Для меня программирование пока проблема, а по аппаратной части не особо. Осциллоскоп есть? На летающих емкостях мах-а посмотрите и есть ли по 9 вольт на плюс-минус? Плюс/минус можно глянуть стрелочным тестером тож
|
|
|
|
|
Sep 1 2008, 17:01
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Так: Код unsigned int time; //... _delay_ms(time); делать нельзя. Можно так: Код _delay_ms(100); Читайте или комментарии в delay.h, или форум. F_CPU следует определить в Makefile, ну или хотя бы _до_ подключения delay.h эту константу использующего. Дежавю! http://electronix.ru/forum/index.php?showtopic=51075
Сообщение отредактировал SysRq - Sep 1 2008, 17:16
|
|
|
|
|
Sep 1 2008, 17:20
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(SysRq @ Sep 1 2008, 21:01)  Так: Код unsigned int time; //... _delay_ms(time); делать нельзя. Можно так: Код _delay_ms(100); Читайте или комментарии в delay.h, или форум. F_CPU следует определить в Makefile, ну или хотя бы _до_ подключения delay.h эту константу использующего. Совсем запугали...  Код // из delay.h #ifndef F_CPU /* prevent compiler error by supplying a default */ # warning "F_CPU not defined for <util/delay.h>" # define F_CPU 1000000UL #endif ... void _delay_ms(double __ms) { ... } Это означает, что ежели юзер программер забыл задать F_CPU, компилятор будет считать F_CPU=1000000UL (но ругнется в лог), а в качестве аргумента _delay_ms() (как и _delay_us()) проглотит и double.
|
|
|
|
|
Sep 1 2008, 17:31
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(maximiz @ Sep 1 2008, 22:57)  Осциллоскоп есть? На летающих емкостях мах-а посмотрите и есть ли по 9 вольт на плюс-минус? Плюс/минус можно глянуть стрелочным тестером тож Он же написал что Цитата На ноге выхода макса стабильные минус где-то 7-8В которые там сохраняются независимо от того соединен он с микросхемой или нет. Значит инвертор и даблер макса работают. ИМХО, основанное лишь на интуиции, подсказывает, что топик-стартер с подключением что-то там напутал.
|
|
|
|
|
Sep 1 2008, 17:52
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(xemul @ Sep 1 2008, 21:20)  Совсем запугали...  ... а в качестве аргумента _delay_ms() (как и _delay_us()) проглотит и double. Еще одна цитата из delay.h: Цитата \note In order for these functions to work as intended, compiler optimizations <em>must</em> be enabled, and the delay time <em>must</em> be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application. Анатолий.
|
|
|
|
|
Sep 1 2008, 17:52
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(rezident @ Sep 1 2008, 20:31)  ИМХО, основанное лишь на интуиции, подсказывает, что топик-стартер с подключением что-то там напутал. в подтверждение такого же телепатического чувства и основываясь на дежавю SysRq, и предложенной схемой проверки maximizа обясню на пальцах: Rinin, вывод 11 соедините с 12, 14 на вход приёмника ком порта компа, выход передатчика ком порта компа подсоедините к 13тому выводу, попробуйте отослать парочку байт через терминал. и про отключение МК не забудьте, или ресет соедините с корпусом. кстати, какой терминал используете?
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Sep 1 2008, 17:53
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Цитата Так: Код unsigned int time; //... _delay_ms(time); делать нельзя. Можно так: Код _delay_ms(100); Читайте или комментарии в delay.h, или форум. F_CPU следует определить в Makefile, ну или хотя бы _до_ подключения delay.h эту константу использующего. Дежавю! http://electronix.ru/forum/index.php?showtopic=51075Я помню, что так делать нельзя. Потому что вы мне это уже говорили, просто мне вобщем-то пофигу как мигает светодиод, который мигает просто для красоты и чтобы видеть, что микросхема ещё не сгорела нафиг окончательно. Насчет дежавю, да, но там продолжать ИМХО было оффтопиком. А так - да та же тема, просто снова появилось время
|
|
|
|
|
Sep 1 2008, 18:05
|

Техногипнолог
    
Группа: Свой
Сообщений: 1 132
Регистрация: 6-03-05
Из: Saratov
Пользователь №: 3 126

|
Цитата Он же написал что Сорри. Это не прочитал, дублёр, значит, работает. Хотя бы минусовой Цитата кстати, какой терминал используете? гипертерминал. В настройках соединения в гипертерминале у порта хандшейк none должен быть при проверке и при "работе". Тогда не понадобится цтс-ртс и прочего
|
|
|
|
|
Sep 1 2008, 18:41
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(uriy @ Sep 1 2008, 20:42)  Неправда, далеко не все. Абсолютно все что я пользовал работают от 3.3V. Я даже не задумываясь ставлю 5-ти вольтовые экземляры в девайсы с 3.3V питанием, по причине "хрен достанешь 3х вольтовую версию в нужном количестве по приемлемой цене". Поэтому в сказки о критичности максов к питанию не поверю никогда. У макса есть умножитель и инвертор, так вот чтобы гарантировать уровни линии |7.5V| нужно питание не ниже 4.5V. Но с тем же успехом COM порт будет общаться с уровнями в линии вплоть до |3V|. По спецификации RS232 уровни могут быть в пределах 3..15V. С питанием максы от 2.5V умножитель даст ~4V, так что все ок. Цитата Когда-то в студенческие годы делал программататоры для сотовых на максе и 78L05 все это дело питалось от COM-порта. На некторых партиях напряжение просаживалось вольт до трех и ниче не работало. Если оно у вас "просаживалось" до трех, что уже само по себе доказывает, что мощности COM порта не хватало, где гарантия, что оно у вас не просаживалось до 0 в момент передачи? И где гарантия, что проблема была не на стороне компа (просадка уровней выходного преобразователя).
|
|
|
|
|
Sep 1 2008, 18:54
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Цитата в подтверждение такого же телепатического чувства и основываясь на дежавю SysRq, и предложенной схемой проверки maximizа обясню на пальцах: Rinin, вывод 11 соедините с 12, 14 на вход приёмника ком порта компа, выход передатчика ком порта компа подсоедините к 13тому выводу, попробуйте отослать парочку байт через терминал. и про отключение МК не забудьте, или ресет соедините с корпусом. кстати, какой терминал используете? Мои чувства тоже как правило говорят, что если тысячи людей собирают на этих микросхемах преобразование, а я не могу, то проблема очень маловероятно, что в микросхемах. Просто нужен совет где конкретно её можно искать. Только что подключил его просто всё как было и послал ему несколько байт с клавиатуры (программа та же, ничего не ждущая) как только сделал это - его прорвало и с него посыпался регулярный шум. Проверил еще пару раз - как только ему посылаю с компьютера что-нибудь его "прорывает" и он начинает работать. До этого тишина. Уже лучше конечно, но далеко от совершенства.
|
|
|
|
|
Sep 1 2008, 19:22
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(defunct @ Sep 2 2008, 00:41)  Поэтому в сказки о критичности максов к питанию не поверю никогда. MAXы обычно работают при 3,3В, а вот его аналоги других производителей далеко не всегда. С полгода назад напоролся, то ли ADM202E, то ли SP202E не возжелал от 3,3В работать. Цитата(defunct @ Sep 2 2008, 00:41)  Но с тем же успехом COM порт будет общаться с уровнями в линии вплоть до |3V|. По спецификации RS232 уровни могут быть в пределах 3..15V. С питанием максы от 2.5V умножитель даст ~4V, так что все ок. В PC стоят драйверы с входным порогом ±2В, так что даже при 0В...+2В чаще всего работает. Но КМК дело все же в надежности, а не в том, что иногда работает
|
|
|
|
|
Sep 1 2008, 19:35
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(defunct @ Sep 1 2008, 21:41)  Абсолютно все что я пользовал работают от 3.3V. проверил MAX232N (дип корпус) с питанием 3.3 вольта на скорости 9600, кабель 1.5 метра. работает. которая не захотела от 4.5в была в SOIC корпусе и сейчас служит для формирования уровня отрицательного напряжения для регулирования контрастности графичесского ЖКИ, выпаивать её неохота и подпаиваться тоже. Кстати, нащёт производителя последней не помню.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Sep 2 2008, 03:56
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 8-06-06
Пользователь №: 17 866

|
может проблема в DTR-DSR, RTS-CTS ? Со стороны компа попробуйте соединить их попарно........
|
|
|
|
|
Sep 2 2008, 08:32
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Контроллер о том закорочено или нет и не узнает никогда, а комп по этому шнурку из трех проводов идеально принимает инфу с GPSки.
|
|
|
|
|
Sep 3 2008, 15:19
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-08-08
Пользователь №: 39 398

|
Если кому-то интересно - то эти проблемы были исключительно из за использования внутренней RC цепочки. При внешнем резонаторе работает замечательно.
|
|
|
|
|
Sep 21 2008, 12:10
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825

|
Сделал адаптер на MAX233. Все вроде включил, а реакции никакой нет, в ком-порте мертвая тишина. Как подключал, начну с макса: T1IN(2) - TXD МК T1OUT(5) - RXD COM V-(12) - V-(17) - Перемычка(По ДШ) С2-(10) - С2-(16) -Перемычка(По ДШ) С2+(11) - С2+(15) - Перемычка(По ДШ) VCC(7) - +5V GND(6) - Земля GND(9) - Земля COM-порт: DTR(4) - DSR(6) -Переычка RTS(7) - CTS(8) - Перемычка GND(5) - Земля RXD(2) - T1OUT
|
|
|
|
|
Sep 22 2008, 10:09
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата(Kuzmi4 @ Sep 22 2008, 12:58)  Ниже для 233:
Нету там перемычек вообсче... Это для 223. А в 233 как раз есть перемычки. Собственно главная фишка 233 так и называется "No external caps".
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|