www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 programmierung unter C18


Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe folgendes Problem. Ich habe ein Demoboard und PC zur Verfügung. 
Hat jemand Erfahrung wie diese Geräte über RS232 verbinde, damit Daten 
zwischen beiden veschicken könnte? Ich habe schon ein Programm für 
meinen PIC geschrieben. PIC und PC verbinde über ein NullModem kabel. 
Für Kommunikation benutze Hyperterminal. Wenn die Daten vom PIC sende, 
werden sie von Hyperterminal empfangen, aber wenn ich ein Zeichen sende, 
wird von PIC gar nichts empfangen.
Danke, wenn jemand antwortet

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst im Sourcecode auf Zeile 54 statt:
if (c==0) {
schreiben:
if (c!=0) {

Dann sollte es gehen. Sagt jedenfalls meine Kristallkugel.

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:
> Du musst im Sourcecode auf Zeile 54 statt:
>
> if (c==0) {
> 
> schreiben:
>
> if (c!=0) {
> 
>
> Dann sollte es gehen. Sagt jedenfalls meine Kristallkugel.


ich habe folgender Sourcecode:

char z;


if(!DataRdyUSART())
{

z=ReadUSART();
Delay_ms(100);
putcUSART(z);

}

Ich möchte ein Zeichen epmfangen und dieses Zeichen zurück schicken. 
Leider klappt's nicht..

Autor: Andreas I. (adisan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Arbeitet jemand mit C18-Compiler von Microchip? Ich versuche schon seit 
3 Tagen PC über USART mit PIC zu verbinden... In Dateianhang ist mein 
Sourcecode.  Wenn irgendwelches Zeichen sende oder empfange, dann sehe 
ich ganz anderes Symbol auf dem Bildschirm und LCD. Weisst jemand 
vielleicht, wo ich Fehler habe.
Danke

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich muss ehrlich gestehen, dass ich bis jetzt nur immer USB gebraucht 
habe und nie RS232, aber von Michrochip gibts ganz bestimmt 
C18-sourcecode-beispiele (musst mal im installationsordner gucken). 
ansonsten kann ich dir auf die schnelle sagen, dass die schlaufe 
schneller durchlaufen wird, als dass du zeichen empfpfängst, die du 'z' 
übergeben kannst; geschweige denn zurücksenden ;) ...musst du da nicht 
irgend ein while(noch_nicht_übertragung_beendet) oder so ähnlich 
abfragen?

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieses Beispiel habe ich doch aus dem C18 Getting start genommen. RS232 
benutze, weil das alles unter DOS ablaufen soll.

Autor: Gerd Gerd (gege)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas,

ich arbeite zwar nicht mit C18 sondern mit C30, aber probier doch mal 
den UART Empfangsinterrupt freizugeben, schreib eine ISR und setze im 
MPLAB eine breakpoint in die ISR um dann mit Watch das UART 
Empfangsregister zu lesen ob Du das gesendete Byte empfängst.

Falls nein: HW oder Konfig Problem
Falls ja: kleinen Ringbuffer in die ISR für empfangene Bytes, dann statt 
direkt aus dem UART aus dem Ringbuffer lesen.

So mach's ich.

Gruß

Gerd.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

was hast du denn an dem Teil für einen Quarz dran?

Ich vermute, dass die Baudrateneinstellung nicht stimmt.

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerd,
danke für deine Antwort. Ich habe an meinem PIC noch ein 4MHz Qurz.

Baudrate habe ich so ausgerechnet: x=(16MHz/1200/64)-1

Autor: Matthias S. (dachs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if(!DataRdyUSART())
{

Heisst das nicht soviel wie:
wenn NICHT DataRdyUSART()


Dann wuerde der Inhalt der Klammer nur abgearbeitet, wenn KEINE Daten 
bereit stehen.

Matth

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mit if(!DataRdyUSART()) auch ausprobiert. Obwohl ich kein 
Zeichen sende wird der Inhalt trozdem abgearbeitet..

Autor: Gerd Gerd (gege)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja: hast Du schon die Fehlerflags angeschaut?

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss nicht wie ich die Fehlerflags anschauen könnte..

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

dein Rx-Pin muss ein Eingang sein. Wenn ichs nicht übersehen habe, wird 
dies nirgendwo gemacht. Muss dorthin wo die TRIS-bits stehen.

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Micha,
Du meinst, dass ich TX als Ausgang, RX als Eingang?
ich habe so auch ausprobiert

TRISC0b10000000;

Es bringt nichts..

Autor: Gerd Gerd (gege)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas I. wrote:
> Ich weiss nicht wie ich die Fehlerflags anschauen könnte..

Da mußt Du schon das Datenblatt zum PIC lesen. Kapitel UART, UART 
register
(Hast ja nicht verraten welchen PIC du hast)

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setz mal bei deinem OpenUSART statt USART_BRGH_HIGH ein USART_BRGH_LOW.
Sonst dürfte die Rechnung nicht funktionieren.
Habe allerdings nicht in dem zu deinem PIC passenden DS nachgesehen, 
sondern in einem anderen.

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon Datenblätter angeschaut. Ich kann nicht Debbuger 
benutzen.

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für alle Antworten. ich habe das Problem endlich gelöst. 
MAX232 war kapput.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.