Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
HSERIN. Настройка скорости.
ilyafm98 Дата: Сб, 28.05.2011, 23:56  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 18
Репутация: 0   ±
Замечания:   ±
На сайте с 08.12.2010

Статус: Offline

Добрый вечер! Нужно связать pic16f873a с компьютером через USART на скорости 57600, формат данных- 8N1, тактовая частота 4мгц.
Для создания заголовка использовал программу ProtonHeaderMaker. С ее помощью был получен такой заголовок:
Code

DECLARE  HSERIAL_BAUD  57600   ' Скорость передачи данных, бод
DECLARE  HSERIAL_TXSTA = %00100100   ' Включить передатчик USART
DECLARE  HSERIAL_RCSTA = %10010000   ' Включить приемник USART
DECLARE  HSERIAL_SPBRG  3   ' Значение регистра SPBRG для выбранной скорости
DECLARE  HSERIAL_CLEAR = ON   ' Автоматическая очистка бита ошибки переполнения



Но почему то добиться связи на этой скорости не получается- только на скорости до 19200 включительно работает а если увеличить то идет какая то абра кадабра.
Может кто то сталкивался с такой проблемой и может чем то помочь?
ЯНДЕКС Дата: 28.05.2011
ADMIN Дата: Вс, 29.05.2011, 02:25  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Слишком маленькая частота процессора для такой скорости - большая ошибка приема/передачи. Попробуй 12 МГц и такой код:
Code


Device = 16F873A

Xtal=12
Declare  Hserial_Baud  57600   ' Sets the BAUD rate that will be used to receive a value serially
Declare  Hserial_TXSTA = %00100100   ' Sets the respective PICmicro hardware register TXSTA. Transmitter enable
Declare  Hserial_RCSTA = %10000000   ' Sets the respective PICmicro hardware register, RCSTA. Receiver disable
Declare  Hserial_SPBRG  12   ' Sets the respective PICmicro hardware register, SPBRG
Declare  Hserial_Clear = On   ' Clear the overflow error flag before commencing a read
                      
'-------------------------- Настройки портов ---------------------------------
                      
PortB_Pullups = OFF   ' Выключить подтягивающие резисторы на PORTB
Declare  All_Digital = On' Каждый порт выполняет свою функцию по умолчанию
PORTC=0
TRISC = 0   
main:
      HRSOut "A","S","S",13
      DelayMS 1000
GoTo main



Это было во-первых. Во-вторых, ProtonHeaderMaker предназначен для Протона, а не для PBP. Или ты на протоне пишешь?
Прикрепления: hserout.rar (35.3 Kb)
ilyafm98 Дата: Вс, 29.05.2011, 12:31  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 18
Репутация: 0   ±
Замечания:   ±
На сайте с 08.12.2010

Статус: Offline

Поставил кварц на 12 МГц, залил вашу прошивку и все заработало. В итоге поставил кварц на 20 МГц, буду работать с ним для большей надежности.
Огромное спасибо, ADMIN!
ADMIN Дата: Вс, 29.05.2011, 13:45  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да не во что особо. Только непонятно, ты на PBP или на протоне все-таки?
ilyafm98 Дата: Вс, 29.05.2011, 15:33  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 18
Репутация: 0   ±
Замечания:   ±
На сайте с 08.12.2010

Статус: Offline

Я на обоих :-) Для пиков 16-серии пользую PICBASIC, для 18-й серии пользую PROTON (PBP у меня не компилирует прошивки для 18-й серии, по поводу чего я уже задавал вопрос на форуме, в результате был выбран протон для работы с 18-й серией, правда пока мало работаю с ней), в Протоне с помощью плагина рассчитал новый заголовок для кварца 20 МГц, и подставил полученные значения в PICBASIC, естественно откорректировав его немного.
Code

Define osc 20

' Defines for Hardware Serial Port
DEFINE HSER_BAUD  57600               ' 57600 Baud for NMEA Compatibility
DEFINE HSER_RCSTA 90h                  ' Receive enabled
DEFINE HSER_TXSTA 24h                  ' Transmit enabled
DEFINE HSER_SPBRG 21
DEFINE HSER_CLROERR 1                  'Auto Reset Buffer Overrun Errors    
                    

                 ' Set the port directions
TRISC=%10000000                         ' Set PortC USART RX as an input

MAXDATA         con 70                  'The buffer Size for GPS Data

gpsdata         var byte[MAXDATA]       ' Max length of a GPS  

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4  
DEFINE LCD_BITS 4  
DEFINE LCD_LINES 2  
DEFINE LCD_COMMANDUS 2000  
DEFINE LCD_DATAUS 50
Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
LCDOUT $FE, 1
PAUSE 500
main:
HSERIN 100, Main, [WAIT(",A,"), STR gpsdata\MAXDATA\40]
LCDOUT $FE,2,  gpsdata[0],gpsdata[1],".",gpsdata[2],gpsdata[3],gpsdata[5],gpsdata[6],gpsdata[7],gpsdata[8],gpsdata[9],"/",gpsdata[27],gpsdata[28],gpsdata[29],gpsdata[30],gpsdata[31]
LCDOUT $FE,$C0,gpsdata[14],gpsdata[15],".",gpsdata[16],gpsdata[17],gpsdata[19],gpsdata[20],gpsdata[21],gpsdata[22],gpsdata[23],"/",gpsdata[33],gpsdata[34],gpsdata[35],gpsdata[36],gpsdata[37]
goto main


Программа предназначена для приема данных с GPS модуля LEA-4H. Сначала пытался связаться хотя бы с компьютером, после того как связь заработала стал выводить показания GPS на дисплей- текущие координаты, курс и скорость движения.
Admin, может заодно подскажете, можно ли выводить на дисплей данные не по одному байту, перечисляя их поочереди как сделано у меня, а сразу строкой, например во второй строке дисплея идет перечисление с 16 по 23 байт, можно ли избавиться от этого перечисления?
ADMIN Дата: Вс, 29.05.2011, 16:47  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Используй циклы для последовательных байтов. Или используй дополнительный массив для хранения выводимых данных
  • Страница 1 из 1
  • 1
Поиск: