Отговори на тема  [ 7 мнения ] 
Софтуерен UART 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Софтуерен UART
Здравейте!
Търсих из форума и из нета информация за софтуерна емулация на УАРТ,попрочетох и седнах да пиша код. Понеже не съм много сигурен дали съм пресметал времената правилно, реших да напиша програмата така, че самостоятелно да си сменя настройките, определящи времето м/у импулсите. Идеята ми беше да включа контролера към компютъра, да дам едни настройки на терминала и той да чака данните, който съобщават брой на циклите на таймер0.
Да, ама не стана.
Някой може ли да даде акъл по въпроса?
Код:
   PROCESSOR   12F629
   LIST      p=12F629
   #include   <p12f629.inc>
   __CONFIG   _CP_OFF & _WDT_OFF & _MCLRE_ON & _HS_OSC
   #define      B0   bcf STATUS,RP0;izbor na banka 0
   #define      B1   bsf STATUS,RP0;izbor na banka 1
   
W      EQU   0
F      EQU   1
SPEED   EQU   25H
TSPEED   EQU   26H      ;KOPIE NA SPEED ZA IZPRA6TANE KYM TERMINALA
NoBIT   EQU   27H
COUNTER   EQU   28H

   ORG      H'00'
   GOTO   START
;======================================================================   
START   B1
      MOVLW   B'10001000'   ;PULL-UPS ENABLED,PRESCALER ASSIGNED TO WDT
      MOVWF   OPTION_REG
      BCF      TRISIO,1   ;GP1 IZHOD
      B0
      GOTO   MAIN   
;=======================================================================   
SEND
   MOVLW   D'1'
   MOVWF   SPEED
   MOVWF   TSPEED
   MOVWF   COUNTER
S1   CALL   TRANSFER
   INCFSZ   SPEED
   MOVFW   SPEED
   MOVWF   TSPEED
   MOVWF   COUNTER
   GOTO   S1
;========================================================================   
TRANSFER
   MOVLW   D'8'
   MOVWF   NoBIT
   BSF      GPIO,1   ;GENERIRANE NA START BIT I VISOKO NIVO PREDI NEGO
   CALL   TIME
   BCF      GPIO,1

TRAN
   CALL   TIME            
   RLF      TSPEED
   BTFSC   STATUS,C
   BSF      GPIO,1
   BTFSS   STATUS,C
   BCF      GPIO,1
   DECFSZ   NoBIT
   GOTO   TRAN
         ;IZPRA6TANE NA 1 STOP BIT
   CALL   TIME
   BCF      GPIO,1
   CALL TIME
   BSF      GPIO,1
   RETURN
;========================================================================   
TIME
      CLRF   TMR0
AGAIN   BCF   INTCON,T0IF
LOOP   BTFSS   INTCON,T0IF
      GOTO   LOOP
      DECFSZ   COUNTER,F
      GOTO   AGAIN
   RETURN
;========================================================================   
MAIN
   CALL   SEND
      
   END


Пет Сеп 28, 2007 11:57 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение Re: Софтуерен UART
Не можеш да очакваш всичко да става от първия път.
Необходим ти е цифров или аналогов запомнящ осцилоскоп и проблемчето ще го регистрираш лесно. Може и с обикновен осцилоскоп да пробваш, като софтуерно пуснеш непрекъснат поток от данни по интерфейса.

_________________
Две плюс две е приблизително равно на четири. Факт!


Пет Сеп 28, 2007 12:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Пусни си една симулация и ще видиш че въпросния ПИН 1 изобщо не реагира - стои си в 0.
Пробвай това :

START B1
bcf STATUS,RP0 ;Bank 0
clrf GPIO ;Init GPIO
movlw 07h ;Set GP<2:0> to
movwf CMCON ;digital IO
bsf STATUS,RP0 ;Bank 1


MOVLW B'10001000' ;PULL-UPS ENABLED,PRESCALER ASSIGNED TO WDT
MOVWF OPTION_REG
movlw 0x2D ;0B00111101
banksel TRISIO
andwf TRISIO,1

B0
GOTO MAIN


Пет Сеп 28, 2007 2:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
Цитат:
сни си една симулация и ще видиш че въпросния ПИН 1 изобщо не реагира - стои си в 0.

това е от версията на симулатора(преполагам използваш mplab7.6?). реагира си пинчето.
Реших да пусна просто един диод да мига и забелязах нещо много странно:
каквато и стойност да запиша в OPTION_REG за делителя, диода не променя честотата си на мигане. На какво може да се дължи това? Изтествах с крайни стойности:
Код:
      MOVLW   B'10001000'   
      MOVWF   OPTION_REG
и после с
Код:
      MOVLW   B'10001111'   
      MOVWF   OPTION_REG


Пет Окт 05, 2007 10:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Мда
dan написа:
Цитат:
сни си една симулация и ще видиш че въпросния ПИН 1 изобщо не реагира - стои си в 0.

това е от версията на симулатора(преполагам използваш mplab7.6?). реагира си пинчето.
Реших да пусна просто един диод да мига и забелязах нещо много странно:
каквато и стойност да запиша в OPTION_REG за делителя, диода не променя честотата си на мигане. На какво може да се дължи това? Изтествах с крайни стойности:
Код:
      MOVLW   B'10001000'   
      MOVWF   OPTION_REG
и после с
Код:
      MOVLW   B'10001111'   
      MOVWF   OPTION_REG

А прочете ли в документацията за какво се ползва бит 3 в option_reg ?
PSA: Prescaler Assignment bit
1 = Prescaler assigned to the WDT
0 = Prescaler assigned to Timer0
Ползваш ли WDT, гледам че си го изключил , ами превключи ли делителя към TMR0 :idea: :!:

MOVLW B'10000111'
MOVWF OPTION_REG

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Пет Окт 05, 2007 10:55 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
мерси за корекцията. Оправих го, обаче сега без делител мига по-бавно, отколкото с делител?!?!?!
Код:
      MOVLW   B'10000000'   ;тук мига бързо
      MOVWF   OPTION_REG
Код:
      MOVLW   B'10001000';тук мига бавно   
      MOVWF   OPTION_REG

въобще не знам дали мисля правилно:
честота на кварца-4MHz => входна честота на "таймер-блока"-1MHz => при PS2-PS0=000 (делител на 2), честотата на входа на брояча трябва да е 0.5MHz(период 2us)=> времето за препълване от 00 през FF до 00 трябва да е 257цикъла х 2us = 564us .т.е. би трябвало диода да мига с честота около 1kHz,а в момента е някъде около 4-5Hz. Верни ли са ми сметките по-горе?


Пет Окт 05, 2007 2:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
не знам какво направих, но то тръгна :)(мигалката де :)) мерси за помощта!


Пет Окт 05, 2007 3:17 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни