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
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
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
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
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
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.
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.
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.
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?
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