Популярные проекты

WEB PICµBASIC LOGIC CONTROLLER

USB PICµBASIC Mid Hardware

USB PICµBASIC LOGIC CONTROLLER

DDS генератор сигналов "OSKAR-DDS"

Термостол для оплавления паяльной пасты

Осциллограф Карманный "OSKAR" V3.1

Электроника и механика 3-х координатного станка ЧПУ (Hobby CNC)

Простой счетчик

Измеритель ESR и емкости конденсаторов

Самодельный установщик SMD компонентов - раскладочный станок "SMD PLACER V2"

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

Выключатель /диммер светодиодных лент с ДУ.

Светомузыка «СЕМИЦВЕТИК» + автомат световых эффектов.

Универсальный прибор для автомобиля. Часы, термометр, вольтметр, тахометр.

Все, что нельзя запрограммировать на ассемблере, приходится паять.

      Этот сайт посвящен моим проектам на PIC контроллерах, доступных для публичного освещения. Все приведенные схемы реализованы в железе и работают в настоящее время в быту или производстве. Для написания программ использован пакет MPLAB/х , свободно распространяемый фирмой MICROCHIP. Используется программатор PICKIT2/3, ICD2/3. Любую конструкцию можно собрать самому, даже если она платная и получить бесплатно код разблокировки. Также можно приобрести в качестве набора для сборки или готового изделия. Принимаются заказы на разработку аналогово-цифровой или цифровой электроники, систем управления и электроники для производства с применением контроллеров.
Вопросы и предложения писать на почту Gennadiy.V@gmail.com
Если у Вас есть интересные предложения, закакзы или вопросы и форум Вам не помог - адрес тот же.


USB CDC для PIC18F14K50 / PIC18F13K50 на ассемблере
Описание и инструкция по применению.

     Пример реализации обработчика прерываний модуля USB для недорогих контроллеров от Микрочип.

    Дружба с USB началась с использования примера от Микрочипа "USB Device - CDC - Basic Demo - C18 - Low Pin Count USB Development Kit". Все было хорошо, но скомпилировать для работы на процессоре PIC18F13K50 не получилось вообще у меня. Применял PIC18F14K50, и тут вдруг потребовалось много ОЗУ для основной задачи. Переходить на PIC18F2455 / PIC18F2550 не хотелось да и по количеству ног PIC18F14K50 меня вполне устраивал. К тому же он дешевле.
Для изучения и отладки собрал макет по следующей схеме. Печатная плата не разводилась, достаточно было макетной платы.

  Принципиальная схема макета (кликабельно)

     Скачать в формате sPlan 7.0
    Все началось с того ,что на просторах интернета встретились исходники на АСМ для PIC18F2550 USB стека.
После небольшой доработки напильником получилась данная программа обработки прерываний от модуля USB PIC18F14K50 / PIC18F13K50.

    Распределение памяти:

;******************************************************************************
;             RAM 
;******************************************************************************                        
	      	CBLOCK 0x000                        
;***************************
	STATUS_USB ;состояние USB
	STATUS_TEMP		;save STATUS register 	FOR LOW IRQ
	WREG_TEMP		;save working register	FOR LOW IRQ
	BSR_TEMP		;save BSR register	FOR LOW IRQ
	FLAGS			;BIT FLAGS
	LEN_DATA_READ_FROM_USB
;**************************
; пользовательские переменные 
	LOCAL_TEMP
	LOCAL_TEMP1
	LOCAL_TEMP2			
	ee_addr
	ee_data
 ;**************************
;EMPTY
      ENDC  
;*********************************
      CBLOCK 0x0100
;EMPTY
      ENDC  
