Interface från PiC till persondatorns comport...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
grapetonix
Inlägg: 293
Blev medlem: 14 juli 2004, 17:20:50
Skype: grapetonix
Ort: Hägersten, Stockholm

Inlägg av grapetonix »

Så, hur bitbangar man på ett bra sätt?

Hur funkar clocksynkningen vad gäller serieportar?

Om man ställt inporten på PC'n till 9600 baud, måste man då pumpa den @ ungefär prick 9600 baud eller går det fint att pumpa den mycket långsammare? Beror hastigheten på start-stop bitarnas längd eller hur ser alltsammans ut?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Du måste normalt hålla dig inom +-2% av nominell hastighet, annars så kan sändare och mottagare fasa ur. Eftersom det inte finns några klockpulser så måste man ha samma timing på båda sidorna. Småfel "nollställs" ju genom att startbitten fungerar som en synkronisering.

Enkelt sett så väntar den mottagande UART'en på att startbitten genom att vänta på att linjen ska gå +12 volt. Den delayar då i en halv bitperiod (för att komma "mitt i" varje puls) och kollar att det fortfaranre är +12, då är det en valid startbot och inte bara en glitch.

Därefter så delayar den en hel bitperiod och läser in den första databiten. Detta upprepas 7 gånger till så att hela byten har lästs in.

Sist så kollar den efter att stop-bitten verkligen kommer, annars är det något som är fel.
Användarvisningsbild
grapetonix
Inlägg: 293
Blev medlem: 14 juli 2004, 17:20:50
Skype: grapetonix
Ort: Hägersten, Stockholm

Inlägg av grapetonix »

matseng skrev:Dock så fungerar det nog bara i picbasic eller om man bitbangar själv eftersom man blir tvungen att invertera signalen för att nollorna och ettorna ska bli rätt.

' Set Debug mode: 0 = true, 1 = inverted
DEFINE DEBUG_MODE 1

Jag har inget minne av att jag sett att man kan invertera via flagga om man använder UART'en, men där kan jag ha fel förståss....
Hm, jag vet inte om jag fått något om bakfoten. Men det ser ut som om vissa picar har högnivå som standard i UARTen (nolla/ingen data) - kolla sid 105 i databladet för exempelvis min favorit 16F88.

Edit: det var det inte - jag prövade. Verkar bli för mycket strul med det här, Får väl ta och ge upp, jag köper en Max232 och håller truten :)

Nandgrind lär iofs. fungera för att invertera signalen också. men då är jag fortfarande kvar i cmos-logiknivåer så varför chansa...
Användarvisningsbild
grapetonix
Inlägg: 293
Blev medlem: 14 juli 2004, 17:20:50
Skype: grapetonix
Ort: Hägersten, Stockholm

Inlägg av grapetonix »

Skulle bara säga att jag nu fått det att fungera.

Använder Max 232 med fem 1uF kondingar, var lätt att få att funka, kopplade bara enligt elfas blad. Kör hårdvaru-USARTEN på en 16F88.

Den verkar ha lite problem med högre hastigheter dock som 57.6kbaud, men 19.2k fungerar bra.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

matseng skrev:Jag har inget minne av att jag sett att man kan invertera via flagga om man använder USART'en, men där kan jag ha fel förståss....
Vad jag förstått så går det inte att invertera när man kör via UARTen, därav ännu en anledning till att göra det ordentligt med en MAX232.

När jag använder PICBasics fusklösning så är det helt mjukvarukontrollerad seriell överföring som gäller, alltså bara för debug och liknande.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 30018
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

Det måste väl gå bra att använda en opamp med dubbel matning för att omvandla cmos-nivåer till rs232?
Användarvisningsbild
Tony
Inlägg: 1038
Blev medlem: 9 november 2003, 16:08:47

Inlägg av Tony »

Kan inte se att det inte skulle fungera.

Koppla den icke-inverterande ingången till Vref = 2,5V

Inverterande ingång = dataingång.

Och från RS-232 till TTL / CMOS: En NPN-transistorswitch med pullup på utgången.
ev. en diod från emitter till bas för att skydda basen mot negativa spänningar.
Skriv svar