Sida 1 av 2
RS232 handskakning
Postat: 7 november 2010, 15:17:57
av wolie
Har en gammal pryl som använder rs232. Den tar emot via RX och sänder handskakning över CTS. Enheten (terminal) som ska kopplas ihop med denna pryl har bara 3-wire rs232.
Min idé: Koppla CTS från prylen till en attiny2313 som sänder ut något tecken till RX hos terminalen när CTS dras aktiv. Mjukvaran på terminalen sköter sedan handskakningen mha. tecknet den får från attiny:n.
Prylen kräver 115200bps och 2 stoppbitar.
Möjligt? Någon som försökt något liknande? Ska jag sluta röka på?
Re: RS232 handskakning
Postat: 7 november 2010, 15:27:42
av sodjan
Beskriv "pryl" bättre.
*Vet* du att du för problem om du kör utan handskakning ?
D.v.s om du kopplar CTS hårt till "on" ?
Re: RS232 handskakning
Postat: 7 november 2010, 15:36:51
av wolie
Gammal skrivare. Är nog inte aktuellt att modifiera firmwaren i den. Om jag kör CTS aktiv så tappar skrivaren bort sig. Den skriver en mening här och en fem rader nedanför. Har provat med att skicka datan i olika tidsintervall, men med samma resultat. Har källkod till drivrutinen och den ser ut såhär:
Kod: Markera allt
if (!MS_CTS_ON))
{
if (nTimeout == 0)
{
nTimeoutPlus = (dwIndex-dwLast)*100;
dwLast = dwIndex;
}
Sleep(1);
nTimeout += dwSleepRes;
dwIndex--;
}
else
{
nTimeout = 0;
WriteFile(g_hPrint, (BYTE*)lpBuffer+dwIndex, 1, &dwNumBytesWritten, NULL);
}
Den kollar alltså efter varje skrivet byte om CTS är av och väntar i så fall.
Re: RS232 handskakning
Postat: 7 november 2010, 15:50:04
av sodjan
Byta skrivare ?
Vilken "drivrutin" ? Drivrutin i vadå ?
Hobby eller professionell användning ?
Vad 17 är det du ska koppla ihop ? En "terminal" och en skrivare ?
Är det alltså skrivaren (vad för skrivare?) som du kaller "pryl" ?
Vad är det du kallar "Enheten (terminal)" igentligen för något ?
Någon speciellt anledning att inte beskriva det hela lite tydligare ?
Re: RS232 handskakning
Postat: 7 november 2010, 15:59:53
av wolie
1. Vill helst inte hålla på och köpa upp en massa skrivare.
2. Drivrutinen för skrivaren när den är inkopplad till en dator.
3. Hobby.
4. En handdator (=terminal) och en skrivare (=pryl). Finns ingen CTS signal tillgänglig på handdatorn.
5. Nej.
Re: RS232 handskakning
Postat: 7 november 2010, 16:11:31
av sodjan
> 4. En handdator (=terminal) och en skrivare (=pryl).
Fabrikat/modell på dessa ?
Re: RS232 handskakning
Postat: 7 november 2010, 16:21:45
av wolie
Handdator: iPhone 3.1.3 jailbreakad.
Skrivare: Noname. Klarar PostScript 3.0, dvs. inga konstigheter där.
Re: RS232 handskakning
Postat: 7 november 2010, 16:37:26
av sodjan
Det konstiga är väl att man inte kan ställa hastigheten på skrivaren.
Varför kräven den "115200bps och 2 stoppbitar" ?
Den "drivrutin" du visade har alltså ingenting med det aktuella problemet att göra ?
Vad stöder iPhone applikationen för handskakning ? Xon/Xoff ?
Re: RS232 handskakning
Postat: 7 november 2010, 16:57:59
av willmans
Det är ganska enkelt,
Programmera mikroprocessorn så att den skickar Xon/Xoff när CTS är hög/låg,
Koppla CTS till en pinne som den pollar eller mha interrupt (Behövs kanske någon slags nivåkonvertering? från +-12V till 5-0V) och när CTS ändras skickar man iväg ett Xon eller Xoff tecken på UARTen som konfigurereas till 115200bps och 2stoppbitar. Mikroprocessorns TX kopplas till terminalens RX, terminalens TX kopplas till skrivarens RX, skrivarens CTS till mikroprocessorn.
Ställ in terminalprogrammet på Xon/Xoff handskakning.
Re: RS232 handskakning
Postat: 7 november 2010, 17:08:55
av wolie
Baudraten eller stopbitarna är inte problemet. Drivrutinen jag visade var den metod som används när man kommunicerar med skrivaren. Man kan kontrollera iPhone:ns serieport, så man kan använda mjukvaruhanskakning.
Problemet är att skrivaren vill ha hårdvaruhanskakning men iPhone:en klarar bara mjukvaruhandskakning.
@willmans
Ja, precis. Har du gjort detta? Kan en attiny2313 @ 8MHz tänkas klara av detta?
Re: RS232 handskakning
Postat: 7 november 2010, 17:11:26
av willmans
Därför omvandlar du CTS signalen till mjukvarubaserad handskakning med mikroprocessorn. Skrivaren skickar väl inget tillbaka till terminalen? Då är RX på terminalen ledig att kopplas till mikroprocessorn.
Ställer du in terminalprogrammet på Xon/Xoff så stannar den när den tar emot ett Xoff tecken och startar igen när den får ett Xon, precis som CTS signalen fast man sparar en kabel.
Kolla i databladet till processorn om den klarar av 115200 baud vid 8MHz, annars får du ta snabbare kristall.
Re: RS232 handskakning
Postat: 7 november 2010, 17:19:58
av sodjan
> Baudraten eller stopbitarna är inte problemet.
Nja, problemet och problemet...
Om inget annat fungerar kan man "lösa" liknande problem genom att helt enkelt
sänka hastigheten tills handskakningen inte längre behövs (d.v.s skrivaren hinner med).
Om inget annat fungerar så kommer sannolikt en Xon/Xoff till
CTS omvandlare att eventuellt fungera. Eller genom att fixa en
buffert mella IPhone och skrivaren (t.ex med en AVR/PIC) som helt
enkelt har tillräckligt med utrymme för att köra utan handskakning.
Sen så är det ju en märklig skrivare där man inte kan ändra hastigheten.
Det har jag aldrig sett så det vore intressant att veta mer om den.
Re: RS232 handskakning
Postat: 7 november 2010, 17:40:46
av wolie
Baudrate är hårdkodat i firmwaren.
"Xon/Xoff till CTS omvandlare " är precis vad jag frågat efter. Finns det någon som byggt en sådan? Om man ska bygga själv så kommer ju problemet med negativa spänningar, och huvudvärken/komponenterna plockar på.
Re: RS232 handskakning
Postat: 7 november 2010, 18:02:21
av sodjan
Re: RS232 handskakning
Postat: 8 november 2010, 02:36:57
av blueint
Frågan är om "terminalen" reagerar snabbt nog på Xoff så att ingen byte går förlorad.
Vad tror ni?