;*********************************
      CBLOCK 0x0200 ; FULL BUSY
 
	BD0STAT_OUT		;0x00
	BD0CNT_OUT
	BD0ADRL_OUT
	BD0ADRH_OUT
			
	BD0STAT_IN		;0x04
	BD0CNT_IN
	BD0ADRL_IN
	BD0ADRH_IN
			
	BD1STAT_OUT		;0x08
	BD1CNT_OUT
	BD1ADRL_OUT
	BD1ADRH_OUT
	
	BD1STAT_IN		;0x0C
	BD1CNT_IN
	BD1ADRL_IN
	BD1ADRH_IN
	
	BD2STAT_OUT		;0x10
	BD2CNT_OUT
	BD2ADRL_OUT
	BD2ADRH_OUT
	
	BD2STAT_IN		;0x14
	BD2CNT_IN
	BD2ADRL_IN
	BD2ADRH_IN
	
	BD3STAT_OUT		;0x18
	BD3CNT_OUT
	BD3ADRL_OUT
	BD3ADRH_OUT
	
	BD3STAT_IN		;0x1C
	BD3CNT_IN
	BD3ADRL_IN
	BD3ADRH_IN		;0x1F


	TOCHKA_0_BUFF_IN   	:.8		;0x20- ;0x27

	TOCHKA_0_BUFF_OUT  	:.24		;0x28- ;0x3F

	TOCHKA_2_BUFF_OUT  	:.64		;0x40- ;0x7F

	INPUT_BUFFER		:.64	;0x80- ;0xDF TOCHKA_3 IN
	
	OUTPUT_BUFFER		:.64	;0xC0- ;0xFF TOCHKA_3 OUT

        	ENDC  

LEN_TOCHKA_0_BUFF_IN   	equ .8		;0x20- ;0x27

LEN_TOCHKA_0_BUFF_OUT  	equ .24		;0x28- ;0x3F

LEN_TOCHKA_2_BUFF_OUT  	equ .64		;0x40- ;0x7F

LEN_INPUT_BUFFER		equ .64		;0x80- ;0xDF TOCHKA_3 IN
	
LEN_OUTPUT_BUFFER		equ .64		;0xC0- ;0xFF TOCHKA_3 OUT

;******************************************************************************
; структура флагов
;******************************************************************************
#define   FLAG_DATA_USB_PRESENT				FLAGS,0	,AB ;
#define   FLAG_DATA_SEND_TO_USB_OK			FLAGS,1 ,AB;
#define   FLAG_USB_CONFIGURED_STATE			FLAGS,2 ,AB;
#define   FLAG_PORT_OPEN				FLAGS,3 ,AB ;
#define   FLAG_NEED_SEND				FLAGS,4 ,AB;  
#define   FLAG_5					FLAGS,5 ,AB ;
#define   FLAG_6					FLAGS,6 ,AB ;  
#define   FLAG_7					FLAGS,7 ,AB; 
;******************************************************************************



     Банк 0 - использовано всего 6 ячеек

STATUS_USB - состояние USB, используется в прерывании
STATUS_TEMP, WREG_TEMP ,BSR_TEMP - сохранение важных регистров , если используются прерывания низкого приоритета.
FLAGS - битовый регистр, флаги текущего состояния
LEN_DATA_READ_FROM_USB - количество принятых байт от компьютера

     Банк 1 свободен, для данных пользователя

     Банк 2 полностью занят под USB (Buffer Descriptors, USB Data or User Data)

INPUT_BUFFER - буфер, длинной 64 байта, где будут принятые данные от компьютера
OUTPUT_BUFFER - буфер, длинной 64 байта, где будут данные для отпраки на компьютер

     Флаги состояния

    FLAG_DATA_USB_PRESENT - получены данные от компьютера.
Программа пользователя следит за этим флагом, если он установлен в "1" то в буфере INPUT_BUFFER , который имеет максимальную длину LEN_INPUT_BUFFER находятся принятые данные длинной LEN_DATA_READ_FROM_USB.
После обработки этих данных пользователь должен сбросить флаг FLAG_DATA_USB_PRESENT
    FLAG_DATA_SEND_TO_USB_OK
Этот флаг сообщает пользователю, что данные были переданы на компьютер. Сбрасывается пользователем. В нашей тестовой программе пользователя не используется.
    FLAG_USB_CONFIGURED_STATE
Этот флаг сообщает пользователю, что устройство подключено к компьютеру и на компьютере успешно установлен драйвер устройства.
Действий не требуется
    FLAG_PORT_OPEN
