Problem med UART dspic30f4011

L

lopex

Guest
Jeg bruker dspi30f4011, med en mplab C30, Cristal en 4MHz, 9600 baud rate.
Problem: ikke noe i hiperterminal.
Takk,
Lopex
kode:
# Include <p30f4011.h>
# Include <uart.h>
# Include <stdio.h>
# Include <stdlib.h>
# Include <ports.h>
# Include <stdlib.h>
# Include <timer.h>
# Include <p30fxxxx.h>

int main (void);
void conf_uart (void);
void Inicializacao (void);_FOSC (CSW_FSCM_OFF & XT_PLL16);
_FWDT (WDT_OFF);
_FBORPOR (PBOR_OFF & MCLR_EN);
_FGS (CODE_PROT_OFF);

int main (void)
(
unsigned char ett [] = "test";
usignert int b;

Inicializacao ();
LATDbits.LATD0 = 1; / / ledet 1
b = (unsigned int) en;
putsUART2 (b);
LATDbits.LATD1 = 1; / / LED 2

)
void Inicializacao (void)
(

TRISD = 0xC;
TRISF = 0x17; / / OS Portos RF6/SCK1 e RF5/U2TX e RF3 Sao saidas, som restantes estăo em Alta impedancia
TRISE = 0x120;
TRISC = 0x0000;

conf_uart ();
)

void conf_uart (void) (

unsigned int U2MODEvalue, U2STAvalue;
int baud;

U2MODEvalue = UART_EN & UART_IDLE_CON & UART_RX_TX & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT;

U2STAvalue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_3_4_FUL & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;

baud = 25;

ConfigIntUART2 (UART_RX_INT_EN & UART_RX_INT_PR4 & UART_TX_INT_DIS);

OpenUART2 (U2MODEvalue, U2STAvalue, baud);

)

 
skriver denne myke på engelsk dersom du ønsker at vi skal hjelpe deg.

0x41 0x56 0x45!

 
hei!Nå på engelsk

kode:
# Include <p30f4011.h>
# Include <uart.h>
# Include <stdio.h>
# Include <stdlib.h>
# Include <ports.h>
# Include <stdlib.h>
# Include <timer.h>
# Include <p30fxxxx.h>

int main (void);
void conf_uart (void);
void Inicializacao (void);_FOSC (CSW_FSCM_OFF & XT_PLL16);
_FWDT (WDT_OFF);
_FBORPOR (PBOR_OFF & MCLR_EN);
_FGS (CODE_PROT_OFF);

int main (void)
(
unsigned char ett [] = "test";
usignert int b;

Inicializacao (); / / Start boot
LATDbits.LATD0 = 1; / / ledet 1
b = (unsigned int) a; / / cast
putsUART2 (b);
LATDbits.LATD1 = 1; / / LED 2

)
void Inicializacao (void) / / Start boot
(

TRISD = 0xC; / / utganger for lysdiodane
TRISF = 0x17; / / porter RF6/SCK1 og RF5/U2TX og RF3 utganger
TRISE = 0x120;
TRISC = 0x0000;

conf_uart ();
)

void conf_uart (void) (

unsigned int U2MODEvalue, U2STAvalue;
int baud;

U2MODEvalue = UART_EN &
UART_IDLE_CON &
UART_RX_TX &
UART_DIS_LOOPBACK &
UART_DIS_ABAUD &
UART_NO_PAR_8BIT &
UART_1STOPBIT;

U2STAvalue = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_3_4_FUL &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;

baud = 25; / / (4Mz / (16 * 9600) -1)

ConfigIntUART2 (UART_RX_INT_EN &
UART_RX_INT_PR4 &
UART_TX_INT_DIS);

OpenUART2 (U2MODEvalue, U2STAvalue, baud);

)

Takk

 
hei!

Er første gang jeg skriver et program for dspic i C30, pleide jeg å skrive et program for pic18f whith C18 benytter kommandoen USART ...

I dspic kommandoen er UART, funksjon er:void putsUART2 (unsigned int * buffer) __attribute__ ((seksjon (". libperi ")));Takk

 
Hei!
Jeg har ikke jobbet med dspic30F4011 men jeg er for tiden arbeider med dspic33FJ12MC202 og nedenfor er initilisation koden for min USART.Jeg bruker ikke noen interrupts men ved hjelp polling metoden.

//************************************************ *******************
/ / Funksjonen initilises det USART for kommunikasjon.
//************************************************ *********************
void InitUART (void)
(
/ / Initialisere UART1 for Baud = 115200

U1MODE = 0x8008, / / Aktiver USART modul med høy baurd rate
U1STA = 0x0000;
U1BRG = 7; / / 115,2 Kbaud på 7,3720 MHz krystall (No PLL)

U1STAbits.UTXEN = 1; / / Aktiver overføring
)

så mitt råd til deg er å endre koden til dette fra, slik at det er lett å forstå.Først da vil folk være i stand til å hjelpe deg.

Håper dette hjelper.
Vennlig hilsen
waseem

 
hei!

U1BRG = 7; / / 115,2 Kbaud på 7,3720 MHz krystall (No PLL)

hvordan du beregner U1BRG?

takk!

 
Hei!

Med BRGH = 1; (High baud rate) formelen er

U1BRG = (Fosc / 4 * Buad Rate) - 1;

Med BRGH = 0; (Low Baud rate) på fromula er

U1BRG = (Fosc/16 * Buad Rate) - 1;

Hvis dette ikke gir en avrundet verdi så må man sjekke wheather avrunding det vil ikke produsere feil.

Merk at hvis du bruker et eksternt krystall som oscillator uten PLL så Fosc = krystall frekvens / 2;

Alle disse beregningen er forklart i detalj i databladene.

Håper dette løser problemet ditt.

Vennlig hilsen.

 
hva er maks rimelig overføringshastigheten feil lov?er feil <1% akseptable?

0x41 0x56 0x45!

 
Hei Freddie!
Jeg er ikke sikker, men jeg tror det <1% feil er ok.
Jeg personlig prøver å holde det under 0,16%.

Hensyn.

 

Welcome to EDABoard.com

Sponsor

Back
Top