PIC16F877A a PIC16F627A zlobí UART
Moderátor: Moderátoři
- Přílohy
-
- 16f627.asm
- (15.09 KiB) Staženo 163 x
-
- 16f877.asm
- (11.02 KiB) Staženo 156 x
Skús upraviť, aby po chybe sa to vrátilo na START_R
Kód: Vybrat vše
START_R
BSF RCSTA,CREN ; zapne sa prijem do RCREG
BTFSS PIR1,RCIF ;ceka na prichozi data (dokud neni naplnen RCREG)
goto $-1 ;
BTFSC RCSTA,OERR ;TEST CHYBY PRIJMU
GOTO RESTARTPRIJMU ;
BTFSC RCSTA,FERR ;TEST CHYBY PRIJMU
GOTO CHYBARAMEC ;
MOVF RCREG,0
MOVWF VYBER
MOVWF PORTB ;zobrazeni prichozich dat na LED
GOTO MENU
RESTARTPRIJMU
BCF RCSTA,4
; BSF RCSTA,4 ; nastavi sa po START
GOTO START_R
CHYBARAMEC
MOVF RCREG,0
GOTO START_R
V popisoch sa uvádza, že tento modul je za istých podmienok vhodný aj pre prenos dat usartom. Nesmie sa prenášať impulz dlhší ako 5ms ...či už Hi, alebo Lo.
Takže z toho mi vychádza:
1/skrátiť úvodný vysielanie BLANK) na cca 2..4ms maximálne 5...10x400us (predtým som radil predĺžiť ..čo je chyba
2/ ak sa to podarí rozbehnúť ...potom zvýšiť prenosovú rýchlosť aspoň na 4,8kBd. Pri prenose 0x00(pri 2,4kBd) by hrozilo prekročenie 5ms kladného impulzu ak by po prenose okamžite nenasledoval nasledujúci znak.
Samozrejme manchester kódovanie by riešilo aj nižšie prenosové rýchlosti a najmä prázdne miesta medzi dátami asynchrónneho prenosu.
- Přílohy
-
- 16f877.asm
- (11.15 KiB) Staženo 144 x
-
- 16f627.asm
- (14.85 KiB) Staženo 148 x
Potom zapnutie vysielača z PWRDN do TX nie je podľa obrázku
Kód: Vybrat vše
INIT
MOVLW B'00000111'
MOVWF CMCON
BSF STATUS,RP0 ;BANKA1
MOVLW B'00000000' ;VYSTUPNI PORT A
MOVWF TRISA
MOVLW B'00000110' ;REZERVACE PORTU B,1,2 PRO SERIOVY PRENOS
MOVWF TRISB
MOVLW D'129' ;KONSTANTA PRO VYPOCET BAUD RATE
MOVWF SPBRG
MOVLW B'00100000' ;zapnuti TXEN
MOVWF TXSTA ;
CLRF PIE1 ;Vypnout preruseni na periferiich
BCF STATUS,RP0 ;BANKA0
; BSF RCSTA,SPEN ;POVOLENI SERIOVEHO PORTU
; BCF RCSTA,CREN ;POVOLENI PRIJMU ....teraz este bez prijmu
;INICIAKZACE BEZDRATOVEHO MODULU
BSF ENABLE
CALL WAIT20uS
BSF RXTX
CALL WAIT400uS
; !!!po BST RCSTA, SPEN sa TX nastav9 do Hi...!!! oprava
BSF RCSTA,SPEN ;POVOLENI SERIOVEHO PORTU
BCF RCSTA,CREN ;POVOLENI PRIJMU ....teraz este bez
možno ...?
a to potom treba aj pre 877
Aby sa nemuselo stále prepínať TRISB,RB2 in/out stačí na RB2 dať odpor 4k7 na GND aby sa na TX vnútila Lo aj v režime RB2 ak je IN.
To isté potom aj pre 877 tam je to tuším RC6
Keď sa prepína modul na čítanie a počas čítania ak bude TX=Hi, asi nebude vadiť.
Odpory to nakonec nebyly .... chyba byla, že se jeden z modulů vypínal příliš brzo, (moduly mají vlastní buffer, tím pádem je signál trošičku spožděný, než na výstupu z procesoru) a uříznul se stop bit ... což byl problém ... jelikož signál pak nebyl pro druhý procesor rozeznatelný ...
Tak tedy trochu opožděně děkuji a omlouvám se za nezdvořilost