Forum: Mikrocontroller und Digitale Elektronik PIC16F18426 UART-Pins invertieren


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Anja (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich nutze eine optisch isolierte UART schnittstelle die die Pegel 
invertiert.
Nachdem ich die Invertierungsmöglichkeit im Konfigurator-Tool des 
PIC16F18426 gesehen habe habe ich die Schaltung ohne weitere 
Invertierung entwickelt. Mit RX auf Pin 5 und TX auf Pin 6.

Offensichtlich wirkt die Invertierung nur auf den TX-Pin. Der RX-Pin 
wird nicht beeinflußt.
Als work around habe ich die CLC Unit verwendet um den PIN 5 (CLC1IN) 
invertiert auf den Quarzpin (Pin 3) (CLC1OUT) zu routen und dann den 
UART-Eingang auf Pin 3 zu legen.
Da ich in einer weiteren Ausbaustufe einen Quarz benötige ergibt sich 
die Frage:
- gibt es eine Möglichkeit direkt den CLC-Ausgang ohne Umweg über einen 
zusätzlichen Pin auf den UART RX-Pin zu routen?
- gibt es sonst noch eine Möglichkeit für eine Invertierung die ich 
übersehen habe. (einen Hardware Inverter schließe ich jetzt erst mal 
aus).

Gruß Anja

von Wolfgang W. (Gast)


Lesenswert?

Hallo Anja,

als grobe Vorabinfo: so, wie Du einen CLCxIN und einen CLCyOUT nimmst 
und den RX INPUT direkt auf den CLCyOUT legst, geht. Ich habe sowas 
schon mal gemacht. Als Option käme statt der CLC-Mimik auch ein 
Comparator infrage. Das  habe ich auch schon mal eingesetzt. Man braucht 
halt 2 Pins für den RX-Trakt, weil im BAUDxCON das Bit 5, was für die 
RX-Invertierung in anderen PICs verwendet wird, nicht benutzt ist.

MfG Wuff_W

von Anja (Gast)


Lesenswert?

Wolfgang W. schrieb:
> so, wie Du einen CLCxIN und einen CLCyOUT nimmst
> und den RX INPUT direkt auf den CLCyOUT legst, geht.
Hallo Wolfgang,

Habe ich auch schon getestet. Funktioniert trotz daß der Konfigurator 
meckert daß der RX-Pin auf einem Ausgang liegt.

Wolfgang W. schrieb:
> Als Option käme statt der CLC-Mimik auch ein
> Comparator infrage.
Auf die Idee wäre ich nicht gekommen. Muß ich im Hinterkopf behalten.

Aber eigentlich wollte ich keinen weiteren Pin spendieren.
Als einzige Möglichkeit sehe ich derzeit also statt des PIC16F18426 aus 
der Schublade einen der nagelneuen PIC18F06Q40/41 zu verwenden.

Gruß Anja

von Mucky F. (Gast)


Lesenswert?

Anja schrieb:
> - gibt es sonst noch eine Möglichkeit für eine Invertierung die ich
> übersehen habe. (einen Hardware Inverter schließe ich jetzt erst mal
> aus).

Evtl. per Soft UART
Mikro C z.B. hat das als Lib, die blockt aber das Programm
https://download.mikroe.com/documents/compilers/mikroc/pic/help/software_uart_library.htm

von Wolfgang W. (Gast)


Lesenswert?

Anja schrieb:
> Als einzige Möglichkeit sehe ich derzeit also statt des PIC16F18426 aus
> der Schublade einen der nagelneuen PIC18F06Q40/41 zu verwenden.

Die (PIC18F06Q40/41) habe ich als Empfehlung ausgespart, weil die 
mehrere im Vergleich zum PIC6F18426 komplett umgestaltete UARTs haben, 
die aber von Haus aus für RX und TX Möglichkeiten zum Invertieren 
bieten. Wenn Du als Ersatz für den PIC16F18426 den PIC18F06Q40 nimmst, 
so fällt mir dazu ein, dass es die nur im  SOIC-Gehäuse gibt. Sonst kann 
ich die wegen der reichhaltigeren Peripherie nur empfehlen, weil ich mit 
dem PIC18F16Q41 schon ganz gut selber was (in Assembler) gemacht habe.

Sie waren anfangs schlecht nur mit großen Lieferzeiten erhältlich.

Bei allen dieser PICs empfiehlt sich aber ein Blick in die jeweils 
aktuellen Error-Files, weil man je nach verwendeten Modulen in seiner 
Software mit Errors Schwierigkeiten bekommen kann.

Wenn Du vom Aufwand her den Schritt von PIC16F18426 zu PIC18F06Q40_Q41 
gehen willst, kann ich Dich dazu nur ausdrücklich ermuntern.

MfG Wuff_W

von Anja (Gast)


Lesenswert?

Mucky F. schrieb:
> Mikro C z.B. hat das als Lib, die blockt aber das Programm

Hallo, geht leider nicht da ich bei der Erweiterung auf Delta-Sigma PWM 
relativ lange Interruptlaufzeiten mit 50% Auslastung haben werde.

Wolfgang W. schrieb:
> weil man je nach verwendeten Modulen in seiner
> Software mit Errors Schwierigkeiten bekommen kann.
Naja viel an Peripherie brauche ich ja nicht.
Ein Timer
Ein 12 Bit A/D wandler-Kanal
Ein paar 5V Digital-Outputs.
Einen Standard-UART mit 9600 Baud und invertierbaren Pins.
Ca 10 EEPROM Zellen.
Ein 8 Bit PWM in der Ausbaustufe.
Und hierfür einen "jitterfreien" (Quarz-)Oszillator ohne PLL.

Das wird ja wohl noch funktionieren.

Gruß Anja

von H.Joachim S. (crazyhorse)


Lesenswert?

Wieviele 1000 sollen es denn werden? Oder ist es nur (ok, was heisst 
nur, ist ja auch was wert) Ehrgeiz? Ich würde da einfach einen 
Digitaltransistor oder little-logic-Inverter hinpacken.

von Mucky F. (Gast)


Lesenswert?

Anja schrieb:
> Hallo, geht leider nicht da ich bei der Erweiterung auf Delta-Sigma PWM
> relativ lange Interruptlaufzeiten mit 50% Auslastung haben werde.

Schau halt in einem Timer Interrupt welchen Pegel der Uart Eingang hat. 
Da die Zeit bekannt ist kann man sich das dann zusammenbasteln. Geht 
sogar mit oversampling. Würde ich aber nur machen wenn es von der 
Hardware nicht anders geht (z.B. fertige in Stückzahlen).

Alternativ Pin sharing, die Portfunktion lässt sich zur Laufzeit ja 
ändern. Z.B. den Oszillator über nen Schutzwiderstand einfach wegdrücken 
und zwischendrin zum abgleichen verwenden. Ist aber jenseits von allen 
Specs.

von Mucky F. (Gast)


Lesenswert?

Mucky F. schrieb:
> Da die Zeit bekannt ist kann man sich das dann zusammenbasteln.

Vom Prinzip ne simple state machine:

(Idle) -> Start Bit? ->
Start Bit Ende time? ->
8 x Bit time ->
Stop Bit time ->
(Idle)

Jede time lässt sich beliebig oversamplen. So dass man z.B. bei Jitter 
auf der RxD das ganze auch verwerfen kann.

von Mucky F. (Gast)


Lesenswert?

Mucky F. schrieb:
> Schau halt in einem Timer Interrupt welchen Pegel der Uart Eingang hat.

Gibt sogar was:
https://saeedsolutions.blogspot.com/2012/10/pic16f84a-interrupt-based-software-uart.html

von A. S. (Gast)


Lesenswert?

Mucky F. schrieb:
> Jede time lässt sich beliebig oversamplen. So dass man z.B. bei Jitter
> auf der RxD das ganze auch verwerfen kann.

Du hast doch so schon die 10-fache Interrupt-Last und 20-fache 
Anforderung an die Zeit. Bei 9.6 vielleicht easy, bei 115k vielleicht 
eine Herausforderung, bei TX und blockierend nur eine Fingerübung, aber 
wozu RX, wenn es den in HW gibt? Und dann noch oversamplen?

von Wolfgang W. (Gast)


Lesenswert?

@Anja:
Ich habe hier die Links zu den Errata-Files:
PIC16F18426:
https://www.microchip.com/content/dam/mchp/documents/MCU08/ProductDocuments/Errata/PIC16(L)F18426-46-Family-Silicon-Errata-and-Data-Sheet-Clarification-80000799C.pdf
PIC18F06Q40:
https://www.microchip.com/content/dam/mchp/documents/MCU08/ProductDocuments/Errata/PIC18F06-16Q40-Silicon-Errata-and-Data-Sheet-Clarifications-80000900C.pdf

Was in Deiner Applikation bei Benutzung des PIC18F06Q40 z. B. relevant 
sein könnte, ist die Konfiguration des Quarzoszillators. Normalerweise 
wird bei Frequenzen <= 4 MHz XT_OSC und darüber HS_OSC gewählt. Das 
Errata-File besagt aber, dass die aktuellen Chips schon ab 2 MHz als 
HS_OSC eingestellt werden sollen. Das gilt aber nur, wnn Deine Chips 
Rev. A4 sind. Bei den neueren Rev. A5 Chips ist dieser Fehler 
anscheinend behoben.

Da diese Q40-Chips erst richtig ab der neuen MPLABX V5.50 mit XC8 
unterstützt werden, weiss ich natürlich nicht, ob dort die 
Errata-Eigenheiten automatisch berücksichtigt werden.

Als Kuriosität zusätzlich: Nach dem geposteten Konfigurator ist der 
/MCLR nicht als Input RA3 eingestellt. Wenn Du den dort als Input 
konfigurierst, kannst Du den als RX-In bzw. CLCxIN verwenden und hättest 
dann auch mit dem 18426 ausreichend Pins. Da wird vielleicht Dein 
Konfigurator wieder mosern. Ich habe das aber bisher nur mit einem 
PIC18F16Q41 (in Assembler) eingesetzt, denke aber, dass das auch mit 
einem PIC16F18426 geht.

Viel Erfolg bei der Umsetzung.

von Anja (Gast)


Lesenswert?

Wolfgang W. schrieb:
> Ich habe hier die Links zu den Errata-Files:
Hallo,

Danke das erspart mir die Suche.
Das mit den 4 MHz könnte ein Thema sein obwohl ich nicht glaube daß nahe 
Raumtemperatur (15-40 Grad) bereits Probleme auftreten. Das ist meist 
ein Problem bei tiefen (<0 Grad) Temperaturen.
Auf der anderen Seite: wenn die Teile jetzt schon bei Reichelt 
erhältlich sind dürften es bereits ausgereifte Revisionen sein.

Gruß Anja

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.