Перейти к содержанию

Uart + Siemens C65


Рекомендуемые сообщения

Есть сотовый телефон Siemens C65. Написал на PIC16f628a прошивку, пытаюсь общаться с телефоном посредством AT-команд.

Пробовал разные скорости на МК(19200, 9600, 57600, etc) но телефон упорно не реагирует. МК питается от БП через кренку 5В.

Сначало тел просто вырубался при подключении моего устройства, потом я добавил на линию TX стабилитрон 3,3в и на TX, RX повесил 100-омные резисторы. Больше не выключается, но на МК всё равно не реагирует.

Есть дата-кабель на CОМ-порт(max232), если к нему подключить телефон и попробовать на разных скоростях поотправлять AT-команды через HyperTerminal, то тлф их принимает и исполняет(звонок).

Если подключить к тому же дата-кабелю свой МК, то я вижу приходящие AT-команды в Hyper Terrminal'е.

А тлф и МК никак не дружат :( TX, RX местами не путал. GND на месте..

В чём может быть проблема? Как согласовать логические уровни МК и Siemens C65? Может кто-то имел опыт с этим тлф... :unsure:

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я сейчас тоже с УАРТ мучаюсь. :)

Скажите, а программа, которую вы упомянули, может отправлять произвольные байты по КОМ-порту ? Типа, отправить байт: 11001010 ? Или последоватлеьность таких вот байтов ?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

list p=16F628A, r=DEC, f=INHX8M
#include "P16F628A.INC"

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF

#define BAUD D'9600'
#define XTAL D'4'  ; 4MHz
#define UART_X ((XTAL * D'1000000') / (D'16' * BAUD)) - 1
#define UART_9600 ((XTAL * D'1000000') / (D'16' * D'9600')) - 1
#define UART_19200 ((XTAL * D'1000000') / (D'16' * D'19200')) - 1

	CBLOCK 0x10  ; Temporary storage
		  state
		  l1,l2
	   ENDC

xx equ 0x16
COUNT1	  equ		70h		;счетчик для подпрограммы временной задержки
COUNT2	  equ		71h		;счетчик для подпрограммы временной задержки
TEMP		equ		72h		;
COUNT3	  equ		73h		;счетчик для подпрограммы временной задержки		   
SAVE_STAT   equ		74h		;используется для сохранения статуса в прерывании
FLAGS	   equ		75h		;регистр флагов
SAVE_W	  equ		76h		;используется для сохранения W в прерывании
ADDRES	  equ		77h 
;-----------------------
org 0x00;program start
goto Start
org		4
goto InterruptHandler
;------------------------

Start:;

; =============== INIT ==================
clrw		;обнуление аккомулятора
bcf	STATUS,RP0;переход в 0-й
bcf	STATUS,RP1;банк
movlw b'11010000'  ;Разрешение прерывания, разрешение от INT
movwf INTCON	   ;(0Bh)в любом банке 
movwf	PIR1;сброс всех флагов прерываний
movwf	PIE1;запрет прерываний от переферийных модулей

;=======================================================	
;далее выключаем неиспользуемые модули микроконтроллера
;=======================================================
;отключение модуля компараторов
movlw	07h;загрузили в аккомулятор число "00000000"
movwf	CMCON;включили биты CM0...CM2 регистра CMCON, что
	;соответствует отключению модуля компараторов
;отключение модуля USART
;	clrf	RCSTA;обнулили регистр RCSTA, выключив бит SPEN(7-й)
	;что соответствует отключеннию USART
;отключение модуля TMR2
clrf	T2CON;обнулили регистр T2CON, выключив бит TMR2ON(2-й)
	;что соответствует отключению TMR2
;отключение модуля CCP
clrf	CCP1CON;обнулили регистр CCP1CON, выключив биты
	;CCP1M0...CCP1M3
	;(0-й...3-й), что соответствует отключению модуля CCP
;отключение источника опорного напряжения
bsf		STATUS,RP0;1-й банк
clrf	VRCON;обнулили регистр VRCON(в 1-м банке), выключив
;	;бит VREN(7-й),что соответствует отключению ИОН

;отключение TMR0
bcf		OPTION_REG,T0CS;обнуляем бит T0CS, что соответствует  
		;тактированию TMR0 от внутреннего сигнала
bcf		STATUS,RP0;0-й банк	

clrf	PCON^80H;ПРЕРЫВАНИЯ ПО ПИТАНИЮ ЗАПРЕЩЕНЫ.


bcf	STATUS,RP0;переход в 0-й
clrf	PORTA
clrf	PORTB

bsf	STATUS,RP0	;1-й банк
bsf PIE1,5		 ;(8Ch) бит 5 Разрешаем прерывание по RS232
movlw	B'00000000'; загрузили в ак-р число для TRISA
	; RA0-RA4 - выходы
	; RA5-RA7 - входы
