Sida 1 av 1

pic16f688: Använda Rx som USART men Tx som I/O?

Postat: 10 mars 2008, 17:47:01
av marcusg
Går det att använda Tx-porten på en 16f688 som en vanlig output samtidigt som man använder Rx-porten för att ta emot RS232-data? Försöker göra det, men lyckas inte, så jag undrar ifall det är jag som gör något fel, eller ifall det helt enkelt inte går...

// Marcus

Postat: 10 mars 2008, 17:57:21
av Marta
Vad jag vet så går det inte. När SPEN sätts så växlas funktionen på båda pinnarna.

Postat: 10 mars 2008, 18:06:30
av marcusg
Jag var rätt för det. Synd att man inte lyckades klura ut det innan man ritat, etsat och lött ihop kortet... Planen var att kunna växa mellan en PWM-signal (för t.ex. ett RC servo) eller RS232-data (till ett digitalt fartreglage), men det gick ju sådär. Får fundera på hur jag skall lösa det - antingen modifiera kortet och göra ett nytt, eller fila bort banan till Tx och försöka löda ihop den med en annan ledig pinne...

Postat: 10 mars 2008, 18:30:17
av Marta
Enligt blockschemat för I/O-pinnarna ser det ut som om TRIS fungerar även i UART-läge så att TX kan släppa pinnen. Detta med reservation för att inte ha läst så mycket i databladet. I så fall är det bara att bygla till en oanvänd pinne och sedan låta bli att ställa båda som utgång samtidigt... Då kan Du få båda utgångsalternativen som jag tror Du tänkte det.

Postat: 10 mars 2008, 18:42:34
av marcusg
Hmm, de tre pinnar som inte används för tillfället är de tre pinnarna som används för ICSP. De är alla anslutna till +5V med ett motstånd på 10k. Att ansluta Tx till ICSPCLK (pin12) skulle vara mycket enkelt på mitt kort. Skulle det fungera att ansluta dessa direkt till varandra (så att det blir ett motstånd mellan dem och +5V)? ICSP borde väl fungera fortsättningsvis, samt att man kan använda en pinne i gången så som du beskriver (förutsatt att den metoden fungerar, alltså). Får se till att alltid koppla bort servot när jag programmerar bara, det kan nog få fnatt annars av att få signalen från ICSPCLK...

Postat: 10 mars 2008, 19:00:27
av Marta
Det var ju inte så bra att inga andra pinnar fanns lediga. Som Du säger så måste man tänka lite på vad som delar med flashningen. Ett olämpligt val kan både störa överföringen av programmet och ställa till oreda på annat sätt.

Förekomsten av ett pull-up på 10k skall inte ha någon inverkan i det här fallet.

Vad är det för tre pinnar Du avser? Utöver Reset/Vpp så är det ju bara två pinnar, för Du använder väl inte LVP?

Postat: 10 mars 2008, 19:02:42
av TomasL
du kan ju alltid "bitbanga", och köra en mjukvaru styrd serieport, då är du inte låst till några speciella I/O, dock krävs det lite mer kod, för att hantera det.

Postat: 10 mars 2008, 19:03:54
av marcusg
De pinnar du nämner, alltså tre stycken inklusive Vpp. Tror jag drar mig ut till verkstaden gör gör lite tester...

Postat: 10 mars 2008, 19:05:34
av marcusg
Undviker helst mjukvarukommunikation här, skulle behöva skriva om så mycket av koden (vilket för mig skulle ta ganska länge). Men det kan ju vara ett alternativ ifall jag inte lyckas få ihop det på annat sätt.

Postat: 10 mars 2008, 19:57:14
av marcusg
Nu har jag testat att koppla ihop de två pinnarna, och det gick som förväntat. Kan skicka både PWM och RS232 nu, det gäller att se till att båda pinnarna inte är output samtidigt, och jag måste koppla bort servot för att programmeringen skall fungera. Testade en gång med servot inkopplat, den fick mycket riktigt spader!

Några småsaker behöver kodas om i programmet för att få allt att fungera, men det är rätt små ändringar det handlar om, som tur är.

Tackar för hjälpen!