Digitala utgånar från PC

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
d98mp
Inlägg: 21
Blev medlem: 9 april 2005, 13:21:00

Digitala utgånar från PC

Inlägg av d98mp »

Som en del i ett större projekt vill jag kunna styra fyra knappar från mitt program i PC:n med en uppdateringsfrekvens på 1-10ms. Knapparna kortsluter jag med optokopplare, så allt jag behöver är fyra ledningar som kan vara på eller av. Efter att ha surfat runt en hel del verkar det som om man måste använda en slägga för att slå i en spik.

Serieporten vill jag egentligen inte använda eftersom den ju är på väg bort. Att använda USB verkar dock vara mycket omständigt och till slut kom jag på att en PIC16F628 (som jag har liggande) har en USART-modul. Det här känns som den enklaste lösningen och det finns ju adaptrar mellan USB och serieport.

Har jag missat någon enkel lösning? Att använda en extra mikroprocessor för att sätta fyra digitala utgångar känns som övervåld. Fullösningar med RTD och CTS känns osäkra.

Någon som använt USB? Är det så krångligt som det verkar (dvs är uppstartsträckan lång för att kunna skicka en byte till en PIC jämfört med att använda serieporten)?

Någon annan kommentar eller rekommendation?
Användarvisningsbild
LaRdA
EF Sponsor
Inlägg: 3766
Blev medlem: 9 september 2003, 14:10:46
Ort: Jämtland

Inlägg av LaRdA »

Att använda paralellporten hade varit en möjlighet eftersom den är ganska lätt att styra direkt, men eftersom den också är påväg bort så går inte det.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

En sån där USB-->seriell krets sen en trevlig PIC kanske.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Jag tycker att du är helt på rätt väg. Finns det parallellport så är det klart enklast. I annat fall gör man som du säger, bygger den för serieport med en mikrokontroller. Har man serieport så använder man den, annars kör man USB-omvandlare för serieport. Då är det bra att köra "riktig" seriekommunikation med att sända tecken istället för bara RTS/DTR etc.

Vill man ha lite mer komplicerad timing på signalerna än bara av/på, så är det oftast enda möjligheten då RTS/DTR-styrning är svår att få timing på över USB.
Användarvisningsbild
Tengil
Inlägg: 84
Blev medlem: 24 mars 2007, 00:15:46
Ort: Hudiksvall

Inlägg av Tengil »

Det finns PIC18 mcu's som har inbyggd USB. Sedan finns det standarddrivrutiner som gör så att du kan kommunicera över USB precis på samma sätt som du skulle göra om det vore en COM-port. Drivarna mappar USB'n till en virituell COM port.
Daniel Ahlin
Inlägg: 35
Blev medlem: 18 januari 2006, 21:36:14

Inlägg av Daniel Ahlin »

Jag skulle slaktat ett USB tangentbord. Då får du massor knappar och det är enkelt att skriva mjukvaran.

När du skriver digitala utgångar och knappar i samma mening blir jag fundersam, förutsätter att det är ingångar du menar.
sebastiannielsen
Inlägg: 3663
Blev medlem: 11 september 2004, 09:30:42
Ort: gbg
Kontakt:

Inlägg av sebastiannielsen »

Nej, han menar att han vill styra 4 knappar via mjukvara.

Dvs han har ersatt 4 knappar med 4 optokopplare, och sedan vill han styra dessa optokopplare via datorn.

RTS/DTR är ingen fullösning. Alla signaler stöds i USB<->RS232-adaptrar, det kan dock finnas några få som inte stöder RI-ingången (men RI är en interrupt som måste rensas vid avläsning, vilket gör det svårare att läsa av vilken status den har just nu)

Däremot är bitbangning via TX en "fullösning", eftersom många USB<->RS232-omvandlare stöder inte bitbangning via TX.

2 st USB<->RS232-omvandlare räcker för att få 4 utgångar (DTR + RTS på varje)

Eller om du bara behöver trycka in en knapp åt gången så kan du använda dig av en 4017 för att stega sig fram till den knapp man vill aktivera, och sedan aktivera den helt enkelt, med hjälp av 4 st AND-grindar.

Då kan det vara bra att koppla 1:an på 4017:en till CTS, CD eller DSR (utan AND-grind emellan), så man i mjukvara kan läsa av var 4017:en befinner sig. (man stegar 4017 fram tills man får en etta in på var man nu har kopplat den, och då vet man att 4017:en befinner sig vid ett)


Om du måste trycka ner flera knappar åt gången, så kan du använda dig av 4017 samt 4 st flipflops. Knapparna blir då dubbeltrycksknappar.

Man kan då koppla 2 av varje till OR-grindar, och så kan man i mjukvara läsa av om någon/båda av knapp 1&2 är aktiverad, eller om alla är oaktiverade. Samma gäller 3&4
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

sebastiannielsen> Alla signaler stöds i USB<->RS232-adaptrar...

Jo, men det kan vara svårt att uppnå :

d98mp> med en uppdateringsfrekvens på 1-10ms

med någon slags garanti...
sebastiannielsen
Inlägg: 3663
Blev medlem: 11 september 2004, 09:30:42
Ort: gbg
Kontakt:

Inlägg av sebastiannielsen »

10ms går säkert bra även med USB<->RS232-adapter. VB.NET-kod körs mycket snabbare än 10ms.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Alltid ? Helt oavsett vad koden gör ?
Det var inte illa... :-)

Sen tror jag att problemet (om något) ligger
i drivrutinerna och USB "lagret", inte i applikations
nivån...

Nu hjälper det ju inte med 10 ms i alla fall..
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Inlägg av arvidb »

sebastiannielsen:10ms går säkert bra även med USB<->RS232-adapter. VB.NET-kod körs mycket snabbare än 10ms.

Du borde läsa på lite om pre-emptive multitasking... :roll:

I Windows kan man inte räkna med större noggrannhet än ca 10-100 ms mellan två rader kod, eller t.o.m. inom en rad kod om kommandot inte är atomiskt (d.v.s. motsvarar exakt ett maskinkodskommando).

Arvid
xxargs
Inlägg: 10189
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Inlägg av xxargs »

speciellt inte om man skall igenom ett tjockt lager USB-protokoll med transaktionshanterare etc.

det går inte tillnärmelsevis ha samma tidskontroll på USB-RS232 som man kanske är van med mot äldre datorers UART - detta kan ingen VB-program eller annan programspråk i världen göra något åt då tidstjuven är oförutsägbar och djupt inne i själva OS:t

vi har labbrylar som använder RS232 med HPVEE och är i pricip omöjliga att använda i snabb och säker takt med USB-RS232 då varje transaktion mot USB-RS232 tar 50-60 ms även för enstaka tecken och omedelbar svar, på något som går ytterst smidigt och med goda marginaler med gamla UART-baserade RS232.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46916
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

En PC oavsett operativ, inte ens med gamla DOS, är speciellt bra för realtidsapplikationer.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Och inget OS (eller annan typ av plattform) kan bedömas innan man
definierar vad man menar med "realtid"... :-)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46916
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Nja, är inte realtid just realtid, dvs händer just nu, om jag i programmet skall sätta en port och det skall hända direkt är väl det realtid, allt annat är väl i princip inte realtid.

Vad jag menar med föregående inlägg, en pc är oerhört dålig på att hantera portar och övrig hårdvara, just pga att det är en pc, IO hanteras via DMA, instruktions och data cache gör att du aldrig kan vara riktigt säker på om det du vill hända nu, verkligen händer nu.

Till exempel, om man skall hantera IO-portar direkt, måste man flusha cachen vid varje access, och det tar ju lite tid.
Skriv svar