Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
sertaliano
3 / 3 / 1
Регистрация: 24.06.2016
Сообщений: 54
1

LCD и RS232 с PIC микроконтроллером

02.02.2017, 17:10. Просмотров 498. Ответов 5
Метки нет (Все метки)

Доброго дня. Имеется: PIC18F4520, LCD от Siemens A52, GSM модем на базе Siemens С45. Компилятор PIC-C CCS.

Пытаюсь использовать совместно LCD и отправку команд на телефон.
если отправлять команду так:
C
1
2
3
#use rs232(baud=19200,xmit=TXPin,rcv=RXPin, bits=8, parity=N)
...
printf("ATD+79811111111;\r\n");
то все работает-звонок идет.
При попытке отправить команду еще раз - Микроконтроллер зависает.
Дисплей работает напрямую, НЕ используя "printf".
в чем дело - не пойму...
Где-то на форумах нашел - использовать RS232 через присвоение имени протоколу:
C
1
2
3
#use rs232(baud=19200,xmit=TXPin,rcv=RXPin, bits=8, parity=N, stream=mobile)
...
fprintf(mobile,"ATD+79811111111;\r\n");
но результат тот же...

Мысль такая, что процедуры для LCD "перебивают" RS232. Но почему? Ведь они не связаны. Или может RS232 "сбрасывается" при использовании первого printf

помогите разобраться

Добавлено через 46 минут
Добавлю. Телефон подключен RX TX - к выводам TX и RX ПИКа соответственно. Земля - общая. Заметил, что если землю разъединить - то ПИК не зависает, но и команды телефон не получает.

Добавлено через 1 час 20 минут
напряжение на TX - 3.3в

Добавлено через 3 часа 25 минут
Все. разобрался. Оказывается надо задействовать #int_rda. Тема закрыта

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2017, 17:10
Ответы с готовыми решениями:

Работа с АЦП микроконтроллером PIC
movlw b'11111111' movwf TRISA movlw b'00000001' movwf TRISB clrf TRISD bcf...

Разработка ПО для PIC 16F877, обеспечивающего двухсторонний обмен данными по интерфейсу RS232
на приеме байта зацикливается на двух строках btfss PIR1, RCIF ; ожидание окончания приема...

Подключение LCD дисплея WH2004A-YYK-CT в PIC Simulator IDE
Подскажите как должен быть подключен LCD дисплей знакосинтезирующий WH2004A-YYK-CT, что бы символы...

регулирование сопротивления микроконтроллером
Здравствуйте всем! У меня вопрос о том как бы я мог использовать микроконтроллер в ламповом...

Измерение и индикация микроконтроллером
Здравствуйте, получил такое задание: Разработать устройство для измерения и индикации уровня...

5
sertaliano
3 / 3 / 1
Регистрация: 24.06.2016
Сообщений: 54
07.02.2017, 14:47  [ТС] 2
Ан нет) не закрыта))

Теперь проблема с RX. (с передачей с ПИКа на телефон все в порядке).
Ставлю обработчик прерывания, в котором просто переключается светодиод. Все работает. Светодиод переключается. Но когда пытаюсь прочитать символ - пусто.
На PIC16F648 - код работает.
RX подключаю к телефону напрямую.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#INT_RDA
void  RDA_isr(void) 
{    
   if(kbhit()){
      char ch=getc() ;   
      if ((ch == 0x0d) || (ch == 0x0a)){ 
         srxFlag=1;       
      }
      else if ((ch != 0x0d) && (ch != 0x0a)) {
         srx[nrx++] = ch;
      }
   }
}
в итоге srxflag никогда не становится 1.


Подключаю телефон и ПИК к компу (по отдельности) - все работает. Приход символов на ПИК проверяю через дисплей, подключенный к ПИК.

пс
C
1
2
3
int nrx=0;
byte srx[80];
int srxFlag=0;
куда копать. Т.е. Телефон все отправляет как надо. ПИК тоже работает как надо. Похоже ПИК "не понимает телефон". Может есть особенности настройки именно этого ПИКа?

