pic16f688: Använda Rx som USART men Tx som I/O?
pic16f688: Använda Rx som USART men Tx som I/O?
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
// Marcus
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...
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.
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...
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?
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?
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!
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!