Этот флаг сообщает пользователю, что на компьютере отрыт виртуальный СОМ порт этого устройства для обмена.
Теперь можно предавать данные на компьютер.
    FLAG_NEED_SEND
Это флаг пользователя, когда данные готовы на отправку к компьютеру.

    Конфигурирование и включение модуля USB

; ==========================================================
; ***************   START   ********************************
; ==========================================================
START
; ==========================================================
; Конфигурирование и включение модуля USB.
; ==========================================================
_INIT
	CLRF		STATUS_USB,AB	;СТАТУС USB		
	CLRF		TRISA, AB
	CLRF		TRISB, 	AB	;НАСТРОЙКА ПОРТОВ
	CLRF		TRISC, AB   	
	CLRF		INTCON2, AB
	CLRF		PIE1,  AB 	;ЗАПРЕТ ПРЕРЫВАНИЙ TM2
	CLRF		PIE2, AB
	CLRF		IPR1, AB
	CLRF		CCP1CON,AB 
	CLRF		ADCON0, AB
	CLRF		UCON, AB
	CLRF		SSPCON1, AB
	CLRF		T1CON, AB
	CLRF		T2CON, AB
	CLRF		T3CON, AB	
	MOVLW		B'10010010'
	MOVWF		T0CON, AB 	;TMR0 ВКЛЮЧЁН ПРЕДДЕЛИТЕЛЬ 8
	CLRF		BAUDCON, AB
	MOVLW		B'10100110'	;НАСТРОЙКА СКОРОСТИ ПЕРЕДАЧИ
	MOVWF		TXSTA, AB
	MOVLW		B'10100000'
	MOVWF		RCSTA, AB
	MOVLW		.00	        ; 48MZ .155 19200 .25 115200 .12 230400   .00  3000000
	MOVWF		SPBRG, AB
        MOVLW       B'00010100'
            MOVWF       UCFG,AB 
            CLRF        UIE,AB 		; ЗАПРЕТИТЬ ПРЕРЫВАНИЯ
            BSF         UCON,USBEN,AB	 ;ВКЛЮЧИТЬ USB      
	    CLRF        UIR,AB	
            BSF         UIE,URSTIE,AB
            BCF         RCON,IPEN,AB 
            BSF         INTCON,IPEN,AB 	  ;ВЫКЛЮЧЕНА ПРИОРИТЕТНАЯ СИСТЕМА
            BSF         INTCON,GIEL,AB 
            BSF         IPR2,USBIP,AB 
            BSF         PIE2,USBIE,AB     ;РАЗРЕШИТЬ ПРЕРЫВАНИЯ
;********************

			CLRF 		FLAGS , AB
;***********************************************************************

     Эту часть придется отредактировать , если использовать другие модули процессора

     Пример программы пользователя

;*********************************************************************************************
					;USER 
;*********************************************************************************************
;*********************************************************************************************
BEGIN
;**************   TEST READY FOR SEND	*************************
					;ЗДЕСЬ НАЧИНАЕТСЯ ОСНОВНАЯ ПРОГРАММА
					;ПРИМЕР ОТПРАВКИ ПАКЕТОВ В USB
	MOVLB   	 0X02    	;2 БАНК
	BTFSC   	 0X1C,7,BB  	;ПРОВЕРКА ПРИНАДЛЕЖНОСТИ БУФЕРА 3 IN
	BRA		 BEGIN
;**************
; ПРОВЕРКА ПОДКЛЮЧЕННОГО usb И НАСТРОЕННОГО ДРАЙВЕРА НА КОМПЕ
	BTFSS		FLAG_USB_CONFIGURED_STATE
	BRA		BEGIN		
;**************
; ПРОВЕРКА ОТКРЫТОГО com ПОРТА  
	BTFSS		  FLAG_PORT_OPEN
	BRA		  BEGIN		
;**************
;==================================================================================
;==================================================================================
;	ДРАЙВЕР ПОДКЮЧЕН, ПОРТ ОТКРЫТ , МОЖНО ЧИТАТЬ И ПЕРЕДАВАТЬ 
;==================================================================================
;==================================================================================

