AVR+dial-up modem

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

Приветствую!
а можно ATtiny2313 напрямую подключить по USART к диалап модему? или между ними нужно max232?
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

можно выпилить модем на самом AVR :) Правда V23 только вроде.
Если внешний модем использовать, то через max232 и хз как :)
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

собственно хочу подключить это к внешнему модему(без стабилитрона на 3,3В), с мобильным телефоном работало нормально. пробовал подключать через самодельный девайс пока ничего не выходит.
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

можно
через преобразователь интерфейсов типа max232
подключили, выдаете на скорости 9600 или 11520 команду AT и 10,13
вам в ответ можем должен ответить OK

если нет - закоротить линии RTS и CTS
и перепробывать на разных скоростях
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 541
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

akkinak писал(а):Приветствую!
а можно ATtiny2313 напрямую подключить по USART к диалап модему? или между ними нужно max232?
Если в модеме нет USART порта, то не напрямую не через max232 работать не будет.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

а, как узнать есть ли у внешнего диалап модема USART порт?
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Хочу уточнить: такой старый модем, который на компорт вешается? У него есть UART.
Перед отсылкой команды может потребоваться DTR подергать.
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

пробовал на ZyXEL Omni 56K MINI , про DTR тоже думал, подавал на вход 4(соm) модема 5В , 10В, без результатно. модем не снимает трубку.
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

И не снимет пока через компорт его не настроете.
ATA и еще помоему ATS0 можно.
Да, еще на каких-то совсем старых были дип-переключатели. Можно было аппаратно настроить на автоподнятие и др. действия.

DTR работает так:
1)установить DTR
2)пообщаться с устройством
3)отпустить DTR в самом конце. После этого модем не обязан на вас реагировать.

RTS-CTS перемкнуть если не используется аппаратное квитирование.
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

устройство которое хочу подключить к модему работало по такому коду:
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <stdio.h>
#include <avr/delay.h>
int UBRR,UCR;
char str0[]="ATZ\r\n";
char str1[]="ATD123654;\r\n";
volatile unsigned char LOCK;
void USART_TX(char *s)
{
   while (*s)
   {
   while ( !( UCSRA & (1<<UDRE)));
   UDR = *s++;
   }
}   

int main (void)
{
    // Set baud rate
   UBRRH = 0;
   UBRRL = 12;
   UCSRA = (1<<U2X);
   // Enable receiver and transmitter
   UCSRB = (1<<RXEN) | (1<<TXEN);
   // Set frame format
   UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
   //Set port B input
   DDRB=0x00;
   PORTB=0xFF;

    while (1)
    {
      if(!(PINB&(1<<PB0)))
     {
      if(LOCK==0)
      USART_TX("ATZ\r\n");
      USART_TX("ATD123654;\r\n");
      _delay_ms(3000);
      LOCK=1;
      }
      if(PINB&(1<<PB0))
      LOCK=0;           
    }
}
Последний раз редактировалось akkinak Вс мар 23, 2014 21:26:43, всего редактировалось 1 раз.
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

uk8amk писал(а):И не снимет пока через компорт его не настроете.
ATA и еще помоему ATS0 можно.
я так понимаю нужно добавить в код:

Код: Выделить всё

char str0[]="ATZ\r\n";
char str1[]="ATA\r\n";
char str2[]="ATD123654;\r\n";
а, с DTR как?
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

заработало, когда подключил выходы USART ATtiny2313 на выходы GD75323 модема: TxD-TxD, RxD-RxD, GND-GND.
только программу нужно подкоректирровать(в программировании не особо, может кто поможет). задача устройства- тупо набирать номер автоответчика, выдачей в модем по USARTу двух команд ATZ и ATD12345678 при подачи корпуса на пин В0, сначала модем набирает номер, затем ответ-отбой и сигнал "занято" в тел. линии, модем не реагирует на следующую команду ATZ ,а команда ATD12345678 проходит как бы в никуда. Модем освобождает тел. линию, после того как сам определит сигнал "занято", тогда набор номера идет нормально.может между ATZ и ATD12345678 установить задержку? а после того как устройство вывести из режима набора номера(снять корпус из пин В0) то модем "не вешает трубку", тоже не знаю как здесь.
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

Сообщение akkinak »

в общем работает устройство, вот решил перенести на ATmega8515(было ATtiny2313), но на ATmega8515 не работает, думаю что все дело в настройках USART

Код: Выделить всё

// Set baud rate
   UBRRH = 0;
   UBRRL = 12;
   UCSRA = (1<<U2X);
   // Enable receiver and transmitter
   UCSRB = (1<<RXEN) | (1<<TXEN);
   // Set frame format
   UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
выяснил что регистр UBRRH размещается по тому самому адресу, что и регистр управления UCSRC. Как это отобразить в коде?
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

UBRRH размещается по тому самому адресу, что и регистр управления UCSRC. Как это отобразить в коде?
Accessing
UBRRH/UCSRC
Registers

When doing a write access of this I/O location, the high bit of the value written, the
USART Register Select (URSEL) bit, controls which one of the two registers that will be
written
. If URSEL is zero during a write operation, the UBRRH value will be updated. If
URSEL is one, the UCSRC setting will be updated.
Ответить

Вернуться в «AVR»