Ik wil een serial-repeater maken die meerdere serial porten kan koppelen aan elkaar.
(hier afgebeeld drie maar het moeten er meer worden misschien in combi met een andere IC (bijv een 4220 met 36 IO pins)
Het idee is dat je een 'serial console verbinding' kunt opzetten doordat de chip luistert op alle poorten naar een 'start session' control char, gevolgd door het nummer van de poort.
De IC bindt dan de 'vragende' port en de targetport aan elkaar en doet pass-trough serial communicatie tot hij een 'end session' control char krijgt. De chip gaat dan weer in 'luister' mode.
Ook als er bijvoorbeeld 5 minuten geen activiteit meer is geweest van de 'master' moet hij terugvallen in luistermode.
De schakeling maken lukt me wel, evenals de PCB ervoor, Ik heb echter maar weinig ervaring met PICs proggen (beetje picbasic en geen assembler) en vroeg me af wat haalbaar is en wat of iemand nog tips had over hoe ik het beste te werk kan gaan.
Waar ik met name over twijfel is hoe ik op port 1 kan luisteren of er een char binnenkomt zonder in die tijd een char op port 2 te missen. De hardware UARTs van die chips hebben hiervoor een buffer meen ik maar daar zijn er hooguit twee van op een PIC. Is zoiets in software mogelijk met bijvoorbeeld proton picbasic? of moet ik echt low-level gaan proggen hiervoor (of is het in het geheel niet mogelijk?)
<hier zal ik vorderingen bijhouden:>
http://www.budgetdedicated.com/serial-repeat.html
Ja dat er (belachelijk dure) commerciele varianten op de markt zijn weet ik ook wel. Dat geldt trouwens voor 99% van wat er op circuitsonline staat hoor.
Ik weet niet wat voor serieele aparaten je wil gaan aansluiten, maar als het even kan is het makkelijker om v/d hardware handshaking gebruik te maken. In ieder geval van de DTR (Data terminal ready)lijn.
Als je nu op poort 1 gegevens binnen krijgt dan maak je de DTR lijn voor de andere poorten hoog, de aparaten op deze poorten zullen dan geen data zenden, maar wachten tot de DTR weer laag is. Zo hoef je geen buffers te maken en maak je met 1 draadje extra een betrouwbaarder systeem.
Succes Ermee
ja aan een dergelijke setup heb ik ook zitten denken, maar dit is niet een kwestie van 1 draadje. Het is volgens mij een kwestie van 1 draad per poort. Het aantal serial ports dat ik dan kan aansturen is direct een stuk lager. Daarnaast weet ik in ieder geval van 1 van de aan te sturen gevallen dat het slechts rx/tx/gnd gebruikt, deze zou dan al niet aangestuurd kunnen worden.
Blijkbaar is het toch niet zo eenvoudig. Zou het een reden hebben dat die commerciele dingen een paar centen kosten?
Afijn, hardware handshaking is leuk, maar niet 100% waterdicht. Je kan niets met 2 devices die toevallig gelijktijdig wat versturen.
Enige oplossing die ik voor je zie (en die die 'belachelijk dure' commerciele dingen ook gebruiken...) is een hardware UART aan je uC hangen. Dat wordt alleen weer niet leuk met een pic-ding, je gaat erg hard door je I/O pins heen. Verder zou je nog eens kunnen kijken naar SPI UARTS (oa. Maxim). Die bufferen zelf al wat en als je een pic-ding met SPI hardware aan boord neemt, zou dat nog kunnen werken. Geen idee wat die dingen kosten.
Voor zover ik heb kunnen vinden zijn er commerciele varianten met 16 poorten vanaf zo'n 1000 euro+ , voor de meest simpele varianten (heb ze zelfs gezien voor 4000).
Zelfs al zou ik per poort een PIC moeten inzetten (bijv een PIC16F684 @ 1,45 euro) zou ik voor 16 poorten komen op
pics 16x = 23,00
connectoren 16x = 6,75
max232 8* = 5,75
PCB ~ 35,00
voeding ~ 10,00
behuizing profi metaal ~ 50,00
kom ik in totaal op ca 130 euro voor een 16 poort versie in metalen 19" uitvoering. Aangezien ik er twee wil hebben is dit een behoorlijke besparing en niet in de laatste plaats een zeer leuk 'hobby' project.
De hardware (bufferende) uart is zeker de moeite waard om eens naar te kijken daar had ik nog niet aan gedacht. En inderdaad het handshaking principe is niet goed genoeg vrees ik.