; какая то программа пользователя

;==================================================================================
; ПРОВЕРКА НА НАЛИЧИЕ ДАННЫХ  , ПРИНЯТЫХ ПО USB		
	BTFSS		FLAG_DATA_USB_PRESENT
	BRA		SKIP_PARSING_INPUT
	BCF		FLAG_DATA_USB_PRESENT
;**************
;	ЕСТЬ ДАННЫЕ  В БУФФЕРЕ  INPUT_BUFFER+.0 : INPUT_BUFFER+.63
; 	ДЛИННОЙ  		LEN_DATA_READ_FROM_USB
;........
; ОБРАБОТКА ВХОДНЫХ ДАНННЫХ
;........
	BSF			FLAG_NEED_SEND
SKIP_PARSING_INPUT:
;==================================================================================
;==================================================================================

; какая то программа пользователя

;==================================================================================
;==================================================================================
; ПРОВЕРКА , НАДО ЛИ ПЕРЕДАВАТЬ ,ЕСЛИ НАДО , ЗАПОЛНЯЕМ БУФФЕР И ПЕРЕДАЕМ
	BTFSS		FLAG_NEED_SEND
	BRA			SKIP_SEND_TO_USB
	BCF			FLAG_NEED_SEND
; ОТПРАВИМ НАЗАД
	MOVLW		0X02
;КОЛЛИЧЕСТВО ОТПРАВЛЯЕМЫХ БАЙТ ОТ 0 ДО 64 БАЙТА
	ADDWF		LEN_DATA_READ_FROM_USB,W,AB
	ANDLW		b'00000111' ; ВСЕГО НЕ БОЛЕЕ 7 ДЛЯ ПРИМЕРА
;В WREG   ЧИСЛО БАЙТ НА ОТПРАВКУ
	MOVWF		BD3CNT_IN,BB  ; ОТДАДИМ КОЛИЧКСТВО МОДУЛЮ usb
; ЗАПОЛНИМ БУФЕР   OUTPUT_BUFFER+.0 : OUTPUT_BUFFER +.64  --   ДЛИНА 1-64 БАЙТА
	MOVLW		' '            	;ПЕРВЫЙ БАЙТ ПОСЫЛКИ В ДАННОМ СЛУЧАЕ ПРОБЕЛ 
	MOVWF		OUTPUT_BUFFER+.0,BB
	MOVF		LEN_DATA_READ_FROM_USB,W,AB	;ВТОРОЙ БАЙТ ПОСЫЛКИ (ДЛИННА )
	ADDLW		0x30	
	MOVWF		OUTPUT_BUFFER+.1,BB
;  СКОПИРУЕМ ЭХО ПЕРВЫЕ 5 
	MOVFF		INPUT_BUFFER+.0,	OUTPUT_BUFFER+.2
	MOVFF		INPUT_BUFFER+.1,	OUTPUT_BUFFER+.3
	MOVFF		INPUT_BUFFER+.2,	OUTPUT_BUFFER+.4
	MOVFF		INPUT_BUFFER+.3,	OUTPUT_BUFFER+.5
	MOVFF		INPUT_BUFFER+.4,	OUTPUT_BUFFER+.6
;МОЖНО ОТПРАВЛЯТЬ 
	CALL	USB_SEND

SKIP_SEND_TO_USB
;==================================================================================

;**********************************************************************************
;Остальная программа пользователя
;**********************************************************************************


			GOTO			BEGIN

;**********************************************************************************
;**********************************************************************************



     Вот так все просто.

     В итоге у нас имеется обработчик прерываний, который прозрачно для основной программы обеспечивает коммуникацию по USB.
Бонусом получено 500 байт свободного ОЗУ ( для PIC18F14K50).
В примере также есть подпрограммы задержки и чтения/ записи в EEPROM. Если использовать схему со светодиодами ,то при открытии порта на компьютере получим имитацию бегущего огня.


ПО распространяется под лицензией Freeware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.

Скачать исходник.
Скачать прошивку.
Скачать драйвер виртуального порта от Микрочипа.
Обсудить на форуме
Купить