PIC16F627A und USART (RS232)

Gast #2355172
Lesenswert?
• ▲
▼
Hallo Elektronikfreunde, es ist mal wieder zum Heulen ;-)

Ich habe einen PIC16F627A, an dem eine LED hängt, die PWMed wird, das 
klappt alles wunderbar. Nun möchte ich über RS232 einen neuen DC-Wert an 
den PIC senden. Also 255: LED voll an, 0: LED komplett aus, 127: 
dazwischen, etc. Ihr wisst waws ich meine.

Das PWM-Modul und die USART habe ich so initialisiert (ich nutze ein 
externes 4.194304MHz Quarz, hatte leider nichts ander4es herumliegen):
1
// PWM:
2
PR2 = 0xff;
3
TRISB3 = 0;
4
T2CON = 0b100; // 1:1 prescaler timer1
5
CCP1CON = 0b1100; // set CCP to PWM mode
6
CCPR1L = 0; // DC = 0
7

8
// USART:
9
SPBRG = 63; // Formel: BAUD = F_OSC / 64 / (SPBRG + 1)
10
SYNC = 0;
11
SPEN = 1;
12
RCIE =  1;
13
CPEN = 1;
14
PEIE = 1;
15
GIE = 1;

Das gibt mir eine Baud-Rate von 1024. Im HTerm habe ich dann 
eingestellt: COM1 (gecheckt, der stimmt), Baud 1024, Data 8, Stop 2, 
Parity None, CTS Flow Control = 0.

Meine ISR sieht so aus:
1
static void interrupt isr () {
2

3
  if (RCIF) {
4
    value = RCREG;
5
    CCPR1L = value;
6
    CREN = 0;
7
    CREN = 1;
8
  }
9

10
}

Aber der PIC zeigt keierlei Reaktion. Es kommt nichts an, ist im 
Quellcode ein offensichtlicher Patzer?

Vielen Dank schon einmal für die Hilfe,
Gute nacht,
Jens
Gast #2355445
Lesenswert?
• ▲
▼
Ich würde eine PC-übliche Baudrate z.B. 1200 Baud benutzen und dafür 
SPBRG auf 55 setzen (-0.7% Fehler).

Bist du sicher, dass der PIC zwei Stopbits benutzt? Ich würde PC-seitig 
ein  Stopbit einstellen.

USART
http://ww1.microchip.com/downloads/en/DeviceDoc/31018a.pdf

Interrupts
http://ww1.microchip.com/downloads/en/DeviceDoc/31008a.pdf

PIC16F627A
http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf
Gast #2355558
Lesenswert?
• ▲
▼
Hi,

das ist lustig, mir sind genau die gleichen Dinge aufgefallen, die du 
gepostet hast:

Ich nehme jetzt 1200 Baud mit Faktor 55 genau wie du vorgeschlagen hast, 
und das Teil hat ein Start- und ein Stop-Bit, also nur ein Stop-Bit, 
irgendwie habe ich die vorher summiert, warum auch immer.

Jetzt passiert auch endlich was, die LED, die gedimmt werden soll, 
ändert ihre Helligkeit, nur leider überhaupt nicht so, wie ich das will. 
Woran kann das liegen?

Selbst wenn ich mit HTerm die ganze Zeit manuell Nullen rausschicke 
(also binär 0b00000000) ändert die LED manchmal ihre Helligkeit, 
manchmal reagiert sie nicht.

Was kann da faul sein?

Gruß
Jens
Gast #2355577
Lesenswert?
• ▲
▼
OK, ich muss etwas Peinliches gestehen. Am MAX232 war eine ungewollte 
Querverbindung (ein entflohenes Lötzinn-Kügelchen) zwischen RX und TX. 
Jetzt klappt alles einwandfrei.

Danke trotzdem für die Hilfe.

Und die Moral von der Geschicht': Den Fehler nicht immer in der Software 
suchen! ;-)

Viele Grüße
Jens

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.