PIC18F4680 Probleme mit USart

Gast #2329707
Lesenswert?
• ▲
▼
Hi,

ich versuche eine Verbindung zum PC über RS232 herzustellen, aber die 
Daten, die ankommen stimmen nicht. Es muss irgendwas an der Baudrate 
nicht stimmen, aber ich komme nicht drauf, was es ist. Hier meine 
Konfiguration:

µC: PIC18F4680 mit 10Mhz Quarz, Fuses: OSC=HS, WDT=OFF, LVP=OFF
1
void usart_init(unsigned long baud) {
2
  char buffer;
3
  SPBRG = CLOCK/(16ul * baud) - 1;
4
  TXSTA = 0b00100100;        //TX ein, hohe Baudrate
5
  TRISCbits.TRISC7 = 1;
6
  TRISCbits.TRISC6 = 1;
7
  RCSTA = 0b10010000;        //USART an, continuous receive an
8
  buffer = RCREG;          //Empfangsbuffer leeren
9
}

Meine Sende-Routine:
1
extern void usart_putc(unsigned char c) {
2
  while(!PIR1bits.TXIF);
3
  TXREG = c;
4
}

und
1
#define CLOCK 10000000ul
2
void main() {
3
  usart_init(9600);
4
  while(1) {
5
    usart_putc("c");
6
  }
7
}

Habt ihr eine Ahnung, wo der Fehler liegen kann? Die Daten werden per 
usb-seriell dongle mit FTDI chip übertragen. Als Terminal nehme ich 
HTerm.

Danke und vG
STeff
Gast #2329748
Lesenswert?
• ▲
▼
Hi nochmal,

Ich konnte mein Problem teilweise lösen: Die Anführungszeichen waren 
falsch
1
#define CLOCK 10000000ul
2
void main() {
3
  usart_init(9600);
4
  while(1) {
5
    usart_putc('c');
6
  }
7
}

jetzt habe ich aber ein neues Problem:
1
void usart_puts(char *s) {
2
  while(*s) {
3
    usart_putc(*s++);
4
  }
5
}

mit
1
#define CLOCK 10000000ul
2
void main() {
3
  usart_init(9600);
4
  while(1) {
5
    usart_puts("Hallo Welt\n");
6
  }
7
}

Wenn ich einen String aus einer Variable nehme, zb char string = 
{hallo}; dann klappt das, aber nicht so direkt. Woran liegt das?

Grüße
Gast #2329841
Lesenswert?
• ▲
▼
Hi,
es muss natürlich char string[10] = {"hallo"} heißen. Ich habe den Code 
extra reduziert, damit ihr nicht mit überflüssiger Information überhäuft 
werdet ;)
Als Warnung auf usart_puts("Hallo Welt\n"); kommt: "Warning [2066] type 
qualifier mismatch in assignment" in MPlab mit C18 compiler.

Grüße
Gast #2329935
Lesenswert?
• ▲
▼
Hallo nochmal,

ich habe jetzt eine Art Lösung gefunden, mit der ich schon arbeiten 
kann, aber noch nicht zufrieden bin:

Eine Senderoutine für array-strings:
1
 //array aus RAM senden
2
void usart_puta(char *s) {
3
  while(*s) {
4
    usart_putc(*s++);
5
  }
6
}

und für feste Strings aus dem ROM wie zb usart_puts("test123");
1
 //string aus ROM senden
2
extern void usart_puts(far rom char *s) {
3
  char c;
4
  while(*s) {
5
    c = *s;
6
    usart_putc(c);
7
    *s++;
8
  }
9
}

Geholfen hat mir der Beitrag: 
http://www.electro-tech-online.com/microcontrollers/35667-c18-formatting-strings-usart-2.html
Die Warnmeldung "Warning [2066] type qualifier mismatch in assignment
" bei usart_puts("Hallo Welt!"); kommt immer noch

Grüße
#2329951
Lesenswert?
• ▲
▼
Stimmt man musste sich noch eine Funktion für konstante Strings aus dem 
Programmspeicher extra schreiben.


Also so sollte es eigentlich funktionieren:
1
//string aus ROM senden
2
extern void usart_puts_r(const far rom char *s) {
3
  char c;
4
  while(*s) {
5
    c = *s;
6
    usart_putc(c);
7
    *s++;
8
  }
9
}
10

11
int main(void)
12
{
13
  usart_puts_r((const far rom char *)"Hallo Welt");
14
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.