PIC16F877A a PIC16F627A zlobí UART

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#31 Příspěvek od procesor »

Dalo by sa to aj trochu "učesať" ...urobiť z opakujúceho sa kódu podprogramy. :wink:
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#32 Příspěvek od walleyman »

Díky, moc, zatim to můžu jenom trochu urovnat a rotřídít na podprogramy, což jsem měl v plánu .. jenom to nemohu vyzkoušet, než mi přijde nový programátor, včera odešel te starý do křemíkového nebe ...
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#33 Příspěvek od procesor »

Je mi ľúto, aj to sa stáva.
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#34 Příspěvek od walleyman »

Tak programátor už je doma, v kodech jsem opravil pár chybiček .. (pojmenování bitů.. a opravil WAIT200uS) ovšem z nějakého důvodu nedochází ke komunikaci ... 627 jen opakovaně vysílá a 877 nic nevrací .. do 877 jde z RXTX modulu přijatý signál .. ovšem 877 už nepřepíná Rx/tx a nic negeneruje ....
Přílohy
16f627.asm
(15.09 KiB) Staženo 163 x
16f877.asm
(11.02 KiB) Staženo 156 x
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#35 Příspěvek od procesor »

Čo svieti na ledkách?. Asi k tomu nedôjde.
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
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#36 Příspěvek od walleyman »

Led jsou všechny v 0, START_R jsem přidal, po drátech vše funguje ale pomocí modulů se situace nezměnila, jinak příchozí data: Přijde 55h pak po dobu 6ms 0 pak po dobu 13ms 1, přijde 55h .... takže 627 generuje a čeká správně .... jen 877 vůbec nereaguje. Dcl rád bych věděl kde je tady zakopaný pes ....
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#37 Příspěvek od procesor »

Možno treba pred vyslaním dát vysielať dlhšie nejaké dáta (nar.10...20 krát 0xFF alebo predĺžiť 10...20x ten BLank), aby sa v prijímači nastavila citlivosť.
Teraz je to cca v dĺžke iba jedneho znaku.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#38 Příspěvek od Chenzee »

Kdysi se tu řešilo posílání dat přes Auriel moduly a myslím, že Andrea tehdy psala, že tyto moduly neumí odesílat trvale log 1. Závěr tehdy tuším byl, že je nutné buď seriová data negovat nebo použít vlastní protokol kde výchozí stav je 0. Třeba si to s něčím pletu, třeba ne tak mě prosím nekamenujte ....
Žádnej učenej z nebe nespadl ...
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#39 Příspěvek od Andrea »

Psala jsem, že to chce používat kódování s nulovou ss složkou, třeba manchester.
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#40 Příspěvek od procesor »

Lepšie som si pozrel dadasheet-y.
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 :oops: )
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.
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#41 Příspěvek od walleyman »

Tak jsem zkrátil dobu běhu Blank a zkrátil dobu čekání na Blank ... bez výsledku .. LED pořád bez odevzy .... na osc vidím, že Blankmá cca kolem 3ms .. což odpovídá kodu ... ovšem 877 pořád nic.
Přílohy
16f877.asm
(11.15 KiB) Staženo 144 x
16f627.asm
(14.85 KiB) Staženo 148 x
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#42 Příspěvek od procesor »

Ešte ma napadá...v inicializácii (v INIT) sa nastaví SPEN tým sa stane TX=Hi.
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ť.
Naposledy upravil(a) procesor dne 08 úno 2011, 23:26, celkem upraveno 1 x.
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#43 Příspěvek od walleyman »

Zkusil jsem, bohužel beze změny .... to by mne zajímalo, kde je tady chyba ...
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#44 Příspěvek od procesor »

skús tie odpory, to som dopísal pozdejšie, musia tam byť, lebo keď nie je zapnuté SPEN sú RB1 aRB2 nastavené na IN.
Ešte treba po odvysielaní odpojiť SPEN podobne ako pri prepínaní na príjem až po kontrole toho bitu TRMT
Uživatelský avatar
walleyman
Příspěvky: 35
Registrován: 27 kvě 2008, 00:00
Bydliště: Jičín

#45 Příspěvek od walleyman »

Heh ... koukám, že jsem před nějakým časem zapoměl poděkovat a sdělit, že problém vyřešen :D ...
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 :)
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“