uart problem

Apr 01, 2008 6 Replies

evo opet ja :)



imam uart rutinu i radi, al ne na 2400bps nego bolje radi na 2650bps nego na



2400... U cemu je problem?? dal je mozda frekvencija kristala nestabilna??? Kako da pogodim tocnu brzinu da imam tocan prijenos podataka???

Ne razumijem. Daj malo to pojasni kako znas da radi 'bolje' na 2650bps - imas sa druge strane neki serial device koji nekim cudom moze raditi i na 2650bps ili?

Pa opcenito moras poceti sa odgovarajucom frekvencijom kristala, takvom da podjelom sa nekim cijelim brojem dobijes tocan baud rate. Za to sluze kristali sa 'cudnim' frekvencijama, kao sto je 11.0592Mhz :-) Sa takvim kristalom na standardnim 8051 mirkokontrolerima mozes raditi sa 'standardnim' brzinama do 57600 bauda, dok sa 'normalnim' kristalom od 12Mhz ne mozes dobiti vecu standardnu brzinu uarta od 2400

Boris

?! A?

formatting link

Kod serijskih komunikacija dobro se dr¾ati unutar granica +/- 5% pogre¹ke brzine prijenosa.

Ovisno o literaturi, neki èak preporuèuju +/- 2.5% ili najvi¹e +/- 1%

Ukratko, ako se koristi dobro definiran komunikacijski protokol s detekcijom gre¹ke u prijenosu, tada se i ne mora koristiti "specifièan" kristal (neke stvari mi uredno rade i s pogre¹kom od oko 3%). Naravno, ako za generator takta odabere¹ ne¹to ¹to nije 8-bitni timer.

Ako nema protokola, nego se npr. oèitavaju neki senzori, tada je dobro koristiti te "èudne" frekve.

Ali to se sve odnosi na HW UART.

Koliko sam shvatio, pitanje se odnosilo na software koji odraðuje komunikaciju. E, sad, raspada li se na 2400 u prijemu ili predaji?

I koja ma¹ina i koji jezik?

Cemu ti upitnici i usklicnici i uzvici? Ja sam pogledao taj link i izracunao mi je ono sto sam i napisao - izgleda da imamo problem u komunikaciji :-)

Boris

Ako imas kristal kvarca onda on "ne grijesi" ! Tak da to eliminiraj. Podesi takt procesora takav da nakon prescalera takt za UART bude ¹to toèniji. No posto se radi o protokolu koji se sinkronizira nakon svakog paketa dopu¹tena su odstupanja od par posto (3-4). pozz

nego na

Imama kvarc od 4mhz... i u kodu imam ovak definirano:

MSB EQU 07 LSB EQU 00 TX EQU 6 ; RB6 is the software UART Transmit pin OSCCLOCK EQU .4000000 ; Define external crystal frequency here BAUDRATE EQU .2620 ; Define desired baud rate here OVERHEAD EQU .11 ; Number of instructions for routine INSTPERBIT EQU ((2*OSCCLOCK/(4*BAUDRATE))+1)/2 ;Instruction/bit time INSTPERHALFBIT EQU ((2*OSCCLOCK/(8*BAUDRATE))+1)/2 ;Instruction/bit time DELAYBAUD EQU (INSTPERBIT-OVERHEAD)/3 ; NUMBAUDNOPS EQU INSTPERBIT-(3*DELAYBAUD)-OVERHEAD DELAYHALFBAUD EQU (INSTPERHALFBIT-OVERHEAD)/3 ; NUMHALFBAUDNOPS EQU INSTPERHALFBIT-(3*DELAYHALFBAUD)-OVERHEAD

e sad bolje radi kad je:

BAUDRATE EQU .2620

nego kad upisem

BAUDRATE EQU .2400

Zbog cega??? kad je baudrate 2400 uopce ne primam tocne znakove na kompu, a kad je 2620 onda primam tocno al su prvi znakovi netocni... neznam kak da skuzim u cemu je problem... u terminalnom programu "seriall watcher" imam podesen baudrate 2400, a u picu je to 2620-2650

Jesi li **apsolutno** siguran da je to 4MHz kristal? Da nije mozda kojim slucajem 4.4MHz ili tu negdje ali ne okruglo 4MHz?

=^.^= StoneThrower

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required