Технический Портал Левши Среда, 18.10.2017, 08:27
| RSS
Меню сайта

Категории раздела
ПИТАНИЕ [17]
МЕТАЛЛО ДЕТЕКТОРЫ [1]
СВЯЗЬ [5]
НАЧИНАЮЩИМ [6]
МикроКонтроллеры [15]
АВТОМАТИКА [4]
АУДИО. [2]
СИСТЕМЫ ОХРАНЫ И БЕЗОПАСНОСТИ [6]
СИСТЕМЫ ДЛЯ САМООБОРОНЫ [1]
ТЕЛЕФОНИЯ [7]

Мини-чат

Главная » Статьи » РАДИОЭЛЕКТРОНИКА » МикроКонтроллеры

Пользовательский приемник GPS
Пользовательский приемник GPS
Краткие характеристики модуля 46240-25.
Lassen iQ модуль является полностью функциональным приемником с очень низким энергопотреблением, малыми габаритами для встраиваемых приложений.
Габариты модуля 26х26х6мм, потребляемая мощность менее 89 мВт.
Модуль вычисляет координаты места, скорость и точное время. Обмен с пользовательской частью может проводиться по трем протоколам - NMEA 3.0 ASCII протоколу, Trimble ASCII Interface Protocol (TAIP), и TSIP – Trimble Standart Interface Protocol.
Напряжение питания модуля – 3,0-3,6 В.




Рисунок 2 – Вид модуля без металлического экрана

Модуль оснащен двумя разъемами – один для подключения линий обмена данными и напряжения питания, другой – для подключения антенны.



Рисунок 3 – Вид на разъемы модуля

Описание выводов разъема данных/питания
Номер вывода          Наименование                   Описание
1 TXD A Выход последовательного порта А, совместимый с 3,3 В ТТЛ логикой
2 GND Общий для сигналов и питания
3 RXD A Вход последовательного порта А, совместимый с 3,3 В ТТЛ логикой
4 PPS Выход секундного импульса
5 TXDB Выход последовательного порта В, совместимый с 3,3 В ТТЛ логикой
6 RXDB Вход последовательного порта В, совместимый с 3,3 В ТТЛ логикой
7 Prime Power (VCC) Питание +3,3В
8 Battery Backup
Power Батарея резервного питания, +3,3В



Рисунок 4 – Вид снизу, нумерация выводов

Для корректной работы модуля, входы и выходы последовательных портов должны быть подключены к +3,3 В через подтягивающие сопротивления от 1 до 100 кОм.



Рисунок 5 – Сверх компактная встраиваемая антенна



Рисунок 6 – Компактная выносная антенна с магнитом

В данном случае была использована антенна, показанная на рис. 5.

Схема и программа были отлажены с помощью экспериментальной платы, описанной в
http://elektron.ucoz.ru/publ/8-1-0-51 .
К порту А платы был подключен символьный ЖКИ WC1602Аxxxx по схеме с 4 сигнальными линиями следующим образом



Рисунок 7 – Схема подключения ЖКИ к разъему платы


ЖКИ может быть любой другой, с таким же количеством символом, HD44780 совместимый.



Рисунок 8 – Схема подключения модуля к разъему платы

Использованные диоды – 1N4148 необходимы для получения напряжения питания примерно 3,3В. Подтягивающие резисторы – 100к, если нет батареи на 3,3 В, то вывод 8 можно соединить с выводом Vcc модуля. При необходимости подобрать сопротивление R5.

Заводские настройки портов А и В модуля
Порт Входной протокол Настройки по умолчанию Выходной протокол Настройки по умолчанию
Порт А TSIP Baud Rate: 9600
Data Bits: 8
Parity: Odd
Stop Bits: 1
No Flow Control TSIP Baud Rate: 9600
Data Bits: 8
Parity: Odd
Stop Bits: 1
No Flow Control
Порт В RTCM Baud Rate: 4800
Data Bits: 8
Parity: None
Stop Bits: 1
No Flow Control NMEA Baud Rate: 4800
Data Bits: 8
Parity: None
Stop Bits: 1
No Flow Control

В нашем приложении используется только выход порта В с протоколом NMEA

