PIC18f4550 USART

Gast #1279414
Lesenswert?

Hallo,
habe versucht mit meinem Pic 18f4550 über RS232 zu senden und bekomm es 
trotz vieler anleitungen und datenblätter nicht hin vielleicht kann mir 
hier einer helfen!!!

Ich habe ein OLIMEX Board mit 20MHz Quartz und Programmer.
Ich kann meine uart sim. über MPLAB aber nach dem es auf dem Chip ist 
nicht empfangen.

Hier mal der code:

#include <p18cxxx.h>


#pragma config FOSC = HS //Osci
#pragma config PWRT=ON //Power-up timer
#pragma config WDT=OFF //watchdogtimer
#pragma config PBADEN=ON //POTRB A/D Eingänge
#pragma config LVP=OFF // Single Supply ICSP
#pragma config ICPRT = ON //ICPORT enabled
#pragma config BOR = OFF

#define TAKT 20000000
#define BAUD 9600

unsigned char ch='a';

void InitUsart(void) {


  TRISCbits.TRISC6 = 1;//RC6 als Eingang,TX senden


  TRISCbits.TRISC7 = 1;//RC7 als Eingang,RX empfangen
  // Für Empfang
  RCSTA = 0b10010000; //Seriell ein,8Bit,dauerbetrieb

  // Senden
  TXSTA = 0b00100100;//8Bit,async,hohe Baudr.


  SPBRG = TAKT/(16*BAUD)-1;//Taktrate aus Baudratenregister


}
void  WriteByte(unsigned char byte) {

  // warten bis register leer
  while(!PIR1bits.TXIF);

  // senden
  TXREG = byte;

}


Vielleicht sieht jemand meinen Fehler... habe den rest des Programms 
weggelassen weil dort nur endlos in die WriteByte funktion gesprungen 
wird...

Danke
Steff
Gast #1279769
Lesenswert?

Danke für die Antworten.

Im Datenblatt steht
bit SPEN (RCSTA<7>) must be set (= 1)
bit TRISC<7> must be set (= 1)
bit TRISC<6> must be set (= 1)

Die Beschreibung der PINs habe ich aus einem Buch für PIC 18 
Programmierung... hierbei kann man die Bits einzeln aufrufen... auch 
hier steht beide müssen auf 1 stehen.
#1279776
Lesenswert?

Läuft das Programm, ich meine hast du einen Heartbeat programmiert?

Ne LED oder nen oszi dran und du siehst ob der code läuft. Dann am 
besten den Heartbeat in der Senderoutine unterbringen, so siehst du, ob 
der code wenigstens richtig ausgeführt wird.
Dann ist es wohl die configuration der UART.


Oder simulierst du AUSSCHLIEßLICH?
Wenn du die Möglichkeit hast, den Controller zu flashen, TU ES!
Gast #1279820
Lesenswert?

Ja ich habe eine statusLED ich sehe auch wenn ich verzögerung rein nehme 
das er immer wieder in die sendefunktion springt.


Mir ist aufgefallen das mein TRISC sich nach dem ausführen von
RCSTA = 0b10000100;
auf 0x80 ändert, dann ist aber TRISC6 = 0 und nicht 1....
finde aber nichts darüber im datenblatt...
Gast #1279854
Lesenswert?

> Mir ist aufgefallen das mein TRISC sich nach dem ausführen von
> RCSTA = 0b10000100;
> auf 0x80 ändert, dann ist aber TRISC6 = 0 und nicht 1....
Logisch, denn das EUSART-Modul wird den Pin C6 automatisch als Ausgang 
konfigurieren.

> finde aber nichts darüber im datenblatt...
Seite 239:
"Note: The EUSART control will automatically
reconfigure the pin from input to output as
needed."

Schreib doch mal testweise statt der Baudratenberechnungsformel die 
konkreten Werte in die Register. In Deinem Fall müsste das wie folgt 
aussehen:
SPBRG = 129;
SPBRGH = 0;

Wenn es aber ohnehin in der SIM läuft, könnte es dann auch ein 
Hardware-Problem sein? Schonmal an RC6 ein Oszi drangehalten?
Gast #1279868
Lesenswert?

Ok danke für die Antworten !!!

Werde mal in die UNI laufen und das probieren. Habe schon probiert deci 
statt der Formel zu nehmen oder hex in binär werte zu ändern aber da es 
an den Inhalten der Register nichts ändert kann es wohl nur noch ein 
Fehler auf der Platine sein.
Habe mir extra ein Board gekauft da mit ich nicht selber beim Löten 
Fehler mache aber man ist leider nich sicher....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren