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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

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

Inlägg 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
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Vad jag vet så går det inte. När SPEN sätts så växlas funktionen på båda pinnarna.
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

Inlägg 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...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

Inlägg 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...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg 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.
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

Inlägg 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...
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

Inlägg 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.
marcusg
Inlägg: 189
Blev medlem: 7 juli 2007, 21:27:51
Ort: Mariehamn (FI)

Inlägg 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!
Skriv svar