Добавлено через 4 часа 22 минуты
После получения сигнала на RX - ПИК зависает.
0
Voland_
1665 / 1053 / 99
Регистрация: 04.01.2010
Сообщений: 3,567
07.02.2017, 22:03 3
Цитата Сообщение от sertaliano Посмотреть сообщение
куда копать
копать в сторону объявления переменных со словом "volatile":
C
1
volatile int nrx;
все глобальные переменные, которые вы используете одновременно и в прерываниях и вне их - должны быть "volatile".
0
sertaliano
3 / 3 / 1
Регистрация: 24.06.2016
Сообщений: 54
09.02.2017, 17:37  [ТС] 4
Спасибо, но Нет. Все неизменно. Отслеживаю nrx. С каждым прерыванием он инкреминирует, но в srx ничего не появляется (тоже проверяю отображением на экран через нажатие кнопки, когда прерывания rda нет). Как будто ПИК не может понять приход стоповых битов. Но ПИК не виснет. Вис он, оказывается, от процедуры вывода строки на экран.

Добавлено через 22 часа 54 минуты
Попробовал подключить МК к компьютеру, но с условием приема отправляемого символа.
C
1
2
3
4
5
6
7
8
#INT_RDA
void  RDA_isr() 
{    
    if(kbhit()){
      ch=getc() ;
      putc(ch);
   }
}
Все работает как надо. В терминале отображаются вводимые символы.
Сделал на всякий случай.

напряжение на TX ПИКа через делитель сделал 2,9 в, чего хватает, чтобы телефон адекватно понимал команды
Может дело в напряжении на выходе телефона по каналу RX? Сейчас оно 2,6 в при подключенном телефоне.

Добавлено через 38 минут
Поправка:
Может дело в напряжении на выходе телефона по каналу TX(!)? Сейчас оно 2,6 в при подключенном телефоне.

Добавлено через 38 минут
А как бы вот так подключить и МК и телефон к COMпорту одновременно? Чтоб все было видно...

Добавлено через 4 часа 39 минут
В общем взял GSM модуль. Подключил его, на скорости 115200 и все заработало с первого раза. Значит что-то с телефоном. Господа, ну хоть какие-нибудь предположения? а?)
0
Voland_
1665 / 1053 / 99
Регистрация: 04.01.2010
Сообщений: 3,567
10.02.2017, 12:54 5
Цитата Сообщение от sertaliano Посмотреть сообщение
Господа, ну хоть какие-нибудь предположения? а?)
Предложений много, но возможно, ни одно вам не понравится.
1) Использовать буфер со сменой потенциалов. Поищите простенькие - вам надо всего-то на два канала (RX и TX).
2) Можно попробовать использовать буфер на одном полевом транзисторе (второй вариант схемы здесь).
3) Можно попробовать просто "подтянуть" TX телефона к пяти вольтам, через резистор 10ком. Но это не поможет, если на выходе у него пушпульная схема.
4) Можно почитать в документации на ваш МК - можно ли как-то влиять на порог нуля и единицы на входе - если на него влияет напряжение питание, то можно понизить его, чтобы достичь напряжения уверенной единицы на уровне 2,4В, к примеру.
5) Можно перейти на МК с питанием 3,3В. Наверное, это более болезненный для вас вариант.
0
sertaliano
3 / 3 / 1
Регистрация: 24.06.2016
Сообщений: 54
10.02.2017, 15:55  [ТС] 6
Спасибо за варианты.
п.4 - пробовал - не помогло.
п.5 - больно! очень))
п.2 - вот его я и думал попробовать
п.4 - а в каком разделе искать, не подскажите?
а по п.1 - не понял))

Добавлено через 2 часа 52 минуты
нашел по даташиту:
Vih = от 2.0 В до VDD
ViL = 0 - 0.8V

программно проверил срабатывание на лог 0. Все работает.
C
1
2
3
4
5
6
      if (!input(PIN_c7)){
            tog(led);
            delay_ms(1000);
            tog(led);
            delay_ms(1000);
      }
0
10.02.2017, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2017, 15:55

Взаимодействие компьютера с микроконтроллером AVR
Подскажите, как с помощью c# написать программу взаимодействия с микроконтроллером AVR по USORT...

MSP430. Как измерить сопротивление микроконтроллером?
msp430G2553 LaunchPad, Energia int tmp = 0; int AnalogPin = 5; void setup() { ...

Управление микроконтроллером em78p156elpj-g замена RF модуля на Wi-Fi
Добрый день! Очень нужна помощь, что бы понять, есть ли возможность модернизировать схему. В теме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru