Hallo, ich habe einen PIC18F mit einer RS232 die funktioniert und an den UART 2 einen RS485 Treiber, dieser kann Daten senden. Wenn er aber auf empfangen geht, kann ich an dem RX eingang des PICs Daten mit dem Oszi messen, aber in dem RCREG2 steht immer 0x00. Woran kann das liegen? Danke
Gast
#2851062
Empfang deaktiviert? PICs kenne ich nicht, aber 8051er und ich meine auch die UARTs der Cortex-Controller haben jeweils ein Flag, mit dem der Empfang freigeschaltet wird. Poste halt mal deinen Code... Ralf
also das ist mal die Initialisierung
void UART2_init(word wBaudrate, byte bLaenge)
{
BAUDCON2bits.ABDEN = 0; // Auto baud detect disable
BAUDCON2bits.WUE = 0;// Wake-up disable
BAUDCON2bits.BRG16 = 0; // 8 bit baud rate generator
BAUDCON2bits.TXCKP = 0; // Idle state for transmit Tx is high
BAUDCON2bits.RXDTP = 0;// Receive data is not inverted
SPBRG2 = 17; //Test
TXSTA2bits.BRGH = 0;// Low speed baud rate select bit (Fosc/64)
TXSTA2bits.SENDB = 0;// Sync break transmission completed
TXSTA2bits.SYNC = 0; // Asynchronous mode
TXSTA2bits.TXEN = 1; // Transmit Enabled
if(bLaenge == 9)
{
TXSTA2bits.TX9 = 1;// Selects 9 bit transmission
RCSTA2bits.RX9 = 1;// reception
}
else
{
TXSTA2bits.TX9 = 0; // Selects 8 bit transmission
RCSTA2bits.RX9 = 0; // reception
}
RCSTA2bits.ADDEN = 0; // disables addresss detection
RCSTA2bits.CREN = 1; // enables receiver
RCSTA2bits.SPEN = 1; // Serial port enabled
Nop();
IPR3bits.RC2IP = 0; // Receive high priority interrupt
PIE3bits.RC2IE = 1; // Interrupt enable
PIR3bits.RC2IF = 1;
TRISGbits.TRISG1 = 0; // TX Port as output
TRISGbits.TRISG2 = 1;// RX as input
LATGbits.LATG0 = 0;
bReadPtr2 = 0;
bWritePtr2 = 0;
Gast
#2851080
Die Reihenfolge ist etwas unguenstig. Das enablen des Uarts kommt am Schluss.
Gast
#2851084
Irgendwo muss auch noch die Richtung des Treibers umgeschaltet werden. Und ein paar interrupt handler sollten auch noch irgendwo sein. Wann wird die Richtung umgeschalten ?
die Richtung wird beim Initialisieren eingestellt und dann in der Funktion zum senden am anfang umgestellt und am ende wieder zurück. was für Interruptfunktionen?
Gast
#2851101
Die Zeile TRISGbits.TRISG0 = 0; fehlt noch immer. Weiterhin muß natürlich LATGbits.LATG0 = 0; je nach Datenrichtung hin- und hergeschaltet werden.
Gast
#2851104
Und welcher PIC soll das jetzt sein? Poste halt mal das Datenblatt bzw. besser einen Link zum DB. Es ist wichtig alle hilfreichen/relevanten Infos zur Verfügung zu stellen... sonst macht das Helfen nicht so viel Spaß :) Ralf
TRISGbits.TRISG0 = 0; steht an einer anderen stelle. es ist der PIC18f65k22
Gast
#2851199
2 möglichkeiten fallen mir ein. 1. Pin RG2 ist mit AN18 geteilt. Ist der pin auf Digital geschaltet (analog 18 disabled)? Sonst wird immer 0 gelesen. Steht im DB. 2. du hast die RX2 Interrupt auf Enable gesetzt und dann das Flag gesetzt. Nicht gut, jetzt springt er sofort in die ISR, wenn der nicht vorhanden ist, dann kann alles mögliche passieren. HTH PICfan
wie kann ich speziel AN18 auf digital umstellen? hab ich ja eigentlich schon. Hab das setzen des Flags wieder weg gemacht, geht immer noch nicht =(
habs gefunden mit dem Umstellen von AN18 auf digital, und des war wirklich auf Analog gesetzt. keine ahnung warum, ich hab des nicht gemacht. Und jetzt geht es!!!!!!!!!!! Vielen dank =)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.