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
Steff schrieb:
> TRISCbits.TRISC6 = 1;//RC6 als Eingang,TX senden
Müsste wohl ein Ausgang sein, zum Senden.
Würd ich auch sagen. Wobei : TRISCbits.TRISC6 = 1;//RC6 als Eingang,TX senden eine ziemlich wirr aussehende Zeile ist. Wie wäre es mit: TRISC |= 0b.01000000; oder TRISC |= (1<<6);
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.
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!
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...
> 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?
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....
Problem gelöst ...kann geschlossen werden :) Beschriftungsfehler auf dem Board, da her RX und TX vertauscht Pic hält externen Osci für 48MHz und nicht für 20MHz -> PLL richtig einstellen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.