Seriell överföring med endast en tråd?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Seriell överföring med endast en tråd?

Inlägg av Klas-Kenny »

Hej!

Jag har funderat lite, men lyckas inte komma fram till något riktigt vettigt.

Hur gör man egentligen om man vill ha en seriell överföring mellan t.ex. två µC, men endast en tråd? Med två trådar får jag ihop det (En clock och en data), men bara en ledning får jag inte ihop?

För, skulle jag ha så att varje µC läser med en hastighet på exakt t.ex. 500Khz känns inte alls tillförlitligt, då man inte vet helt säkert att de båda börjar exakt samtidigt osv. Dessutom känns det som en hel massa jobb att optimera koden så att ingenting tar för lång tid?

Någon som sitter på en bra guide hur man går till väga, eller har lust att skriva ihop någonting vettigt?
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: Seriell överföring med endast en tråd?

Inlägg av dangraf »

Hej!
Med 1 tråd, menar du då 1 signal samt 1 jord? Ett förslag man skulle kunna köra på är att du ändrar pulsbredden beroende på om du vill skicka en 1a eller en 0a, ung som radio. T.ex så skulle du kunna köra en puls på 1us = 0 samt 2us = 1 och ifall det är längre än 10us mellan 2 pulser så har överföringen brutits..
Har inte testat själv, men det var bara ett spontant förslag på hur man skulle kunna lösa problemet. Det kanske finns fler och bättre sätt.
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Seriell överföring med endast en tråd?

Inlägg av Icecap »

Man använder oftast den inbyggda UART till sånt. Den har hårdvaran till att avkänna start och klockar därefter automatisk (om den är ställd till rätt baud-rate).

Om du ska överföra signal åt båda håll (bidirektionellt eller half duplex) blir det lite knepigare och ska du överföra över längre avstånd kommer hela konceptet med 1 ledare (+ GND såklart) att ha allvarliga problem.

Och är det kortare sträckor som gäller dyker frågan upp: varför ha fler mikroprocessorer i samma projekt? Brukar bara bli besvärligt och onödigt komplext.

Ett tips är att beskriva VAD du vill göra, då brukar det komma fler och bättre svar.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Seriell överföring med endast en tråd?

Inlägg av sodjan »

> ...eller har lust att skriva ihop någonting vettigt?

Det är redan skrivits många gånger om.
T.ex http://sv.wikipedia.org/wiki/RS-232
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Seriell överföring med endast en tråd?

Inlägg av blueint »

Använder du Open collector och använder olika pulslängd för att indikera "0" respektive "1" enligt dangraf:s metod så kan du får det du önskar.

Pulsllängden måste dock vara så lång att mikrokontrollern hinner räkna tillräckligt antal klockcykler för att kunna skilja pulslängderna åt. Samt att klockan driver mindre (jitter) än gissningsvis halva tiden för den kortaste pulsen. Felkorrigering mha CRC eller liknande är nog också bra. Den interna RC oscilllatorn borde kunna klara uppgiften.

Det som är essentiellt för förståelsen är att man använder en "egen" tidspuls från en oscillator för att ersätta en överförd klockpuls.
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Seriell överföring med endast en tråd?

Inlägg av Nerre »

Både asynkron och synkron överföring använder ju ett pulståg på en ledning. Vid asynkron överföring har man en start-bit per sänd byte/oktett, eller egentligen är det väl stoppbiten som så att säga är synkroniseringen (men normalt så startar man ju timingen på startbitens flank).

Vid synkron överföring har man synkroniseringspulståg med jämna mellanrum för att synka ihop sändarens och mottagarens klocka.

Har man uC med inbyggd UART är det väl vettigast att använda den för asynkron överföring.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Seriell överföring med endast en tråd?

Inlägg av blueint »

Förutsättningen är att det finns nog med UART:s att tillgå. Samt att klockförskjutningen understiger 1/3 bit-tid under hela överföringen.
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Seriell överföring med endast en tråd?

Inlägg av Nerre »