movwf	TRISA; переправили в TRISA
movlw	B'11111111'; загрузили в ак-р число для TRISB
	; RB0-RB4 - выходы
	; RB5-RB7 - входы
movwf	TRISB; переправили в TRISB
;bcf	OPTION_REG,RBPU; ВКЛЮЧИЛИ ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ


bsf STATUS, RP0
movlw UART_X	   ; Скорость на 4мгц-ах
movwf SPBRG
movlw b'00100100'
movwf TXSTA
bcf  STATUS, RP0
movlw b'10110000'
movwf RCSTA

bcf STATUS, RP0
bcf PORTA, 0
bcf PORTA, 1
call delay1
call delay1
call delay1

movlw d'65'
movwf xx

; ================ ОТПРАВКА ДАННЫХ ============
repit	
call delay1
bcf PORTA, 1	; мигаю светодиодами

; Отключение Эхо-ответа
bsf PORTA, 0
call delay1
movlw 'A'
call SendChar
movlw 'T'
call SendChar
movlw '0'
call SendChar
movlw 0x0D
call SendChar
bcf PORTA, 0
call delay1

; Снимаем трубу?
bsf PORTA, 0
call delay1
movlw 'A'
call SendChar
movlw 'T'
call SendChar
movlw 'H'
call SendChar
movlw '0'
call SendChar
movlw 0x0D
call SendChar
bcf PORTA, 0
call delay1

; Набор номера
bsf PORTA, 0
call delay1
movlw 'A'
call SendChar
movlw 'T'
call SendChar
movlw 'D'
call SendChar
movlw ' '
call SendChar
movlw '4'
call SendChar
movlw '7'
call SendChar
movlw '0'
call SendChar
movlw '0'
call SendChar
movlw '0'
call SendChar
movlw '0'
call SendChar
movlw ';'
call SendChar
movlw 0x0D	  ; переход на новую строку
call SendChar
bcf PORTA, 0
bsf PORTA, 1
call big_delay

	goto repit


; ______________________________

;Подпрограмма отправки байта по УАРТ
SendChar
movwf TXREG
bsf STATUS, RP0
btfss TXSTA, 1
goto  $-1 
bcf STATUS, RP0
return


; ______________________________

;Delay subroutine
delay1	  MOVLW	  d'100'	; Delay duration
		MOVWF	  COUNT1	; Initialize COUNT1
		MOVLW	  d'255'	; Maximum value
		MOVWF	  COUNT2	; Initialize COUNT2
		DECFSZ	 COUNT2,F 		   ; COUNT2--
		GOTO $-1			   ; Loop until COUNT2=0
		DECFSZ	 COUNT1,F		   ; COUNT1--
		GOTO $-5							 ; Loop until COUNT1=0
		RETURN				   ; Return
;----------------------------------------------
;Big delay subroutine 
big_delay	MOVLW	d'70'	; Delay duration
	MOVWF	COUNT3; Initialize COUNT1
mm		CALL	delay1
	DECFSZ	COUNT3,F; COUNT3--
	GOTO 	mm	; Loop until COUNT3=0
	RETURN		; Return


InterruptHandler	; Не использовал.
movwf	  SAVE_W
swapf	  STATUS,w   ;обменять местами полубайты и сохранить в W
movwf	  SAVE_STAT
bcf		STATUS,RP0   ;установка 0 банка
;--------------------------------------------------

		  btfsc	  PIR1,5	 ;Прерывание от RS232 ?
		goto	   RS232	  ;Да, прерывание от RS232.
		BCF		INTCON,1   ;сбросить бит прерывания от внешнего источника
		goto	   S1		 ;Выходим

RS232	  
		movfw	   RCREG   ;Считали пришедший байт
		bsf 		STATUS, RP0;1
			movwf 		EEDATA
		movfw		ADDRES
		movwf 		EEADR
		incf 		ADDRES

		bsf EECON1, WREN
		movlw h'55'
		movwf EECON2
		movlw h'AA'
		movwf EECON2
		bsf EECON1, WR
		bcf EECON1, WREN

EE_WAIT_WR			
		btfsc EECON1, WR
		goto EE_WAIT_WR

		bcf STATUS, RP0			  




;---- действия по восстановлению состояния --------
S1	bcf		PIR1,5	 ;Сбросили флаг прерывания
swapf	  SAVE_STAT,w
		movwf	  STATUS
		swapf	  SAVE_W,f
		swapf	  SAVE_W,w
retfie

End

куски ответа телефона записываю в ЕЕПРОМ, там почти все нулевые байты приходят, иногда какие-то кривые символы(непечатные) попадаются.

