Sida 1 av 2
Serieport (rs232) flödeskontroll.
Postat: 23 februari 2008, 10:13:14
av victor_passe
Hej, jag håller på med ett projekt i vilket jag behöver flytta data mellan en dator och en bs2p 40pin. Problemet är att jag hela tiden måste skicka data från bs2:an och ibland skicka data till den.
Som det ser ut nu så är koden ungefär så här:
Kod: Markera allt
DO
gosub get sensors
SEROUT 15, 240,[HEX aa, HEX ab,HEX ac,HEX ad,HEX light, HEX heat,CR]
SERIN 14, 240, 250, no_data, [WAIT("f:"),DEC freq,WAIT("l:"),DEC leng]
FREQOUT 0, leng, freq
no_data:
LOOP
Programmet hämtar altså hela tiden sensor värden, pressenterar och lyssnar efter f:xxxl:xxx i 250mS och på timeout går den till no_data.
Men den missar ibland (1 gång på 10) när jag skriver tex "f:2300l:200" till den.
Häjer jag 250mS till 500mS så missar den inte men jag vill ha sensordatan oftare.
Datorn kör ett qbasic program, kan jag använda RTS på något sätt för att indikera "Nu skickar jag data" till bs2:an? Eller finns det något annat sätt att göra?
Postat: 23 februari 2008, 10:32:39
av Icecap
Jag skulle tro att du hamnar i det "vanliga" problem med BS: undermålig prestanda.
Jag kan räkna ut vad "SEROUT" och "SERIN" gör, jag skulle tro att numret omedelbart efter är pinnummer eller liknande, sedan kanske ett baudrate-relaterat värde och efter det vad som ska göras.
Detta betyder "bitbang"-UART som är nog den sämsta lösning som finns, den kan bara ta emot när den väntar på input.
Med hårdvara-UART kan man kolla om det har kommit något och sedan ta hand om det såvida man inte använder sig av interrupt som kan ta hand om inkommande kommunikation "osynligt".
Så problemet kommer alltså av att den tid det tar att sända och bearbeta sensorerna är för lång pga. trög processor.
Postat: 23 februari 2008, 11:04:13
av victor_passe
Jo, det du säger stämmer bra, men hur kan jag använda mig av interupts via com?
Eller måste jag blanda in parallellporten med?
Postat: 23 februari 2008, 11:13:35
av Icecap
Du behöver inte bekymra din om PC'n, den hänger med alldeles fint.
Och efter vad jag vet om BS kan du glömma allt om interrupt på den, den är helt enkelt mycket enkel att komma igång med men blir komplexiteten lite mer än "blinka lampa" är den stekt, den är "för enkel"!.
Den är ett mycket dyrt sätt att köpa en CPU med långsam exekvering, många begränsningar och lite minne.
För 1 st BS2P40 kan man köpa en Wisp648 samt "en hög" lämpliga PIC-processorer och då kan du göra allt detta utan besvär OCH ändå spara pengar och WISP'en återanvänder du ju "i all evighet".
Enda kruxet är att du då måste lära dig att programmera "på riktigt" men det skulle inte vara ett större problem.
Postat: 23 februari 2008, 11:25:37
av sodjan
Jag har för mig att en PC/Windows stöder Xon/Xoff.
Kolla det, och sätt upp COM porten att använda det.
Sedan kan du lätt styra kommunikationen från BS2'an...
Postat: 23 februari 2008, 11:26:26
av sodjan
Admin: flytta till "Mikroprocessorer" ?
Postat: 23 februari 2008, 11:39:37
av victor_passe
Men kan jag inte koppla RTS till säg pin 5 på bs2:an och skriva:
Eller hur funkar RTS och alla andra pinnar?
Och hur funkar XOR på seriporten?, inverterar den bara all data eller?
Postat: 23 februari 2008, 11:41:10
av sodjan
XOR ????
Postat: 23 februari 2008, 12:07:12
av victor_passe
Jag vet vad xor är, men vad xor:as?
Datan?
Postat: 23 februari 2008, 13:45:35
av lgrfbs
Xon/Xoff är mjukvaru styrd flödeskontroll.
Postat: 23 februari 2008, 13:49:13
av victor_passe
Okej, men jag behöver hårdvaru styrning.
Eller snarare en sänd/lyssna interuppt.
Postat: 23 februari 2008, 16:14:30
av oJsan
Problemet du har är väl att inte BS2:an "lyssnar" då du sänder data till den, den kanske råkar vara upptagen med SEROUT eller "get sensors".
En enkel lösning skulle vara att inte skicka "f:2300l:200" direkt då DU skriver det. Buffra istället textsträngen och skicka den omedelbart (inom 250ms) efter att du mottagit sensordatat från BS2:an, då VET du att den står och lyssnar.
Men den tekniken bör du dessutom kunna minska timeouten en hel del.
Postat: 23 februari 2008, 16:16:49
av sodjan
> Jag vet vad xor är..
Jättebra, det tror jag säkert, men var kommer XOR in i det hela ???
> men jag behöver hårdvaru styrning.
Varför det ?
> Eller snarare en sänd/lyssna interuppt.
Stöder BS2'an det ? I så fall är det väl bara att använda det.
Postat: 23 februari 2008, 19:33:59
av victor_passe
oJsan:
Tack, det svaret var perfekt.
Klart jag ska göra så.
Och sodjan:
Jag tyckte att det stod xor inte xon/xoff.
Men bs2 stödjer inte interuppts men jag kan skriva:
Kod: Markera allt
if in14 then
serin...
freqout...
else
getdata
serout...
end if
Kanske inte interupt direkt men hårdvarustyrning av bs2:an.
Postat: 23 februari 2008, 19:43:05
av Icecap
Det finns mycket man kan göra för att kompensera för kass hårdvara men en sak verkar du glömma: BullShitten (BS) tar inte emot seriell kommunikation om inte den ska det, alltså kan du inte ta emot när den inte står och väntar på att ta emot seriell information.