Forum: Mikrocontroller und Digitale Elektronik PIC, MicroC und UART


von Markus K. (numax)


Lesenswert?

Hallo zusammen,
ich versuche mich grade in Sachen UART und PIC, doch irgendwie mag das 
ganze nicht so funktionieren wie es sollte.

Hierbei habe ich es gemäß einiger Tutorial versucht und das bisher 
erfolglos.

Also dann zum Problem.
Ich habe einen PIC (18F14K50), den ich über den PICKIT Serial Analyzer 
mit dem PC verbunden habe.

Wenn ich den PIC nun einfach zyklisch Daten senden lassen will, bekomme 
ich am PC immer nur die Ausgabe einer Hexadezimalen 80 und zwischendurch 
einem Fragezeichen.

Das Programm (geschrieben in MicroC Pro for PIC) sieht so aus:
1
void main(void) {
2
     UART1_Init(9600);
3
     Delay_ms(100);
4
     
5
     while(1) {
6
          UART1_Write_Text("Hello World.");
7
          Delay_ms(1000);
8
     }
9
}

Die Ausgabe im Serial Analyzer in etwa so:
1
[RX]80?[RX]80?[RX]80?[RX]80?[RX]80?[RX]80?[RX]80?[RX]80?[RX]80?[RX]80

Das selbe Ergebnis erhalte ich auch, wenn ich das ganze in Proteus 
nachstelle und simuliere.

Hat jemand eine Idee, warum da nur sowas bei raus kommt und nicht die 
Werte die ich erwarte?

Gruß Numax

von Max H. (hartl192)


Lesenswert?

Markus K. schrieb:
> Hat jemand eine Idee, warum da nur sowas bei raus kommt und nicht die
> Werte die ich erwarte?
Schwingt der Oszillator auch wirklich mit der Taktfrequenz, die du 
angegeben hast? An Sender und Empfänger die gleiche Baudrate 
eingestellt?

: Bearbeitet durch User
von Markus K. (numax)


Lesenswert?

Hallo,
ich verwende den internen Oscillator bei 8 MHz.
Das müsste ich dann mal nachmessen, ob er die richtige Frequenz erzeugt.

Kann der interne denn die geforderte Stabilität erzeugen, oder ist es 
erforderlich einen externen Quarz zu benutzen?

Die Baudrate ist die selbe.

Gruß Numax

von X4U (Gast)


Lesenswert?

Markus K. schrieb:
> ich verwende den internen Oscillator bei 8 MHz.
> Das müsste ich dann mal nachmessen, ob er die richtige Frequenz erzeugt.

Oder in den Projekt Settings nachschauen ob der Compiler auch die reale 
Taktfrequenz kennt.

>
> Kann der interne denn die geforderte Stabilität erzeugen, oder ist es
> erforderlich einen externen Quarz zu benutzen?


Zumindest würde nicht immer 0x80 auftauchen.

von Markus K. (numax)


Lesenswert?

Ich habe jetzt mal nachgemessen und er läuft nur mit 250kHz.

So ganz nachvollziehen kann ich das zwar nicht, zumal der interne 
Oscillator laut Datenblatt erst ab 31kHz läuft.
Aber egal was ich in MicroC einstelle, es ändert sich an der Frequenz 
vom PIC nichts.

Das einzige was sich verändert hat ist, das ich nun nur noch nullen als 
Ausgabe bekomme und keine 80.

von Max H. (hartl192)


Lesenswert?

Markus K. schrieb:
> Ich habe jetzt mal nachgemessen und er läuft nur mit 250kHz.
F_osc oder F_cy?

Wenn's F_cy ist, schau dir mal im Datenblatt an, was das OSCCON Register 
macht.

P.S. F_cy = F_osc/4

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Markus K. schrieb:
> So ganz nachvollziehen kann ich das zwar nicht, zumal der interne
> Oscillator laut Datenblatt erst ab 31kHz läuft.

Datenblatt, Seite 17:
"1MHz (Default after Reset)"

-> das sind dann 250k Befehlszyklen - passt!

Du must das OSCCON-Register entsprechend setzen, wenn Du eine andere 
Taktfrequenz haben willst.

von Markus K. (numax)


Lesenswert?

Vielen Dank,
nun läuft es.

Verstehen wieso kann ich es noch nicht, aber es geht.

Ich habe nun in den Projekt Settings die Oscillator Selection auf "HS 
Oscillator" gestezt und einen 8MHz Quarz angeschlossen.

Wenn ich aber eine andere Einstellung wähle, geht wieder garnichts. Laut 
Datenblatt hätte ich vermutet die Selection auf "EC High" zu setzen.

Die Hauptsache ist aber das es geht.

Gruß Numax

von Thomas E. (picalic)


Lesenswert?

Markus K. schrieb:
> Laut
> Datenblatt hätte ich vermutet die Selection auf "EC High" zu setzen.

Wieso? "EC" steht doch für "external clock". Wenn Du den internen 
Oszillator benutzen möchtest, musst Du auf "INTOSC" bzw. "HFINTOSC" 
konfigurieren.

von Markus K. (numax)


Angehängte Dateien:

Lesenswert?

Das ist richtig, ich meinte für den externen Quarz.

Im Bild sind alle Einträge die ich in MicroC auswählen kann (Oscillator 
Selection).

Bisher funktioniert nur der Eintrag "HS Oscillator" in Verbindung mit 
einem externen Quarz.

Ich hätte in diesem Fall gemäß des Datenblattes erwartet, das ich bei 
dem externen Quarz den Eintrag "EC High" wählen muss, jedoch 
funktioniert dann nix mehr.

Wähle ich einen der beiden "Internal" Einträge dann bekomme ich wie 
erwähnt nur Hexadezimale 80 oder 00.

Diese vielzahl an Einträgen sorgt bei mir für Verwirrung.

Gruß Numax

von Thomas E. (picalic)


Lesenswert?

Für "EC" musst Du einen externe Clock-Quelle (z.B. Rechteck-Generator) 
anschließen. HS/XT/LP ist für ein externes, frequanzbestimmendes, 
passives Element (Quarz/Resonator o.ä.). Auswahl XT/HS/LP hängt von der 
Frequenz ab, siehe Details im Datenblatt...

von Markus K. (numax)


Lesenswert?

Vielen Dank für die Erklärung, das hilft mir dann erstmal weiter.

von Max H. (hartl192)


Lesenswert?

Markus K. schrieb:
> Wähle ich einen der beiden "Internal" Einträge dann bekomme ich wie
> erwähnt nur Hexadezimale 80 oder 00.
Wenn du das OSCCON* anpasst, läuft er PIC dann wirklich mit F_osc = 8MHz 
und es sollte auch funktionieren.

*Seite 18 http://ww1.microchip.com/downloads/en/devicedoc/41350c.pdf

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.