Jag har skrivit seriekommunikation i assembler på ABC80 som utan problem klarade 300 BPS i alla fall. Och då var det ändå skrivet med fula loopar (med NOP) för timingen. Så det beror ju på vad man är ute efter för hastighet.

Den läste visserligen bara ett tecken i taget, men farsan körde den i flera år för att skicka program till/från sina NC-maskiner via långa seriekablar och en RS-232-växel (vridomkopplare som växlade mellan 4 anslutninar).
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Seriell överföring med endast en tråd?

Inlägg av victor_passe »

Vanlig uart modul + 2 dioder = klart!

Varje enhet har en diod med katod på TX och anod på RX och koppla samman alla RX.
Dock får man invertera uarten, så 1:a blir hög och 0:a låg.
Och man måste såklart hantera echot som blir, allt som sända tas också emot.
limpan4all
Inlägg: 8457
Blev medlem: 15 april 2006, 18:57:29
Ort: Typ Nyköping

Re: Seriell överföring med endast en tråd?

Inlägg av limpan4all »

Med en tråd så är det helt omöjligt, med en tråd och GND dvs två trådar totalt eller ett på något annat sätt ihopkopplat system så är det görbart och ganska enkelt dessutom.
Alla enheter sätter sin pinne till input, en av enheterna sätts till master, varje enhet pollas via protokoll och svarar då med att den vill sända eller att den inte vill sända, mastern går över i lyssning samt tar emot det som sänds, alla enheterna avgör om det sända var till dom eller inte. När sändningen avslutats (avslutningsmeddelandesträng) så börjar mastern att skicka ut pollningar igen. Om inget meddelande sänts på en viss tid så tas masteruppgiften över av någon annan enhet lämpligen efter en tid baserat på dess serienummer*ett tidsinkrement.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Seriell överföring med endast en tråd?

Inlägg av blueint »

Jag tog "Med två trådar får jag ihop det (En clock och en data), men bara en ledning får jag inte ihop?" som att han ej räknar GND. Utan räknar endast logiska signaler.
Men problemdefinitionen är oklar.
opatagio
Inlägg: 236
Blev medlem: 24 maj 2005, 20:19:21

Re: Seriell överföring med endast en tråd?

Inlägg av opatagio »

Har kört som victor_passe förslog med lyckade resultat, dock med ADM101E mellan enheterna för längre avstånd (9m kabel untwisted och 19.200 kbps utan några som helst problem). Har MCU:n inbyggd UART så är detta ett billigt och snabbt sätt att lösa det hela på, utan att behöva bitbanga egna protokoll.
Senast redigerad av blueint 15 juli 2010, 11:17:15, redigerad totalt 1 gång.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Seriell överföring med endast en tråd?

Inlägg av vfr »

Vanlig aynkron UART "is the shit" i det här fallet. UART:en hanterar allting med tider och programmet behöver inte bry sig. Sedan beror det på avståndet. På korta avstånd så funkar Victors metod utmärkt. Pullup och sänkande till nolla vid sändning. Ska man köra längre avstånd så kan man använda samma metod fast med lite mer avancerad "pullup" i form av en strömgenerator. Den går sedan att köra med både 12V & 24V.

En stor fördel är att man kan blanda "riktig" UART i hårdvara med soft-UART i mjukvara beroende på vilken hårdvara som finns tillgänglig och vilka hastigheter man pratar om.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Seriell överföring med endast en tråd?

Inlägg av Micke_s »

Titta på maxim:s app note http://www.maxim-ic.com/app-notes/index.mvp/id/214
Edit: fast med två uart:er i varje ände. Då har du halv-duplex uart över en tråd + gnd
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Seriell överföring med endast en tråd?

Inlägg av Icecap »

Då Klas-Kenny (KK?) inte har svarat någonting i tråden tycker jag att ytterligare svar är meningslösa. Jag kan t.o.m. komma på en lösning som medger full duplex på 1 tråd + GND men då KK inte har varit mer specifik rörande behov av avstånd, kommunikationshastighet, befintlig hårdvara osv känns det ganska meningslöst att gå vidare.
Skriv svar