Короткое описание используемых сообщений протокола NMEA 0183 (National Marine Electronics Association)
Формат сообщения NMEA 0183 протокола следующий:
$IDMSG,D1,D2,D3,D4,.......,Dn*CS[CR][LF]
Где
“$” – символ начала сообщения
ID – идентификатор устройства, посылающего сообщение, в нашем случае – GP идентификатор определяет GPS устройство
MSG – идентификатор сообщения
“,” – кома, разделитель полей сообщения
Dn – поле сообщения, поля между собой разделены комами
“*” – звездочка, определяет начало посылки контрольной суммы
CS – контрольная сумма
[CR][LF] - carriage return [CR] и line feed [LF] – определяют конец сообщения.

По заводским настройкам, модуль посылает ежесекундно два сообщения – GGA и VTG. В данном устройстве используется только сообщение GGA.
Структура сообщения GGA
Сообщение GGA включает данные о времени места, координатах и некоторые данные статуса приемника.

$GPGGA,hhmmss.ss,llll.lll,a,nnnnn.nnn,b,t,uu,v.v,w.w,M,x.x,M,y.y,zzzz*hh <CR><LF>

Параметры полей GGA сообщения
№ поля Описание
1 Время UTC позиции (посылается, когда возможно вычислить UTC отклонение
2,3 Широта, N (Север) или S (Юг)
4,5 Долгота, E (Восток) или W (Запад)
6 Индикатор качества GPS – 0=отсутствует GPS, 1= GPS, 2=дифференциальный GPS
7 Количество используемых для вычислений сателлитов
8 Горизонтальная погрешность позиции (HDOP)
9,10 Возвышение антенны над уровнем моря, М= метры
11,12 Geoidal Separation
13 Время с последнего вычисления дифференциального GPS
14 Differential Reference Station ID (0000 to 1023)
hh Контрольная сумма

Сообщение VTG несет данные о скорости движения объекта и сервисные данные

Приведенная ниже программа обрабатывает данные GGA сообщения и результаты выводит на дисплей. Так как дисплей имеет ограниченное количество знакомест, то переключение между показателями дисплея производится нажатием кнопки SW2 на плате.
Программа была написана на ассемблере и отлажена в VMlab.
В прилагаемом архиве полностью рабочий проект, исходники и прошивка.
При запуске симуляции появляется стартовое сообщение, нужно подождать секунд 10 и нажать кнопку TX File в окне отладчика Control Panel. При этом начинается прием сообщений, сохраненных в файле gps.tx (лог ком порта). Для переключения между экранами нужно нажимать и удерживать некоторое время кнопку 0 на клавиатуре окна Control Panel.
Если собрано все в железе, то для приема сигнала от спутников нужно, чтобы антенна «видела» небо напрямую (хотя бы через окно  ). Далее, минут через 15-20 будут вычислены координаты.
По умолчанию, на дисплее появляется сообщение с временем UTC и качеством сигнала. После нажатия на кнопку, на дисплее будет отображаться горизонтальная погрешность позиции и качество GPS. Если нажать еще раз, на дисплей будут выведены координаты местности. Экраны переключаются циклически.
Если пропал сигнал, то соотв. поля заполняются звездочками



Рисунок 9 – Скриншот отладочной сессии в VMlab


Рисунок 10 – Время и качество сигнала



Рисунок 11 – Горизонтальная погрешность и количество используемых сателлитов. Чем меньше погрешность, тем точнее вычисляются координаты.



Рисунок 12 – Координаты местности. 49d – градусы, 40 – минуты, 4720 – доли минут.

Файл проекта
; ************************************************************
; PROJECT: GPS Receiver V1.0
; AUTHOR: VasylYE @IskraWorkGroup v.yefymchuk@gmail.com
; http://elektron.ucoz.ru/
; ************************************************************

; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega16"
.PROGRAM "gps.asm"
.TARGET "gps.hex"

.TRACE ; Activate micro trace

; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.POWER VDD=5 VSS=0 ; Power nodes
.CLOCK 4meg ; Micro clock
.STORE 250m ; Trace (micro+signals) storage time

; Micro nodes: RESET, AREF, PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, ACO, TIM1OVF
; Define here the hardware around the micro
; ------------------------------------------------------------

;Символьний рідкокристалічний дисплей підключений до ПОРТ А
;RS RW E D7 D6 D5 D4 D3 D2 D1 D0
X1 LCD(16 2 250k) PA0 PA1 PA2 PA7 PA6 PA5 PA4 nc3 nc2 nc1 nc0

;Кнопка переключення дисплея ПОРТ Д.2

K0 PD2 VSS

R1 PD2 VDD 6.8k

C1 PD2 VSS 0.1u

;Термінал UART 4800 bps 8 bit no parity 1 stop bit

XGPS TTY(4800 8) PD0 PD1

.plot V(PD0) v(PD1)


Текст программы:

; ************************************************************
; PROJECT: GPS Receiver V1.0
; AUTHOR: VasylYE @IskraWorkGroup v.yefymchuk@gmail.com
; http://elektron.ucoz.ru/
; ************************************************************
;
.include "C:\VMLAB\include\m16def.inc"

; Визначення імен регістрів загального призначення
; Тимчасовий регістр
.def temp = R16
; Регістр індекса
.def index = R18
; Регістр флагів
.def flags = R19
; Регістр обміну даними
.def Data = R20
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Макроси
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Макрос запису в РК дисплей символів із памяті програм
.MACRO LCD_printf
ldi ZH, HIGH(2*@0)
ldi ZL, LOW (2*@0)
call LCD_write
.ENDMACRO
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Макрос запису в РК дисплей символів із памяті даних
.MACRO LCD_prints
ldi XH, HIGH(@0)
ldi XL, LOW (@0)
ldi index, @1
call LCD_write_s
.ENDMACRO
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++

; Вектор переривань
;
.ORG 0x000
reset:
rjmp start

.ORG 0x02A
; Програма стартує звідси після RESET або включення живлення
;
start:
; Ініціалізація вказівника стеку
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, LOW(RAMEND)
out SPL, temp
; Ініціалізація порта А для підключення LCD дисплея
ldi temp, 0x00
out PORTA, temp
ldi temp, 0xFF
out DDRA, temp
; Ініціалізація порта PD2 (кнопка переключення екрану)
cbi DDRD, 2
sbi PORTD, 2
; Ініціалізація LCD дисплея
call Delay
call Ldelay
call LCD_init
; Стартове повідомлення
LCD_printf Mes1
; Переводим курсор в другий рядок
ldi Data, 0x40
call LCD_cursor
LCD_printf Mes2
; Затримка в реальнім приладі 5 сек.
call ldelay ;call wdelay




; Ініціалізація сервісних повідомлень дисплея
;
ldi flags, 0x00
ldi temp, '*'
ldi XH, HIGH(Time)
ldi XL, LOW(Time)
ldi index, 0x00
fill: st X+, temp
inc index
cpi index, 0x28
brne fill
ldi XH, HIGH(Qu_ind)
ldi XL, LOW(Qu_ind)
ldi temp, '0'
st X, temp


; Ініціалізація UART 4800 bps no patity 1 stop bit
call UART_init


;
;******************************************************
;******************************************************
; Головний цикл програми
forever:
; Приймаєм перший символ
call UART_rx
; Перевіряєм, якщо прийшов '$' - значить початок повідомлення
cpi Data, '$'
brne forever ;якщо не '$', то чекаєм дальше
; якщо прийшов '$' то приймаєм наступний символ ('G')
call UART_rx
; 'P'
call UART_rx
; 'G' or 'V'
call UART_rx
cpi Data, 'G'
breq _Is_GGA
cpi Data, 'V'
breq _Is_VTG
jmp forever
;Прийшло $GPGGA повідомлення
_Is_GGA:
call Get_GGA
jmp forever ;після повідомлення GGA потрібно отримати повідомлення VTG
_Is_VTG:
call Get_VTG
jmp Load_Disp

;Виведення інфи на дисплей + перевірка кнопки
Load_Disp:
;clear disp
ldi Data, 0x01
call LCD_cmd
call eDelay
sbic PIND, 2
jmp d00
call delay
sbic PIND, 2
jmp d00
inc flags
cpi flags, 0x03
brne d00
ldi flags, 0x00
d00:
cpi flags, 0x00
brne d01
call Screen1
jmp forever
d01:
cpi flags, 0x01
brne d02
call Screen2
jmp forever

d02:
cpi flags, 0x02
brne d03
call Screen3
d03:
jmp forever


;++++++++++++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Бібліотека функцій
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функції виводу даних на дисплей
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Screen1 виводить на дисплей час UTC
; і режим роботи GPS
Screen1:
LCD_printf MTime
ldi Data, 0x07
call LCD_cursor
LCD_prints Time, 2
ldi Data, ':'
call LCD_dat
LCD_prints (Time+2), 2
ldi Data, ':'
call LCD_dat
LCD_prints (Time+4), 2

ldi Data, 0x40
call LCD_cursor
LCD_printf MQual
lds temp, Qu_Ind
cpi temp, '2'
brne d000
LCD_printf MDGPS
ret
d000:
cpi temp, '1'
brne d001
LCD_printf MGPS
ret
d001:
LCD_printf MNoG
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Screen2 виводить на дисплей
; і
Screen2:
LCD_printf MHDOP
LCD_prints HDOP, 4
ldi Data, 0x40
call LCD_cursor
LCD_printf MSATN
LCD_prints SNum, 2
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Screen3 виводить на дисплей
; і
Screen3:
;latitude first!
_is_nord:
lds temp, Lat_Dir
cpi temp, 'N'
brne _is_south
LCD_printf MNord
_l: LCD_prints Lat, 2
ldi Data, 'd'
call LCD_dat
LCD_prints (Lat+2), 7
jmp _is_east
_is_south:
LCD_printf MSouth
jmp _l

_is_east:
ldi Data, 0x40
call LCD_cursor
lds temp, Lon_Dir
cpi temp, 'E'
brne _is_west
LCD_printf MEast
_d: LCD_prints Lon, 3
ldi Data, 'd'
call LCD_dat
LCD_prints (Lon+3), 7
jmp scr3_end
_is_west:
LCD_printf MWest
jmp _d
scr3_end:
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++


;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функції обробки протоколу NMEA
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Get_GGA обробляє повідомлення $GPGGA
Get_GGA:
call UART_rx ; 'G'
call UART_rx ; 'A'
call UART_rx ; ','
;зчитування ЮТС часу позиції
_Get_UTC:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_UTC
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(time)
ldi XL, LOW(time)
ldi index, 0x00
g00: ST X+, temp
inc index
cpi index, 0x0A
brne g00
jmp _Get_Lat
_Valid_UTC:
;повідомлення не порожнє
ldi XH, HIGH(time)
ldi XL, LOW(time)
;ldi index, 0x00
v00: st X+, Data
; inc index
call UART_rx ;читаєм символ
; cpi index, 0x09
cpi Data, ','
brne v00
;Зчитування широти
_Get_Lat:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_Lat
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(Lat)
ldi XL, LOW(Lat)
ldi index, 0x00
L00: ST X+, temp
inc index
cpi index, 0x0A
brne L00
jmp _Get_Lat_Dir
_Valid_Lat:
;повідомлення не порожнє
ldi XH, HIGH(Lat)
ldi XL, LOW(Lat)
L01: st X+, Data
call UART_rx
cpi Data, ','
brne L01
;Зчитування напряму широти
_Get_Lat_Dir:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_Lat_Dir
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(Lat_Dir)
ldi XL, LOW(Lat_Dir)
ST X, temp
jmp _Get_Lon
_Valid_Lat_Dir:
ldi XH, HIGH(Lat_Dir)
ldi XL, LOW(Lat_Dir)
ST X, Data
call UART_rx ;!!!!!
;Зчитування довготи
_Get_Lon:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_Lon
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(Lon)
ldi XL, LOW(Lon)
ldi index, 0x00
L10: ST X+, temp
inc index
cpi index, 0x0B
brne L10
jmp _Get_Lon_Dir
_Valid_Lon:
ldi XH, HIGH(Lon)
ldi XL, Low(Lon)
vl0: st X+, Data
call UART_rx
cpi Data, ','
brne vl0
;Зчитування напряму довготи
_Get_Lon_Dir:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_Lon_Dir
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(Lon_Dir)
ldi XL, LOW(Lon_Dir)
ST X, temp
jmp _Get_Qual
_Valid_Lon_Dir:
ldi XH, HIGH(Lon_Dir)
ldi XL, LOW(Lon_Dir)
ST X, Data
call UART_rx ;!!!!!
;Зчитування якості GPS сигналу
_Get_Qual:
call UART_rx
ldi XH, HIGH(Qu_Ind)
ldi XL, LOW(Qu_Ind)
st X, Data
; cpi Data, '0'
; breq _End_GGA ;Якщо якість= 0,
call UART_rx ;!!!!!
;Зчитування кількості використаних сателітів
_Get_SNum:
call UART_rx
ldi XH, HIGH(SNum)
ldi XL, LOW(SNum)
st X+, Data
call UART_rx
st X+, Data
call UART_rx ;!!!!!
;Зчитування HDOP
_Get_HDOP:
call UART_rx
;перевіряєм, чи не порожнє повідомлення
cpi Data, ','
brne _Valid_HDOP
;якщо повідомлення порожнє, заповнюєм поля зірочками '*'
ldi temp, '*'
ldi XH, HIGH(HDOP)
ldi XL, LOW(HDOP)
ldi index, 0x00
H00: st X+, temp
inc index
cpi index, 0x04
brne H00
_Valid_HDOP:
ldi XH, HIGH(HDOP)
ldi XL, LOW(HDOP)
H01: st X+, Data
call UART_rx
cpi Data, ','
brne H01
_End_GGA:
call UART_rx
cpi Data, 0x0A;0x0A! 0x0D
brne _End_GGA
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Get_VTG обробляє повідомлення $GPVTG
Get_VTG:

_End_VTG: ; ЗАГЛУШКА !!!
call UART_rx ; ЗАГЛУШКА !!!
cpi Data, 0x0A;0x0A ; ЗАГЛУШКА !!!
brne _End_VTG ; ЗАГЛУШКА !!!

ret

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функції роботи з LCD дисплеєм
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція LCD_cmd посилає команду, що знаходиться в
; регістрі Data
LCD_cmd:
push Data ;зберігаєм регістр даних в стек
andi Data, 0xF0 ;обнуляєм молодших 4 біти
sbr Data, 4 ;встановляєм OE біт рівний лог. 1
out PORTA, Data ;посилаєм перший півбайт в дисплей
nop ;затримка приблизно 0,5 мкс
nop ;
cbi PORTA, 2 ;обнуляєм біт OE
pop Data ;відновлюєм регістр даних із стека
swap Data ;міняєм місцями півбайти регістру даних
andi Data, 0xF0 ;обнуляєм молодших 4 біти
sbr Data, 4 ; ...
out PORTA, Data ;
nop
nop
cbi PORTA, 2 ;
ldi temp, 0x60 ;затримка приблизно 50 мкс необхідна для
del0:
dec temp ;того, щоб контролер дисплея відпрацював команду
brne del0
ret ;вихід із функції
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція LCD_dat посилає дані, що знаходиться в
; регістрі Data
LCD_dat:
push Data ; ...
andi Data, 0xF0 ;
sbr Data, 4 ;
sbr Data, 1 ;встановляєм біт признак даних рівним лог. 1
out PORTA, data ;
nop ;
nop ;
cbi PORTA, 2 ;
pop Data ;
swap Data ;
andi Data, 0xF0 ;
sbr Data, 4 ;
sbr Data, 1 ;встановляєм біт признак даних рівним лог. 1
out PORTA, data ;
nop ;
nop ;
cbi PORTA, 2 ;

ldi temp, 0x60 ;затримка приблизно 50 мкс необхідна для
del1:
dec temp ;того, щоб контролер дисплея обробив дані
brne del1
ret ;вихід із функції
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція ініціалізації дисплея
LCD_init:
call Delay
ldi temp, 0b00100100
out PORTA, temp
nop
nop
cbi PORTA, 2
call Delay
ldi Data, 0b00101000
call LCD_cmd
ldi Data, 0b00001000
call LCD_cmd
ldi Data, 0b00000001
call LCD_cmd
call eDelay
ldi Data, 0b00000110
call LCD_cmd
ldi DATA, 0b00001100
call LCD_cmd
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Встановлення курсора на задану позицію
LCD_cursor:
ori DATA, 0x80
call LCD_cmd
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Читання із FLASH памяті і відправка до LCD
LCD_write:
L2:
lpm
mov DATA, R0
tst DATA
brne L3
jmp L4
L3:
cpi DATA, 0x0D
brne LC
ldi DATA, 0xC0
call LCD_cmd
jmp L3D
LC:
call LCD_dat
L3D:
adiw ZL, 1
jmp L2
L4:
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Читання із SRAM памяті і відправка до LCD
;регістр index містить к-сть байт для передачі в дисплей
LCD_write_s:
ldi temp, 0x00
push temp
s:
ld data, X+
call LCD_dat
pop temp
inc temp
push temp
cp temp, index
brne s
pop temp
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функції задержки
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
Delay:
ldi temp, 0xFF
D1:
dec temp
brne D1
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ldelay:
ldi temp, 0xFF
D2:
push temp
call Delay
pop temp
dec temp
brne D2
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
eDelay:
ldi temp, 0x0E
D21:
push temp
call Delay
pop temp
dec temp
brne D21
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
Wdelay:
ldi temp, 0x64
D3:
push temp
call ldelay
pop temp
dec temp
brne D3
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функції роботи з UART
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Функція Ініціалізації
UART_init:
ldi temp, 0x00
out UBRRH, temp
ldi temp, 0x33
out UBRRL, temp
ldi R16,(1<<RXEN)|(1<<TXEN)
out UCSRB, temp
ldi R16, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp
ret
UART_tx:
sbis UCSRA, UDRE
jmp UART_tx
out UDR, DATA
ret

UART_rx:
sbis UCSRA, RXC
jmp UART_rx
in DATA, UDR
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++

;//////////////////////////////////////////////////////
;Системні повідомлення
Mes1: .DB "GPS Receiver", 0x00
Mes2: .DB "Iskra WorkGroup", 0x00

MTime: .DB "UTC", 0x00
MGPS: .DB "GPS", 0x00
MQual: .DB "GPS_Qual ", 0x00
MDgps: .DB "DiffGPS", 0x00
MNoG: .DB "NoGPS", 0x00
MSatN: .DB "Satellite Num ", 0x00
MHDOP: .DB "HorizDOP ", 0x00
Meast: .DB "E.Lon", 0x00
Mwest: .DB "W.Lon", 0x00
Msouth: .DB "S.Lat ", 0x00
Mnord: .DB "N.Lat ", 0x00

;//////////////////////////////////////////////////////
;Системні змінні
.DSEG
Time: .BYTE 10 ;повідомлення часу
Lat: .BYTE 10 ;повідомлення широти
Lat_Dir: .BYTE 1 ;напрям широти
Lon: .BYTE 11 ;повідомлення довготи
Lon_Dir: .BYTE 1 ;напрям довготи
Qu_Ind: .BYTE 1 ;індикатор якості сигналу
SNum: .BYTE 2 ;Кількість використаних сателітів
HDOP: .BYTE 4 ;HDOP
.CSEG



Временные задержки определены для кварца 4,0 МГц.
Для 16-й меги нужно прошить соотв. фьюзы (если она новая)
Команда для AVreal (устанавливает то, что надо):
avreal32 +mega16 -p1 -ab -o0 -n -w -%% -fCKSEL=F,CKOPT=0,SUT=3 >fuse.output

Все вопросы, как обычно, на форум  http://elektron.ucoz.ru/forum/9

















------------6JEh33A3pXAQvEf5TTonds Content-Disposition: form-data; name="file1"; filename="ris12.gif" Content-Type: image/gif GIF87a�c�������������������@ ` � � � � @ @@@`@�@�@�@�@` `@```�`�`�`�`� �@�`���������� �@�`���������� �@�`���������� �@�`���������@ @@@`@�@�@�@�@ @ @@ @` @� @� @� @� @@@ @@@@@`@@�@@�@@�@@�@@`@ `@@`@``@�`@�`@�`@�`@�@ �@@�@`�@��@��@��@��@�@ �@@�@`�@��@��@��@��@�@ �@@�@`�@��@��@��@��@�@ �@@�@`�@��@��@��@��@� �@�`��������� � �@ �` �� �� �� �� �@� @�@@�`@��@��@��@��@�`� `�@`�``��`��`��`��`��� ��@��`���������������� ��@��`�����������ࠀ�� ��@��`���������������� ��@��`��������������� �@�`��������� � �@ �` �� �� �� �� �@� @�@@�`@��@��@��@��@�`� `�@`�``��`��`��`��`��� ��@��`���������������� ��@��`���������������� ��@��`����������
Категория: МикроКонтроллеры | Добавил: ЛЕВША (24.05.2008) | Автор: VasylYE
Просмотров: 5248 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статистика

Наш опрос
КАКАЯ ОБЛАСТЬ ЭЛЕКТРОНИКИ ВАС ИНТЕРЕСУЕТ?
Всего ответов: 2464

Друзья сайта
  • Форумы Игростроя
  • CЛОВЕНСК
  • RemEXpert
  • ПАЯЛЬНИК
  • МЕДТЕХНИКА

  • Copyright MyCorp © 2017