ilyafm98 |
Дата: Сб, 28.05.2011, 23:56 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 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 включительно работает а если увеличить то идет какая то абра кадабра. Может кто то сталкивался с такой проблемой и может чем то помочь?
|
|
|
|
ADMIN |
Дата: Вс, 29.05.2011, 02:25 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 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. Или ты на протоне пишешь?
|
|
|
|
ilyafm98 |
Дата: Вс, 29.05.2011, 12:31 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 08.12.2010
Статус:
Offline
|
Поставил кварц на 12 МГц, залил вашу прошивку и все заработало. В итоге поставил кварц на 20 МГц, буду работать с ним для большей надежности. Огромное спасибо, ADMIN!
|
|
|
|
ADMIN |
Дата: Вс, 29.05.2011, 13:45 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Да не во что особо. Только непонятно, ты на PBP или на протоне все-таки?
|
|
|
|
ilyafm98 |
Дата: Вс, 29.05.2011, 15:33 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Используй циклы для последовательных байтов. Или используй дополнительный массив для хранения выводимых данных
|
|
|
|