p.s. пардон, мусье, не знал о существовании тега codebox, первый раз размещаю большой блок кода)

Изменено пользователем kalatromba
Блин ну кто это будет читать??? Wowa.
Ссылка на комментарий
Поделиться на другие сайты

Ещё пробовал вот эту прошивку. Не помогло..

http://gsmhorn.narod.ru/gsmhornnew.html

в квадратных скобках - пины.

Я сейчас тоже с УАРТ мучаюсь. :)

Скажите, а программа, которую вы упомянули, может отправлять произвольные байты по КОМ-порту ? Типа, отправить байт: 11001010 ? Или последоватлеьность таких вот байтов ?

Именно это она и делает. Только через преобразователь уровней на max232. И комп отлично всё принимает..

post-110177-1261413454_thumb.jpg

Изменено пользователем kalatromba
Ссылка на комментарий
Поделиться на другие сайты

попробуй сигналы проинвертировать. Кстати, а как контроллер общается с компом, нормально?

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

попробуй сигналы проинвертировать. Кстати, а как контроллер общается с компом, нормально?

В том то и дело, что МК с компом через max232 общается нормально. И комп с телефоном через этот же max 232 нормально общается.

А тел с МК - нет..

Ссылка на комментарий
Поделиться на другие сайты

;отключение модуля USART

; clrf RCSTA;обнулили регистр RCSTA, выключив бит SPEN(7-й)

;что соответствует отключеннию USART

* прошу прощения, не заметил, что в комментарии. :)

П.С. Приведите, пожалуйста кусок кода, где МК принимает данные от компа, а то у меня именно этот момент не выходит :(

П.П.С. за программу спасибо. Сейчас скачаю :)

Изменено пользователем Cavalryman
Ссылка на комментарий
Поделиться на другие сайты

П.С. Приведите, пожалуйста кусок кода, где МК принимает данные от компа, а то у меня именно этот момент не выходит :(

Я разрешаю прирывание от модуля UART:

bsf PIE1,5 ;(8Ch) бит 5 Разрешаем прерывание.

Далее, при поступлении данных, вызывается прирывание и МК прыгает на InterruptHandler, где считывает один байт из Приёмника и сохраняет его в EEPROM.

Изменено пользователем kalatromba
Ссылка на комментарий
Поделиться на другие сайты

Ясно. Скажите, а вот мой вариант (предположительно нерабочий). Есть тут что-то, бросающееся в глаза, как фатальная ошибка ?

Понятно, что такой чёткий прием именно 8 байт, без учета всяких случайностей - это неправильно, но мне надо хотя бы как-то чтобы работало, а потом уже "вылизывать".

;-------------------------------------------------------------------------
; RS232 setup
BANKSEL SPBRG
movlw .51		; magic calculations (это число из даташита для данного кварца (8МГц) и для 9600 БОД)
movwf SPBRG
BANKSEL TXSTA
movlw b'00100100'; brgh = high (2)
movwf TXSTA			 
BANKSEL RCSTA; 
movlw b'10010000'; enable Async Reception
movwf RCSTA
; end RS232 setup
; ------------------------------------------------------------------------
<.....другие "инициализации".....>
; Main routine:
; 1) wait for RS-232 data:

receive:
bsf RCSTA,4	; enable RS-232 reception
BANKSEL PIR1; correct bank
bsf PORTC,1	; light LED (wait for RS-232 reception) ТУТ зажигаю контрольный светодиод: ждем ровно 8 байт
btfss PIR1,RCIF; check for received data
goto $-1	; complete ?
movf RCREG,W; put received data into W
return
movwf Data0
call receive
movwf Data1
call receive
movwf Data2
call receive
movwf Data3
call receive
movwf Data4
call receive
movwf Data5
call receive
movwf Data6
call receive
movwf Data7
bcf RCSTA,4 ; Disable RS-232 reception
bcf PORTC,1	; erase LED (RS-232 data received) Диод гаснет: байты приняты.
<...остальной код...>

Так вот, контрольный светодиод не гаснет. Есть вариант, что остальной код проходит слишком быстро и я не замечаю, что диод гаснет, т.к. программа возвращается в режим ожидания 8-ми байтов. Но всё устройство в целом не работает.

МК - PIC16F887

конвертер уровней - МАХ3232 этот товарищ работает: на его выход, со стороны МК, цеплял светодиод и он мерцал при передаче данных на минимальной скорости.

---------------------------------

Alexeyslav ответил мне в другой теме про скорость мигания светодиодов. Учитывая весь код, скорее всего я не замечаю мерцания.

Изменено пользователем Cavalryman
Ссылка на комментарий
Поделиться на другие сайты

С преобразованием уровней можно не заморачиватья. У Семенов стоит "стекляха" - преобазователь, нормирующий входящие сигналы до уровня внутренней логики. Тем более МАХ232 работает с уровнем TTL 5В. Дело в чем то другом.

Ссылка на комментарий
Поделиться на другие сайты

Cavalryman, попробуй проверить свою прошивку в Proteus с виртуальным терминалом.

Ок, спасиб. Таки пидеться Протеус поставить. :)

С преобразованием уровней можно не заморачиватья. У Семенов стоит "стекляха" - преобазователь, нормирующий входящие сигналы до уровня внутренней логики. Тем более МАХ232 работает с уровнем TTL 5В. Дело в чем то другом.

Данный МАХ преобразовывает в +3 вольта, но это так и надо. А вот кто такие "Семены", я, к сожалению, не знаю. :)

Ссылка на комментарий
Поделиться на другие сайты

С преобразованием уровней можно не заморачиватья. У Семенов стоит "стекляха" - преобазователь, нормирующий входящие сигналы до уровня внутренней логики. Тем более МАХ232 работает с уровнем TTL 5В. Дело в чем то другом.

Правда семён вырубался при начале передачи с МК, пока не поставил стабилитрон и резисторы. :)

Схема у меня не замысловата, МК, резонатор, пару светодиодов и всё.

Ради интереса попробовал RX-TX местами поменять, эмоций ноль :) Проверил, тел и МК живы.

Ссылка на комментарий
Поделиться на другие сайты

Семен - Siemens - жаргон ремонтников мобильников.

Cavalryman, МАХ232 - работает от 5В, МАХ3232 - от 3В. Когда занимался ремонтом и прошивками переделал кучу всяких дата-кабелей собственного производства (вплоть до КР590КНхх). Сименсы спокойно работают при уровне сигналов 5В. Если конечно горе-ремонтник не выкинул "стекляху"-фильтр во время ремонта.

kalatromba, если телефон хоть как-то реагировал на передачу с МК, пусть даже отключением, то после доработки он вообще перестал "замечать" МК и сигналы с него. Думаешь это правильно?

Ссылка на комментарий
Поделиться на другие сайты

Геннадий, блин, я забыл указать маленькую деталь... :unsure:

Если просто подключить дата кабель(max232, 5 вольт питания берется с USB и подаётся на телефон), то индикатор заряда на тлф не горит. Но если попробовать с компьютера передать какие-нибудь данные(SiMoCO, HyperTerminal) то индикатор загорается и зяряд идёт до тех пор пока не отключишь дата-кабель. Видимо ему какой-то толчек нужен, чтоли.

С обычным зарядным устройством ессно такой фигни нет.

Так вот МК со стабилитроном когда начинает передавать данные, то заряд тоже начинает идти, индикатор загорается. Тоесть тлф чует передачу..

С учётом того что МК и комп общаются нормально, у меня остается только две мысли. Запитать МК напрямую с аккумулятора телефона(попробую на днях) или телефону не нравится погрешность в скорости UART микроконтроллера, что врядли..

Ссылка на комментарий
Поделиться на другие сайты

Alex, в других прошивках, которые я находил в интернете символ возврата каретки не передается.

Но я всё равно добавил ещё 0x0A для пробы, может это особенность Siemens c65 - не помогло. Щас, кстати подумал.. А разве не наоборот надо, 0x0A 0x0D? \r\n

Запитывание МК прям с аккумулятора телефона ничего не дало. Непруха какаято :)

Ссылка на комментарий
Поделиться на другие сайты

Попробуйте еще с 5-й и 7-й ноги телефонного коннектора повесить по резистору 10кОм на выв.2 (GND). И еще вопрос. Смысл подавать напряжение на выв.1 (Charge) телефона?

Ссылка на комментарий
Поделиться на другие сайты

Смысл подавать напряжение на выв.1 (Charge) телефона?

Смысл в зарядке телефона :)

По крайней мере я так подумал, когда посмотрел на разъем оригинального зарядного устройства от тлф - там только две линии используются, Charge и Gnd.

Хотя, как я понимаю, тлф догадывается что к Charge подано питание и по активност на TX, RX. (при начале передачи данных через дата-кабель или МК индикатор зарядки загорается)

Попробую :)

Ссылка на комментарий
Поделиться на другие сайты

У меня А75 не работал без питания на этом пине, причём телефон не заряжался при 5V :wacko:

Завёлся нормально. Без преобразования уровней вырубался при попытке что нибудь ему послать.

Ссылка на комментарий
Поделиться на другие сайты

Напаял на DCD и RTS 4,7 килоомные резисторы, подключил к сотовому, питание подалось прям с тлф, МК ожил, и.. Короче всё работает. Если подключить ещё питание с БП, то идёт заряд и МК тоже работает.

Спасибо, Геннадий!

Изменено пользователем kalatromba
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...